Einzelnen Beitrag anzeigen

barnti

Registriert seit: 15. Aug 2003
Ort: Mal hier mal da...
689 Beiträge
 
Delphi 7 Enterprise
 
#9

Re: Master-Detail-Beziehung zur Laufzeit erstellen

  Alt 28. Mai 2004, 09:13
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...
Gruß,

Barnti
  Mit Zitat antworten Zitat