Приветствую Вас Гость | RSS

Меню сайта

Реклама

Категории раздела
ADO [17]
ASCII и CSV [12]
Access [20]
Alias [24]
BDE [37]
BLOB поля [19]
Clipper [2]
DB2 [2]
DBASE и DBF [26]
Fox Pro [1]
Interbase [21]
MSSQL [0]
ODBC [10]
Oracle [0]
Paradox [0]
SQL [29]
Sybase [1]
База данных [0]
Закладки [2]
Записи [0]
Индексы [10]
Компоненты и Базы данных [0]
Модуль данных [3]
Отчеты [2]
Ошибки БД [17]
Поиск [16]
Поля [0]
Сортировка и Фильтр [6]
Таблицы [0]

Наш опрос
Есть ли у Вас свой сайт?
Всего ответов: 48

Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0

Форма входа

Главная » Статьи » Базы данных » DBASE и DBF

Определение удаления записей в .DBF

Взято из "Dtopics Database 1.10 from 3K computer Consultancy":

Dbase в BDE имеет большее количество ситуаций 'особого случая', чем таблицы SQL и Paradox, поскольку данный формат поддерживает выражения в индексах и прочие характеристики, например:

  1. Создание и пересоздание индекса


    DbiRegenIndexes( Table1.Handle ); { Регенерация всех индексов }

    создание индекса (зависит от того, существует ли выражение или нет)


    if (( Pos('(',cTagExp) + Pos('+',cTagExp) ) > 0 ) then
    Table1.AddIndex( cTagName, cTagExp, [ixExpression]) {<- ixExpression - _литерал_}
    else
    Table1.AddIndex( cTagName, cTagExp, []);

  2. Связки Master/Detail в выражениях дочерних индексов

    вызов процедуры BDE DbiLinkDetailToExp() вместо обычной DbiLinkDetail()

  3. Пакование таблиц


    with Table1 do
    StrPCopy( TName, TableName );
    Result := DBIPackTable( DbHandle, Handle, TName, szDBASE, TRUE );

  4. Задание видимости удаленных записей - вкл/выкл (например, dBase SET DELETED ON/OFF)


    DbiSetProp( hDBIObj(Table1.Handle), curSOFTDELETEON, LongInt(bValue));

  5. Задание частичного/полного соответствия символов - вкл/выкл (например, dBase SET EXACT ON/OFF)


    DbiSetProp( hDBIObj(Table1.Handle), curINEXACTON, LongInt(bValue));

Ну и теперь сами вопросы:

Как мне увидеть записи dBASE, помеченные для удаления?"

В обработчике события AfterOpen вызовите приведенную ниже функцию. Включите DBITYPES, DBIERRS, DBIPROCS в список используемых модулей. Для вызова функции передайте ей в качестве аргумента имя TTable и TRUE/FALSE в зависимости от необходимости показа/скрытия удаленных записей. Пример:


procedure TForm1.Table1AfterOpen(DataSet: TDataset);
begin
SetDelete(Table1, TRUE);
end;

procedure SetDelete(oTable: TTable; Value: Boolean);
var
rslt: DBIResult;
szErrMsg: DBIMSG;
begin
try
Table.DisableControls;
try
rslt := DbiSetProp(hDBIObj(oTable.Handle), curSOFTDELETEON,
LongInt(Value));
if rslt <> DBIERR_NONE then
begin
DbiGetErrorString(rslt, szErrMsg);
raise Exception.Create(StrPas(szErrMsg));
end;
except
on E: EDBEngineError do
ShowMessage(E.Message);
on E: Exception do
ShowMessage(E.Message);
end;
finally
Table.Refresh;
Table.EnableControls;
end;
end;

"Могу ли я создать в табличной сетке колонку, в которой будут показываться записи, помеченные для удаления из таблицы dBASE?"

Создайте вычисляемое поле, затем в обработчике события таблицы OnCalcField замените его таким образом:


procedure TForm1.Table1CalcFields(DataSet: TDataset);
var
RCProps : RecProps;
Result : DBIResult;
begin
Result := DbiGetRecord(Table1.Handle, dbiNo

Рукописи не горят...

Категория: DBASE и DBF | Добавил: Angel (28.07.2008)
Просмотров: 448 | Рейтинг: 0.0/0
  Delphi Lab   Главная   Регистрация   Вход  
Интересная Цитата

Поиск

Магазин


Copyright MyCorp © 2024 Хостинг от uCoz