Exécution d'une instruction de mise à jour - Index

De RAD Studio
Aller à : navigation, rechercher

Remonter à Utilisation du moteur de base de données Borland - Index


Remarque : Le moteur de base de données Borland (BDE, Borland Database Engine) a été déprécié. Il ne sera donc pas amélioré. Par exemple, le BDE ne prendra jamais en charge Unicode. Vous ne devriez pas entreprendre de nouveaux développements avec BDE. Prévoyez plutôt de migrer vos applications de bases de données existantes de BDE vers dbExpress.

La méthode ExecSQL d'un composant mise à jour applique manuellement les mises à jour relatives à l'enregistrement en cours. A la différence de la méthode Apply, ExecSQL ne lie pas les paramètres dans l'instruction SQL avant de l'exécuter. La méthode ExecSQL est appelée le plus souvent depuis un gestionnaire d'événement OnUpdateRecord (utilisation du BDE) ou BeforeUpdateRecord (utilisation d'un ensemble de données client).

Comme ExecSQL ne lie pas les valeurs de paramètres, elle est utilisée principalement quand les instructions SQL de l'objet mise à jour ne comprennent pas de paramètres. Vous pouvez utiliser à la place Apply, même s'il n'y a pas de paramètres, mais ExecSQL est plus efficace car elle ne vérifie pas les paramètres.

Si les instructions SQL comprennent des paramètres, vous pouvez tout de même appeler ExecSQL, mais seulement après avoir lié explicitement les paramètres. Si vous utilisez le BDE pour mettre les mises à jour en mémoire cache, vous pouvez lier explicitement les paramètres en définissant la propriété DataSet de l'objet mise à jour, puis en appelant sa méthode SetParams. Si vous utilisez un ensemble de données client, vous devez fournir les paramètres à l'objet requête sous-jacent maintenu par TUpdateSQL. Pour des détails sur la manière de procéder, voir Utilisation de la propriété Query d'un composant mise à jour.

Avertissement :  Si vous utilisez la propriété UpdateObject de l'ensemble de données pour associer ensemble de données et objet mise à jour, ExecSQL est appelée automatiquement. Dans ce cas, n'appelez pas ExecSQL dans un gestionnaire d'événement OnUpdateRecord ou BeforeUpdateRecord pour éviter une seconde tentative d'application de la mise à jour de l'enregistrement en cours.

Les gestionnaires d'événements OnUpdateRecord et BeforeUpdateRecord indiquent le type de mise à jour qui doit être appliqué avec un paramètre UpdateKind de type TUpdateKind. Vous devez passer ce paramètre à la méthode ExecSQL pour indiquer l'instruction SQL à utiliser. Le code suivant illustre ceci avec un gestionnaire d'événement BeforeUpdateRecord :

procedure TForm1.BDEClientDataSet1BeforeUpdateRecord(Sender: TObject; SourceDS: TDataSet;
          DeltaDS: TCustomClientDataSet; UpdateKind: TUpdateKind; var Applied: Boolean);
begin
  with UpdateSQL1 do
  begin
    DatabaseName := (SourceDS as TDBDataSet).DatabaseName;
    SessionName := (SourceDS as TDBDataSet).SessionName;
    ExecSQL(UpdateKind);
    Applied := True;
  end;
end;
void __fastcall TForm1::BDEClientDataSet1BeforeUpdateRecord(TObject *Sender,
   TDataSet *SourceDS, TCustomClientDataSet *DeltaDS, TUpdateKind UpdateKind, bool &Applied)
{
  TDBDataSet *pSrcDS = dynamic_cast<TDBDataSet *>(SourceDS);
  UpdateSQL1->DatabaseName = pSrcDS->DatabaseName;
  UpdateSQL1->SessionName = pSrcDS->SessionName;
  UpdateSQL1->ExecSQL(UpdateKind);
  Applied = true;
}

Si une exception est déclenchée durant l'exécution du programme de mise à jour, l'exécution continue dans l'événement OnUpdateError, s'il est défini.

Voir aussi


Rubriques