FirebirdEmbeddedを実行しているFirebirdデータベースに接続されたDBExpress接続があります。これまでのところすべてが正常に機能していますが、非常に奇妙なことが起こっています。
TSimpleDataset
接続と、さまざまなテーブルを表す少数のオブジェクトを含むデータモジュールがあります。しかし、新しいテーブルを追加しようとすると、機能しているように見えますが、失敗します。
procedure Update(module: TdmDatabase);
const
SQL = 'CREATE TABLE NEW_TABLE (blah blah blah)';
SQL2 = 'ALTER TABLE NEW_TABLE ADD CONSTRAINT PK_NEW_TABLE PRIMARY KEY (blah)';
SQL3 = 'DROP TABLE NEW_TABLE';
begin
module.connection.ExecuteDirect(SQL); //succeeds
module.connection.ExecuteDirect(SQL2); //succeeds
try
module.New_TableDataset.Active := true; //fails
except
module.connection.ExecuteDirect(SQL3); //succeeds
raise;
end;
end;
テーブルを作成しようとすると、機能しているように見えますが、それALTER
に対してDROP
実行するデータセットを開こうとするとSELECT
、「無効なテーブル名」エラーが発生します。デバッガーで実行し、ステートメントの実行直後にプログラムを強制終了しCREATE TABLE
、データベースを検査すると、新しいテーブルがありません。
何がそれを引き起こす可能性があるのか、そしてどうすればそれを修正できるのか誰もが知っていますか?