Я разрабатываю приложение обновления с помощью Delphi 10. Я использую Windows 7 64x, FireBird 2.5.1.26351 32x.
Порядок исполнения:
- Проверяет текущую версию (оператор select из базы данных Firebird)
- Скачивает обновление (через FTP)
- Примените его (файлы .exe и выполните .sql)
Код ошибки -901 появляется, когда я пытаюсь запустить файлы .SQL. Я знаю, что существует проблема несовместимости с W7 64x и FDB 32x, но я могу делать все: резервное копирование и восстановление (gbak), команды БД (все). Вместо этого я попробовал с FDB 64x, и он не работал.
Код:
//Components
FDWaitCursor: TFDGUIxWaitCursor;
FDDriverLink: TFDPhysFBDriverLink;
FDConnection:TFDConnection;
FDScript: TFDScript;
function TTHR_Script.CreateComponents:boolean;
begin
try
FDDriverLink := TFDPhysFBDriverLink.Create(FDDriverLink);
FDWaitCursor := TFDGUIxWaitCursor.Create(FDWaitCursor);
FDConnection := TFDConnection.Create(FDConnection);
with FDConnection do
begin
DriverName := 'FB';
Params.UserName := THRBanco.BDUser;
Params.Password := THRBanco.BDPass;
Params.Database := THRBanco.DIROrigem;
end;
FDScript := TFDScript.Create(FDScript);
with FDScript do
begin
Connection := FDConnection;
OnConsolePut := FDScript_ConsolePut;
end;
Result := true;
except on E:Exception do
begin
Result := false;
end;
end;
end;
procedure TTHR_Script.ExecLogs;
var
F : integer;
SR : TSearchRec;
begin
F := FindFirst(ExtractFilePath(Application.ExeName)+'\manager\update\logs\*.sql',faArchive,SR);
FDConnection.Open;
while F = 0 do
begin
with FDScript do
begin
SQLScripts.Clear;
SQLScriptFileName := ExtractFilePath(Application.ExeName)+'\manager\update\logs\'+SR.Name;
ValidateAll;
ExecuteAll;
end;
Application.ProcessMessages;
F := FindNext(SR);
end;
FDConnection.Close;
end;
После установки Firebird 2.5.6 по-прежнему возникала та же ошибка -901. Журнал ошибок:
update empresa set emp_verbanco='2016.55';
[13_09_2016 | 14:29]: Ok [00:00:00.047].
[13_09_2016 | 14:29]: update empresa set emp_versis='2016.55';
[13_09_2016 | 14:29]: Ok [00:00:00.016].
[13_09_2016 | 14:29]: commit work;
[13_09_2016 | 14:29]: ERROR: Dynamic SQL Error SQL error code = -901 invalid transaction handle (expecting explicit transaction start)
update empresa set emp_verbanco='2016.55'; [13_09_2016 | 14:29]: Ok [00:00:00.047]. [13_09_2016 | 14:29]: update empresa set emp_versis='2016.55'; [13_09_2016 | 14:29]: Ok [00:00:00.016]. [13_09_2016 | 14:29]: commit work; [13_09_2016 | 14:29]: ERROR: Dynamic SQL Error SQL error code = -901 invalid transaction handle (expecting explicit transaction start)
- person RafaelHarth   schedule 13.09.2016commit work
в сценарии, выполняемом с помощью языка программирования, обычно является красным флагом, поскольку драйверы / языки программирования обычно обрабатывают свои собственные транзакции. - person Mark Rotteveel   schedule 14.09.2016