J'ai besoin d'appeler certaines procédures stockées de Delphi et parce qu'ils sont liés, je dois utiliser des transactions.
Mais elle retourne toujours une erreur lorsqu'il est appelé:Problème lors de l'utilisation de la transaction dans Delphi lors de l'appel à MS SQL Server 2008 R2?
« Transaction ne peut pas avoir plusieurs enregistrements avec ce type de curseur. Modifiez le type de curseur, validez la transaction ou fermez l'un des jeux d'enregistrements.
Et cette erreur se produit uniquement pour MS SQL Server 2008, lorsque j'utilise MS Access Cela fonctionne très bien.
Quel est le problème?
Merci à l'avance
MISE À JOUR:
procedure TForm1.Button2Click(Sender: TObject);
begin
if not DM.ADOConnection.InTransaction then
dm.ADOConnection.BeginTrans;
ADOQuery.LockType := ltBatchOptimistic;
ADOQuery.CursorType := ctUnspecified;
Try
with ADOQuery do
begin
Close;
SQL.Clear;
SQL.Text := 'INSERT INTO [UserAction] (UAct_Frm_ID,UAct_Type,UAct_Description'
+',UAct_Date,UAct_Time,UAct_Usr_ID)'
+'VALUES(:UAct_Frm_ID'
+',:UAct_Type,:UAct_Description,:UAct_Date,:UAct_Time'
+',:UAct_Usr_ID)';
Parameters.ParamByName('UAct_Frm_ID').Value := 1;
Parameters.ParamByName('UAct_Type').Value := 1;
Parameters.ParamByName('UAct_Description').Value := 'test by Q1';
Parameters.ParamByName('UAct_Date').Value := completdate(datenow);
Parameters.ParamByName('UAct_Time').Value := TimeToStr(Now);
Parameters.ParamByName('UAct_Usr_ID').Value := 1;
ExecSQL;
end;
Except
DM.ADOConnection.RollbackTrans;
ShowMessage('RollBack');
Exit;
End;
dm.ADOConnection.CommitTrans;
ShowMessage('Commite');
end;
pouvez-vous poster le code incriminé? –