Bde.DBTables.TQuery.DataSource

Aus RAD Studio API Documentation
Wechseln zu: Navigation, Suche

Delphi

property DataSource: TDataSource read GetDataSource write SetDataSource;

C++

__property Data::Db::TDataSource* DataSource = {read=GetDataSource, write=SetDataSource};

Eigenschaften

Typ Sichtbarkeit Quelle Unit Übergeordnet
property published
Bde.DBTables.pas
Bde.DBTables.hpp
Bde.DBTables TQuery


Beschreibung

Legt die Datenquelle fest, der aktuelle Feldwerte entnommen werden, um sie in gleichnamige Parameter in die SQL-Anweisung der Abfrage aufzunehmen.

Mit 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 TQuery die folgende Anweisung enthält und die in DataSource angegebene Datenmenge ein Feld namens CustNo besitzt, wird der Wert des aktuellen Datensatzes aus dieser anderen Datenmenge für den Parameter eingesetzt.

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

DataSource muss auf eine TDataSource-Komponente zeigen, die mit einer anderen Datenmengen-Komponente verbunden ist; es darf nicht auf die Datenquellkomponente dieser Abfrage zeigen.

Die in DataSource angegebene Datenmenge muss erstellt und geöffnet werden, bevor die Parameter zugeordnet werden können. Parameter können zugeordnet werden, indem Sie vor der Abfrage die Methode Prepare der Abfrage aufrufen.

Tipp: DataSource eignet sich besonders zur Erzeugung von mit einer verknüpften Abfrage erstellten Haupt-/Detail-Beziehungen zwischen Tabellen. Außerdem garantiert DataSource die Bindung von Parametern, die noch nicht in der Eigenschaft Params oder durch einen Aufruf der Methode ParamByName gesetzt wurden.

Falls die von einer SQL-Abfrage verwendete Anweisung keine Parameter enthält oder alle Parameter mit der Eigenschaft Params oder der Methode ParamByName zugeordnet werden, muss der Eigenschaft DataSource kein Wert zugewiesen werden. Das folgende Beispiel zeigt, wie die Eigenschaft DataSource von Query2 auf die Datenquelle von Query1 gesetzt und Query2 vorbereitet und aktiviert wird.



with Query2 do begin
DataSource := DataSource1;
Prepare;
Open;
end;



Query2->DataSource = DataSource1;
Query2->Prepare();
Query2->Open();



Wenn die SQL-Anweisung in TQuery 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 Open von TQuery aufzurufen. Die Verwendung der Eigenschaft DataSource zum dynamischen Filtern von Abfrageergebnissen eignet sich besonders für die Einrichtung von Haupt-/Detailbeziehungen. Setzen Sie dazu die Eigenschaft DataSource in der Detailabfrage auf die TDataSource-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 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 INSERT mit den Parametern CustNo und CompanyName.

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

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



with Query2 do begin
DataSource := DataSource1;
ParamByName('CompanyName').AsString := Edit1.Text;
Prepare;
ExecSQL;
end;



Query2->DataSource = DataSource1;
Query2->ParamByName("CompanyName")->AsString = Edit1->Text;
Query2->Prepare();
Query2->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 Params oder der Methode 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 DataSource nicht beeinflusst.

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


Siehe auch