Пакование таблиц dBASE 2
Упаковка таблиц 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; |