Datenmengen öffnen und schließen

Aus RAD Studio
Wechseln zu: Navigation, Suche

Nach oben zu Datenmengen - Index


Bevor in einer Datenmenge enthaltene Daten gelesen oder Daten in eine Datenmenge geschrieben werden können, muss die Datenmenge durch eine Anwendung geöffnet werden. Dazu gibt es zwei Möglichkeiten:

Open-Methode Beispiel-Code

Setzen Sie die Eigenschaft 'Active' der Datenmenge zur Entwurfszeit im Objektinspektor oder zur Laufzeit im Quelltext auf True:

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

Rufen Sie zur Laufzeit die Methode Open der Datenmenge auf:

 CustQuery.Open;
 CustQuery->Open();


Beim Öffnen der Datenmenge empfängt diese zunächst ein Ereignis vom Typ Data.DB.TDataSet.BeforeOpen, dann wird ein Cursor (Datensatzzeiger) geöffnet, der sich selbst mit Daten füllt, und schließlich empfängt sie ein Ereignis vom Typ Data.DB.TDataSet.AfterOpen

Die neu geöffnete Datenmenge befindet sich im Anzeigemodus. Dies bedeutet, dass die Anwendung die Daten lesen und den Cursor in diesen bewegen kann.

Zum Schließen einer Datenmenge gibt es ebenfalls zwei Möglichkeiten:

Close-Methode Beispiel-Code

Setzen Sie die Eigenschaft Active der Datenmenge zur Entwurfszeit im Objektinspektor oder zur Laufzeit im Quelltext auf False:

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

Rufen Sie zur Laufzeit die Methode Close der Datenmenge auf:

 CustTable.Close;
 CustTable->Close();


Entsprechend der Ereignisse BeforeOpen und AfterOpen beim Öffnen erhält die Datenmenge beim Schließen die Ereignisse DB.BeforeClose und DB.AfterClose. Sie können diese Ereignisse dazu verwenden, um z.B. den Benutzer dazu aufzufordern, vor dem Schließen der Datenmenge noch ausstehende Änderungen entweder in die Datenbank zurückzuschreiben oder zu verwerfen. Der folgende Quelltext zeigt eine derartige Behandlungsroutine:

 
 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;
 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;   { Änderungen speichern }
       mrNo:     CustTable.Cancel; { Änderungen verwerfen }
       mrCancel: Abort;            { Schließen der Datenmenge abbrechen }
     end;
   end;
 end;

Hinweis: Unter Umständen ist es notwendig, eine Datenmenge zu schließen, wenn Sie bestimmte Eigenschaften, wie z.B. TableName für eine Bde.DBTables.TTable-Komponente, ändern möchten. Wenn die Datenmenge erneut geöffnet wird, werden die geänderten Eigenschaftswerte wirksam.

Siehe auch

Codebeispiele