1

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

过程 CreateTempTable(pDataBaseName,pSessionName:String);
开始
  //-------创建“临时表”
  TempTable:=TTable.Create(application);
  用 TempTable 做
  开始
    //--------在“活动”中设置为假
    主动:=假;
    //--------会话名称
    会话名称:= p会话名称;
    //-------数据库的名称。
    数据库名称:=pDataBaseName;
    过滤:=真;
    //-------表名
    表名 := 'TempTabl.DB';
    //-------悖论类型
    TableType := ttParadox;
    //-------如果表已经存在
    如果 TempTable.Exists 则
      //--------删除表
      临时表。删除表;
    //-------创建2个字段“Field1”和“Field2”
    用 FieldDefs 做
    开始
      清除;
      用 AddFieldDef 做
      开始
        数据类型:= ftFloat;
        名称 := 'Field1';
      结尾;
      用 AddFieldDef 做
      开始
        数据类型:= ftFloat;
        名称:='Field2';
      结尾;
    结尾;

    //-------创建表
    创建表;// 这里是异常爆发的地方
  结尾;
结尾;

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

这是一个例外: 在此处输入图像描述

4

1 回答 1

2

(内部With TempTable Do)无需删除TempTabl.DB显式。CreateTable无论如何都会被覆盖。

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

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

delphi 5RAD 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;
于 2013-01-31T00:08:29.767 回答