Упаковка таблиц 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; |
[001308]