Data.DB.TDataSet.DataSource

Aus RAD Studio API Documentation
Wechseln zu: Navigation, Suche

Delphi

property DataSource: TDataSource read GetDataSource;

C++

__property TDataSource* DataSource = {read=GetDataSource};

Eigenschaften

Typ Sichtbarkeit Quelle Unit Übergeordnet
property public
Data.DB.pas
Data.DB.hpp
Data.DB TDataSet

Beschreibung

Gibt die Datenquelle einer anderen Datenmenge an, die der Datenmenge Werte liefert.

In DataSetField ist die Eigenschaft DataSource immer nil (Delphi) bzw. NULL (C++).

In abgeleiteten Datenmengenklassen, die das Angeben einer Datenquelle unterstützen, werden Methoden für das Lesen und Schreiben von DataSource neu deklariert und implementiert.

Zum Beispiel:

Für die Klasse Data.Win.ADODB.TADOQuery, die ein indirekter Nachkomme von TDataSet ist (wird von Data.Win.ADODB.TCustomADODataSet abgeleitet), legt DataSource die Datenquelle fest, der aktuelle Feldwerte entnommen werden, um sie in gleichnamigen Parameter in die der SQL-Anweisung der ADO-Abfrage aufzunehmen.

Mit Data.Win.ADODB.TADOQuery.DataSource können Sie automatisch in Parameter einer Abfrage Feldwerte aus einer anderen Datenmenge aufnehmen. Parameter, die denselben Namen wie Felder in der anderen Datenmenge besitzen, werden mit den Feldwerten aufgefüllt. Parameter mit abweichenden Namen übernehmen die Werte nicht automatisch, sondern müssen diese über das Programm erhalten. Wenn beispielsweise die Eigenschaft SQL von Data.Win.ADODB.TADOQuery die folgende Anweisung enthält und die in Data.Win.ADODB.TADOQuery.DataSource angegebene Datenmenge ein Feld namens CustNo besitzt, wird der Wert des aktuellen Datensatzes aus dieser anderen Datenmenge für den Parameter CustNo eingesetzt:

SELECT *
FROM Orders O
WHERE (O.CustNo = :CustNo)

Data.Win.ADODB.TADOQuery.DataSource muss auf eine Data.DB.TDataSource-Komponente zeigen, die mit einer anderen Datenmengen-Komponente verbunden ist; es darf nicht auf die Datenquellkomponente dieser Abfrage zeigen. Die in Data.Win.ADODB.TADOQuery.DataSource angegebene Datenmenge muss erstellt, gefüllt und geöffnet werden, bevor die Parameter zugeordnet werden können. Die Zuordnung wird durchgeführt, indem die Eigenschaft Data.Win.ADODB.TADOCommand.Prepared der ADO-Abfrage vor dem Ausführen der Abfrage auf True gesetzt wird. Falls die von einer SQL-Anweisung verwendete Abfrage keine Parameter enthält oder alle Parameter mit der Eigenschaft Data.Win.ADODB.TADOCommand.Parameters oder der Methode Data.Win.ADODB.TParameters.ParamByName zugeordnet werden, muss der Eigenschaft Data.Win.ADODB.TADOQuery.DataSource kein Wert zugewiesen werden. Das folgende Beispiel zeigt, wie die Eigenschaft Data.Win.ADODB.TADOQuery.DataSource von ADOQuery2 auf die Datenquelle von ADOQuery1 gesetzt, und ADOQuery2 vorbereitet und aktiviert wird:


with ADOQuery2 do begin
DataSource := DataSource1;
Prepared := True;
Open;
end;


ADOQuery2->DataSource = DataSource1;
ADOQuery2->Prepared = true;
ADOQuery2->Open();


Wenn die SQL-Anweisung in Data.Win.ADODB.TADOQuery SELECT ist, wird die Abfrage ausgeführt, indem die neuen Feldwerte jedes Mal verwendet werden, wenn der Datensatzzeiger in der anderen Datenmenge versetzt wird. Es ist nicht erforderlich, jedes Mal die Methode Data.Win.ADODB.TADOConnection.Open von Data.Win.ADODB.TADOQuery aufzurufen. Die Verwendung der Eigenschaft Data.Win.ADODB.TADOQuery.DataSource zum dynamischen Filtern von Abfrageergebnissen eignet sich besonders für die Einrichtung von Haupt-/Detailbeziehungen. Setzen Sie dazu die Eigenschaft Data.Win.ADODB.TADOQuery.DataSource in der Detailabfrage auf die Data.Win.ADODB.TADOQuery.DataSource-Komponente der Hauptdatenmenge.

Wenn die SQL-Anweisung keine SELECT-Abfrage (wie z.B. INSERT oder UPDATE) verwendet, erhalten die Parameter mit demselben Namen wie Felder in der anderen Datenmenge auch die Werte, aber die Abfrage muss jedes Mal explizit ausgeführt werden, wenn der Datensatzzeiger in der anderen Datenmenge versetzt wird. Die folgende SQL-Anweisung verwendet die INSERT-Anweisung mit den Parametern CustNo und CompanyName:

INSERT INTO Customer
(CustNo, Company)
VALUES (:CustNo, :CompanyName)

Eine andere Datenmenge, ADOQuery1 und DataSource1, besitzt ein Feld CustNo, aber nicht das Feld CompanyName. Wenn diese Datenmenge in der Eigenschaft Data.Win.ADODB.TADOQuery.DataSource angegeben ist, muss der Wert für den Parameter CompanyName über Programmcode zugewiesen werden. Weil in ADOQuery1 das Feld CustNo enthalten ist, und ADOQuery1 in der Eigenschaft Data.Win.ADODB.TADOQuery.DataSource referenziert ist, erhält der Parameter CustNo automatisch einen Wert.

with ADOQuery2 do begin
DataSource := DataSource1;
ParamByName ('CompanyName').AsString := Edit1.Text;
Prepared := True;
ExecSQL;
end;



ADOQuery2->DataSource = DataSource1;
ADOQuery2->ParamByName("CompanyName")->AsString = Edit1->Text;
ADOQuery2->Prepared = true;
ADOQuery2->ExecSQL();


Wenn die SQL-Anweisung Parameter mit demselben Namen wie Felder in der anderen Datenmenge enthält, sollten Sie Werte für diese Parameter nicht manuell setzen. Die im Quelltext angegebenen Werte (z.B. mit der Eigenschaft Data.Win.ADODB.TADOCommand.Parameters oder der Methode Data.Win.ADODB.TParameters.ParamByName) werden durch die automatisch zugewiesenen Werte überschrieben. Parameter mit anderen Namen müssen über Programmcode Werte erhalten. Diese Parameter werden durch das Setzen von Data.Win.ADODB.TADOQuery.DataSource nicht beeinflusst.

Data.Win.ADODB.TADOQuery.DataSource kann zur Laufzeit oder während des Entwurfs im Objektinspektor zugewiesen werden. Wählen Sie während des Entwurfs die gewünschte Data.DB.TDataSource-Komponente aus der Dropdown-Liste aus oder geben Sie deren Namen ein.

Siehe auch