Utilisation de la propriété Query d'un composant mise à jour
Remonter à Exécution d'une instruction de mise à jour - 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 propriété Query d'un composant mise à jour fournit l'accès aux composants requête qui implémentent ses instructions DeleteSQL, InsertSQL et ModifySQL. Dans la plupart des applications, il n'est pas nécessaire d'accéder directement à ces composants requêtes : vous pouvez utiliser les propriétés DeleteSQL, InsertSQL et ModifySQL pour spécifier les instructions que ces requêtes exécutent, et les exécuter en appelant la méthode Apply ou ExecSQL de l'objet mise à jour. Il y a des cas, cependant, où vous pouvez avoir besoin de manipuler directement le composant requête. En particulier, la propriété Query est utile si vous voulez fournir vos propres valeurs aux paramètres des instructions SQL, plutôt que de vous appuyer sur la liaison automatique de paramètres de l'objet mise à jour aux anciennes et nouvelles valeurs de champs.
Remarque : La propriété Query n'est accessible qu'à l'exécution.
La propriété Query est indexée sur une valeur TUpdateKind :
- Avec l'index ukModify, elle accède à la requête qui met à jour des enregistrements existants.
- Avec l'index ukInsert, elle accède à la requête qui insère de nouveaux enregistrements.
- Avec l'index ukDelete, elle accède à la requête qui supprime des enregistrements.
L'exemple suivant montre comment utiliser la propriété Query pour fournir des valeurs de paramètres qui ne peuvent être liées automatiquement :
procedure TForm1.BDEClientDataSet1BeforeUpdateRecord(Sender: TObject; SourceDS: TDataSet;
DeltaDS: TCustomClientDataSet; UpdateKind: TUpdateKind; var Applied: Boolean);
begin
UpdateSQL1.DataSet := DeltaDS; { requis pour la substitution automatique des paramètres }
with UpdateSQL1.Query[UpdateKind] do
begin
{ Vérifie que les DatabaseName et SessionName de la requête sont corrects }
DatabaseName := (SourceDS as TDBDataSet).DatabaseName;
SessionName := (SourceDS as TDBDataSet).SessionName;
ParamByName('TimeOfUpdate').Value = Now;
end;
UpdateSQL1.Apply(UpdateKind); { substitutions automatiques et exécution }
Applied := True;
end;
void __fastcall TForm1::BDEClientDataSet1BeforeUpdateRecord(TObject *Sender,
TDataSet *SourceDS, TCustomClientDataSet *DeltaDS, TUpdateKind UpdateKind, bool &Applied)
{
UpdateSQL1->DataSet = DeltaDS; // requis pour la substitution automatique des paramètres
TQuery *pQuery = UpdateSQL1->Query[UpdateKind]; // accès à la requête
// Vérifie que les DatabaseName et SessionName de la requête sont corrects
TDBDataSet *pSrcDS = dynamic_cast<TDBDataSet *>(SourceDS);
pQuery->DatabaseName = pSrcDS->DatabaseName;
pQuery->SessionName = pSrcDS->SessionName;
// remplace les paramètres personnalisés par les valeurs
pQuery->ParamByName("TimeOfLastUpdate")->Value = Now();
UpdateSQL1->Apply(UpdateKind); // substitution et exécution automatiques
Applied = true;
}