1

実行中にテーブルを作成していましたが、テーブルの作成時に(私のコードを参照してください)

手順 CreateTempTable(pDataBaseName,pSessionName:String);
始める
  //------「TempTable」を作成
  TempTable:=TTable.Create(アプリケーション);
  TempTable を使用
  始める
    //-------「アクティブ」に false を設定
    アクティブ:= 偽;
    //------セッションの名前
    セッション名:=pSessionName;
    //-------データベースの名前。
    データベース名:=pDataBaseName;
    フィルタリング:= 真;
    //------テーブルの名前
    テーブル名:= 'TempTabl.DB';
    //------パラドックス型
    TableType := ttParadox;
    //------テーブルが既に存在する場合
    TempTable.Exists の場合
      //------テーブルを削除する
      TempTable.DeleteTable;
    //------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になりました。
したがって、エラーをより適切に処理できます。

delphi5およびRADStudio2007でテスト済み。

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 に答える