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