Я пытаюсь обновить две разные таблицы SQL в одном цикле, используя параметризованные запросы в Delphi XE8. Я также хочу обернуть все это в транзакцию, так что если что-либо в цикле не удастся, ни одна таблица не будет обновлена.Множественные параметризованные Delphi SQL-обновления в транзакции
Я действительно не знаю, что я делаю, был бы рад помочь.
Код ниже - это упрощенная версия того, что я пытаюсь достичь, и мое лучшее предположение о том, как это сделать. Но я совсем не уверен в этом, особенно использование двух наборов данных, связанных с компонентом «SQL-соединение».
SQL_transaction.TransactionID :=1;
SQL_transaction.IsolationLevel:=xilREADCOMMITTED;
SQL_connection.BeginTransaction;
Try
{ Create connections }
SQL_dataset1 :=TSQLDataSet.Create(nil);
SQL_dataset1.SQLConnection:=SQL_connection;
SQL_dataset2 :=TSQLDataSet.Create(nil);
SQL_dataset2.SQLConnection:=SQL_connection;
{ Create queries }
SQL_dataset1.CommandType:=ctQuery;
SQL_dataset1.CommandText:={ some parameterized query updating table A }
SQL_dataset2.CommandType:=ctQuery;
SQL_dataset2.CommandText:={ some parameterized query updating table B }
{ Populate parameters and execute }
For I:=0 to whatever do
begin
SQL_dataset1.ParamByName('Table A Field 1').AsString:='Value';
SQL_dataset1.ExecSQL;
SQL_dataset2.ParamByName('Table B Field 1').AsString:='Value';
SQL_dataset2.ExecSQL;
end;
SQL_connection.Commit(SQL_transaction);
except
SQL_connection.Rollback(SQL_transaction);
end;
Я использую Delphi XE8, а база данных может быть либо SQL-сервером, либо SQLite.
У вас есть вопрос здесь? Я не эксперт в Delphi, но это выглядит нормально для меня. –
Код выглядит нормально, один маленький nitpick, вы должны сделать ререйз исключение ... – whosrdaddy