Delphi - объектно-ориентированный язык программирования, разработанный компанией Borland в 1995 году. Он основан на языке программирования Pascal, но имеет более расширенные возможности и добавлены новые функции.
Delphi является интегрированной средой разработки (IDE), которая позволяет разрабатывать программное обеспечение для различных платформ, включая Windows, macOS, Android и iOS. Delphi достигает многоплатформенности с помощью...
Взято из "Dtopics Database 1.10 from 3K computer Consultancy":
Dbase в BDE имеет большее количество ситуаций 'особого случая', чем таблицы SQL и Paradox, поскольку данный формат поддерживает выражения в индексах и прочие характеристики, например:
DbiRegenIndexes( Table1.Handle ); { Регенерация всех индексов }
создание индекса (зависит от того, существует ли выражение или нет)
if(( Pos('(',cTagExp) + Pos('+',cTagExp) ) > 0 ) then
Table1.AddIndex( cTagName, cTagExp, [ixExpression]) {<- ixExpression - _литерал_} else
Table1.AddIndex( cTagName, cTagExp, []);
вызов процедуры BDE DbiLinkDetailToExp() вместо обычной DbiLinkDetail()
withTable1 do
StrPCopy( TName, TableName ); Result := DBIPackTable( DbHandle, Handle, TName, szDBASE, TRUE
);
DbiSetProp( hDBIObj(Table1.Handle), curSOFTDELETEON, LongInt(bValue));
DbiSetProp( hDBIObj(Table1.Handle), curINEXACTON, LongInt(bValue));
Ну и теперь сами вопросы:
Как мне увидеть записи dBASE, помеченные для удаления?"
В обработчике события AfterOpen вызовите приведенную ниже функцию. Включите DBITYPES, DBIERRS, DBIPROCS в список используемых модулей. Для вызова функции передайте ей в качестве аргумента имя TTable и TRUE/FALSE в зависимости от необходимости показа/скрытия удаленных записей. Пример:
procedureTForm1.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 замените его таким образом:
procedureTForm1.Table1CalcFields(DataSet: TDataset); var
RCProps : RecProps; Result : DBIResult; begin
Result := DbiGetRecord(Table1.Handle, dbiNo
Рукописи не горят...