Delphi TTable.Exists не работает в таблице Paradox, даже если таблицы базы данных существуют - PullRequest
2 голосов
/ 02 июня 2011

Когда я создаю объект таблицы (Table1) с нуля и назначаю свойство TableName существующей таблице на диске, функция Table1.Exist завершается ошибкой.Я использую Delphi2010, и это таблица Paradox 7.

filename := ZipMaster1.DirEntry[i].FileName;
if Pos('.DB', UpperCase(filename)) > 0 then
begin
  Table1 := TTable.Create(FormArchiveFileSelector);
  Table1.TableName := IncludeTrailingPathDelimiter(ExtractDir) + ExtractFileName(filename);
  if Table1.Exists then
    Table1.DeleteTable;
  Table1.Free;
end;

Когда я заменяю Table1.Exists на FileExists(Table1.TableName), это возвращает true.У кого-нибудь есть объяснение этому?

Код решения

Придерживаясь предложений, ниже приведен пример «правильного» примера кода:

filename := 'C:\Temp\tables\XXX_1.db';
Table1.DatabaseName := ExtractFilePath(filename);
Table1.Tablename := ExtractFileName(filename);
if Table1.Exists then MessageDlg('Exists', mtInformation, [mbOK], 0)
else MessageDlg('Missing', mtInformation, [mbOK], 0);

Примечание: Даже при установке Table1.Tablename на полный путь и имя таблицы при правильной настройке DatabaseName функция Exists не будет работать.TableName должно быть без пути, всегда.

1 Ответ

4 голосов
/ 02 июня 2011

Вам необходимо отдельно установить имя_базы_данных и имя_файла.

Table1 := TTable.Create(whatever);
Table1.DatabaseName := ExtractDir;
Table1.TableName := ExtractFileName(filename);

(Вам действительно следует отказаться от файлов BDE и Paradox (а также от TTable). BDE устарел уже более десяти лет и может не появиться в будущих версиях Delphi. Существуют серьезные проблемы с последние версии Windows.)

...