Используется связка Firebird 3.0 + Delphi XE8 + FireDAC. Есть необходимость выполнения ad hoc запросов. Поэтому нельзя определиться заранее, что использовать (ExecSQL или Open). Использование OpenOrExecute приводит к багу при стандартных настройках AutoCommit: после создания таблицы она не видна (AutoCommit не сработал). Воспроизведение:
procedure TForm1.Button1Click(Sender: TObject);
begin
FDQuery1.SQL.Text := 'create table AAA(A int);';
FDQuery2.SQL.Text := 'insert into AAA(A) values (1);';
try
FDConnection1.Connected := True;
FDQuery1.OpenOrExecute();
// SQL error code = -204
// Table unknown
FDQuery2.OpenOrExecute();
finally
FDQuery1.Close();
FDQuery2.Close();
FDConnection1.Connected := False;
end;
end;
Чтобы обойти этот баг, в настоящее время использую ручное управление транзакциями:
FDConnection1.TxOptions.AutoCommit := False;
FDConnection1.TxOptions.AutoStart := False;
FDConnection1.TxOptions.AutoStop := False;
Можно ли как-нибудь решить проблему, не переходя к ручному управлению транзакциями?