Hallo Sharky,
Zitat von
Sharky:
an welcher Stelle setzt Du denn den Wert des Parameters?
Ich erzeuge DBLookupBoxen sobald man eine Tabelle zur Ansicht aufruft. Die LookupBoxen dienen der Suche in der Tabelle. So kann man in der Tabelle 'Waren' nach Waren von bestimmten Kunden suchen, wenn man in der LookupBox 'Kunde' einen Kunden auswählt. In der nächsten Lookupbox sollen dann nur noch Waren des ausgewählten Kunde angezeigt werden.
Die Boxen werden erzeugt sobald der Benutzer auf den 'Tabelle Waren anzeigen'-Button drückt.
Delphi-Quellcode:
...
procedure SetExtraLookup(...)
...
// Hier wird jeweils eine Box mit einem Standard-SQL-Statement konfiguriert(alle Daten der
// Tabelle)
ListField:= GetListFieldLookupBox.ListSource:= GetXLookupDatasource(Tablename);
LookupBox.ListSource.DataSet.Open;
LookupBox.KeyField:= LookupBox.ListSource.DataSet.Fields[0].FieldName;
LookupBox.ListField:= ListField;
SetMasterDetail(LookupBox);
// hier soll die Master-Detail-Beziehung etabliert werden
...
procedure SetMasterDetail(LookupBox: TDBLookupComboBox);
begin
...
// Neu abzufragende Tabelle, Fremdschlüssel und die zugehörige Query
Tablename:= GetTableName;
KeyName:= MasterDataset.Fields[0].FieldName;
DetailQuery:= GetDetailQuery;
DetailQuery.Datasource:= MasterDatasource
// Hier wird die Verbindung beider Quellen hergestellt
DetailQuery.Close;
// Hier wird das Statement neu gesetzt, so dass der
// Parameter 'KeyName'
DetailQuery.SQL.Clear;
// ermittelt aus dem Masterdataset eingesetzt wird
DetailQuery.SQL.Add('
SELECT *');
DetailQuery.SQL.Add('
FROM '+TableName);
DetailQuery.SQL.Add('
WHERE '+KeyName+'
=:'+KeyName)};
DetailQuery.SQL.Add('
and valid is Null');
DetailQuery.Open;
end;
Der Wert des Parameters ergibt sich aus der Verbindung der beiden Quellen. Da In der LookupBox 'Kunde' Werte vorhanden sind, scheint die Quelle 'Kunde' offen zu sein. In der Box der Waren werden halt nur keine Waren angezeigt. Das Statement wird aber ausgeführt...