Упаковка таблиц dBASE требует вызова BDE функции DbiPackTable.
Пример ее использования показан ниже, включая проверку на ошибки.
Чтобы воспользоваться функцией DbiPackTable, вызывающий модуль
должен в своей секции uses иметь модули-обертки BDE DbiTypes,
DbiErrs и DbiProcs.
При неудачном вызове DbiPackTable, сообщение об ошибке не
генерится. Для того, чтобы понять как функция сработала, вам
необходимо проверить возвращаемое ею значение. В случае успешного
выполнения возвращаемое значение равно DBIERR_NONE. Любое другое
значение указывает на ошибку, а с помощью него можно определить саму
ошибку, ее причину, и наметить действия, необходимые для ее
устранения.
Вот сам пример:
procedure TForm1.Button1Click(Sender: TObject);
var
Error: DbiResult;
ErrorMsg: string;
Special: DBIMSG;
begin
table1.Active := False;
try
Table1.Exclusive := True;
Table1.Active := True;
Error := DbiPackTable(Table1.DBHandle, Table1.Handle, nil, szdBASE, True);
Table1.Active := False;
Table1.Exclusive := False;
finally
Table1.Active := True;
end;
case Error of
DBIERR_NONE:
ErrorMsg := 'Успешно';
DBIERR_INVALIDPARAM:
ErrorMsg := 'Указанное имя таблицы или указатель на имя таблицы ' +
'равен NULL';
DBIERR_INVALIDHNDL:
ErrorMsg := 'Указанный дескриптор базы данных или курсора ' +
'неверен или равен NULL';
DBIERR_NOSUCHTABLE:
ErrorMsg := 'Таблица с таким именем не существует';
DBIERR_UNKNOWNTBLTYPE:
ErrorMsg := 'Неизвестный тип таблицы';
DBIERR_NEEDEXCLACCESS:
ErrorMsg := 'Таблица открыта не в эксклюзивном режиме';
else
DbiGetErrorString(Error, Special);
ErrorMsg := '[' + IntToStr(Error) + ']: ' + Special;
end;
MessageDlg(ErrorMsg, mtWarning, [mbOk], 0);
end;
|
|