La procédure suivante illustre la gestion explicite de transactions à l'aide d'un composant TSQLConnection. Elle utilise deux objets TSQLDataSet pour transférer les fonds. Le premier, appelé Debit, contient une requête de mise à jour paramétrée qui débite un compte. Le second, appelé Credit, contient une requête de mise à jour paramétrée qui crédite un autre compte.
Dans cet exemple, le serveur interdit l'imbrication des transactions.
void __fastcall TForm1::TransferButtonClick(TObject *Sender)
{
  if (!SQLConnection1->InTransaction)
  {
    TTransactionDesc TD;
    TD.TransactionID = 1;
    TD.IsolationLevel = xilREADCOMMITTED;
    SQLConnection1->StartTransaction(TD);
    try
    {
      int Amt = StrToInt(AmtEdit->Text);
      Debit->Params->ParamValues["Amount"] = Amt;
      Credit->Params->ParamValues["Amount"] = Amt;
      SQLConnection1->Commit(TD); // en cas de réussite, les modifications sont validées;
    }
    catch (...)
    {
      SQLConnection1->Rollback(TD); // en cas d'échec les modifications sont annulées
      ShowMessage("Echec du transfert")
    }
  }
}
			
		
 
	
Partager