即使存在数据库表,Delphi TTable.Exists也会在Paradox表上失败

时间:2011-06-01 22:58:19

标签: delphi delphi-2010 paradox

当我从头创建表对象(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);

注意:在正确设置DatabaseName时,即使将Table1.Tablename设置为完整路径和表名,也会导致Exists功能失败。 TableName必须始终为不带路径。

1 个答案:

答案 0 :(得分:4)

您需要单独设置DatabaseName和FileName。

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

(你应该真正摆脱BDE和Paradox文件(以及TTable).BDE已经被弃用了十多年,并且可能不会在未来的Delphi版本中发布。有严重的问题。最新版本的Windows。)