CreateTable上的Paradox错误

时间:2013-01-30 13:58:22

标签: delphi delphi-2007 bde

我在执行期间创建了表,但是在创建表时(参见我的代码)


procedure CreateTempTable(pDataBaseName,pSessionName:String);
begin
  //-------create "TempTable" 
  TempTable:=TTable.Create(application);
  With TempTable Do
  begin
    //-------set false in "Active"
    Active := False;
    //-------name of Session
    SessionName:=pSessionName;
    //-------name of DataBase.
    DatabaseName :=pDataBaseName;
    Filtered := True;
    //-------name of table
    TableName := 'TempTabl.DB';
    //-------paradox type
    TableType := ttParadox;
    //-------if the table is already exists
    if TempTable.Exists then
      //-------delete the table
      TempTable.DeleteTable;
    //-------create 2 fields "Field1" & "Field2"
    with FieldDefs do
    begin
      Clear;
      with AddFieldDef do
      begin
        DataType := ftFloat;
        Name := 'Field1';
      end;
      with AddFieldDef do
      begin
        DataType := ftFloat;
        Name:='Field2';
      end;
    end;

    //-------Create table
    CreateTable;  // Here where the exception bursts off
  end;
end;

引发异常,即:“表打开,表不存在”。 那究竟是什么问题,是开放还是不存在?

这是例外: enter image description here

1 个答案:

答案 0 :(得分:2)

(在With TempTable Do内)没有必要删除TempTabl.DB显式。无论如何都会被CreateTable覆盖。

要测试IDE中的其他组件是否未使用该表,您可以尝试删除文件TempTabl.DB

CreateTempTable 现在是一个函数CreateTempTable(pDataBaseName,pSessionName:String):Boolean;
所以你可以更好地处理错误。

使用 delphi 5 RAD Studio 2007进行测试

function CreateTempTable(pDataBaseName,pSessionName:String):Boolean;
begin
result:=false;
// assume pDataBaseName=directory, or change it 
if FileExists(pDataBaseName+'TempTabl.DB') then begin
   if NOT DeleteFile(pDataBaseName+'TempTabl.DB') then begin
      showMessage('Table opened by another part of the IDE');
      exit;
   end;
end;

TempTable:=TTable.Create(application);
With TempTable Do
begin
Active := False;
SessionName:=pSessionName;
DatabaseName :=pDataBaseName;
//Filtered := True;
TableName := 'TempTabl.DB';
TableType := ttParadox;
with FieldDefs do
begin
  Clear;
  with AddFieldDef do
  begin
    DataType := ftFloat;
    Name := 'Field1';
  end;
  with AddFieldDef do
  begin
    DataType := ftFloat;
    Name:='Field2';
  end;
end;
CreateTable;
result:=true;
end;
end;