Оригинальный DVD-ROM: eXeL@B DVD !
eXeL@B ВИДЕОКУРС !

Курс видеоуроков КРЭКЕРСТВО + ПРОГРАММИРОВАНИЕ 2017
(актуальность: июнь 2017)
Свежие инструменты, новые видеоуроки!

  • 400+ видеоуроков
  • 800 инструментов
  • 100+ свежих книг и статей

УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

БОЛЬШОЙ FAQ ПО DELPHI



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

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

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

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

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

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


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

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

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

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

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

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

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

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

  9.  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
 

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




<< ВЕРНУТЬСЯ В ОГЛАВЛЕНИЕ



Материалы находятся на сайте https://exelab.ru/pro/



Оригинальный DVD-ROM: eXeL@B DVD !


Вы находитесь на EXELAB.rU
Проект ReactOS