Ouverture et fermeture des ensembles de données

De RAD Studio
Aller à : navigation, rechercher

Remonter à Compréhension des ensembles de données - Index


Pour lire ou écrire des données dans un ensemble de données, une application doit d'abord l'ouvrir. Il y a deux moyens de procéder :

Open (méthode) Code exemple

Définir la propriété 'Active' de l'ensemble de données à True, soit dans l'inspecteur d'objets à la conception, soit dans le code à l'exécution.

 CustTable.Active := True;
 CustTable->Active = true;

Appeler la méthode Open de l'ensemble de données au moment de l'exécution.

 CustQuery.Open;
 CustQuery->Open();


Lorsque vous ouvrez l'ensemble de données, celui-ci reçoit d'abord un événement DB.BeforeOpen, puis il ouvre un curseur, se remplit lui-même de données et, enfin, reçoit un événement DB.AfterOpen.

L'ensemble de données qui vient d'être ouvert est en mode visualisation, ce qui veut dire que votre application peut lire des données et naviguer dans cet ensemble de données.

Il y a deux façons de fermer un ensemble de données :

Close (méthode) Code exemple

Définir la propriété Active de l'ensemble de données par False, soit dans l'inspecteur d'objets à la conception, soit dans le code à l'exécution.

 
 CustQuery.Active := False;
 CustQuery->Active = false;

Appeler la méthode Close de l'ensemble de données au moment de l'exécution.

 CustTable.Close;
 CustTable->Close();


De même que l'ensemble de données reçoit les événements BeforeOpen et AfterOpen quand vous l'ouvrez, il reçoit les événements DB.BeforeClose et DB.AfterClose quand vous le fermez. Vous pouvez utiliser ces événements, par exemple, pour inviter l'utilisateur à valider les modifications en attente ou à les annuler avant de fermer l'ensemble de données. Le code suivant illustre un tel gestionnaire :

 
 procedure TForm1.CustTableVerifyBeforeClose(DataSet: TDataSet);
 begin
   if (CustTable.State in [dsEdit, dsInsert]) then begin
     case MessageDlg('Post changes before closing?', mtConfirmation, mbYesNoCancel, 0) of
       mrYes:    CustTable.Post;   { save the changes }
       mrNo:     CustTable.Cancel; { abandon the changes}
       mrCancel: Abort;            { abort closing the dataset }
     end;
   end;
 end;
 void __fastcall TForm1::VerifyBeforeClose(TDataSet *DataSet)
 {
 if (DataSet->State == dsEdit || DataSet->State == dsInsert)
 {
 TMsgDlgButtons btns;
 btns << mbYes << mbNo;
     if (MessageDlg("Post changes before closing?", mtConfirmation, btns, 0) == mrYes)
 DataSet->Post();
 else
 DataSet->Cancel();
 }
 }

Remarque :  Il se peut que vous deviez fermer un ensemble de données lorsque vous désirez changer certaines de ses propriétés, comme TableName sur un composant Bde.DBTables.TTable. Lorsque vous rouvrez l'ensemble de données, la nouvelle valeur de propriété prend effet.

Voir aussi

Exemples de code