Lookup-Felder definieren
Nach oben zu Neue persistente Felder erstellen
Ein Lookup-Feld ist ein Nur-Lesen-Feld, das zur Laufzeit die auf den angegebenen Suchkriterien basierenden Werte anzeigt. In seiner einfachsten Form wird einem Lookup-Feld der Name der zu durchsuchenden Spalte, der gesuchte Feldwert und das Feld in der Lookup-Datenmenge übergeben, dessen Wert angezeigt werden soll.
Stellen Sie sich beispielsweise eine Anwendung zur Auftragserfassung vor, in der automatisch anhand der vom Benutzer angegebenen Postleitzahl die zugehörige Stadt und das Land in einem Lookup-Feld angezeigt werden können. Die zu durchsuchende Spalte heißt in diesem Fall ZipTable.Zip, der gesuchte Wert ist die in Order.CustZip angegebene Postleitzahl des Kunden. Die Werte der Spalten ZipTable.City und ZipTable.State werden für den Datensatz zurückgegeben, bei dem ZipTable.Zip mit dem aktuellen Wert des Feldes Order.CustZip übereinstimmt.
Anmerkung: Unidirektional Datenmengen lassen die Verwendung von Lookup-Feldern nicht zu.
Gehen Sie wie folgt vor, um im Dialogfeld Neues Feld ein Lookup-Feld zu erstellen:
- Geben Sie in das Eingabefeld Name einen Namen für das Lookup-Feld ein. Verwenden Sie nicht den Namen eines vorhandenen Feldes.
- Wählen Sie im Kombinationsfeld Typ einen Datentyp für das Feld aus.
- Geben Sie im Eingabefeld Größe bei Bedarf die Feldgröße an. Dieses Feld ist nur für Felder des Typs Data.DB.TStringField, Data.DB.TBytesField und Data.DB.TVarBytesField von Bedeutung.
- Wählen Sie in der Optionsfeldgruppe Feldtyp die Option Lookup. Dadurch werden zusätzlich die Kombinationsfelder Datensatz und Schlüsselfelder aktiviert.
- Wählen Sie aus der Dropdown-Liste des Kombinationsfeldes Datensatz die gewünschte Datenmenge. Die Nachschlagedatenmenge darf nicht mit der Datenmenge für die Feldkomponente identisch sein, da sonst zur Laufzeit eine zirkuläre Referenz-Exception ausgelöst wird. Nach Auswahl einer Lookup-Datenmenge stehen zusätzlich die beiden Kombinationsfelder Lookup-Schlüssel und Ergebnisfeld zur Verfügung.
- Wählen Sie aus der Dropdown-Liste Schlüsselfelder ein Feld der aktuellen Datenmenge, für das nach übereinstimmenden Werten gesucht werden soll. Um mehrere Felder festzulegen, geben Sie die Feldnamen direkt ein, anstatt sie aus der Dropdown-Liste auszuwählen. Trennen Sie die Feldnamen durch Semikolons. Für mehrere Felder müssen Sie persistente Feldkomponenten verwenden.
- Wählen Sie aus der Dropdown-Liste Lookup-Schlüssel das Feld der Lookup-Datenmenge, das mit dem in Schritt 6 angegebenen Schlüsselfeld verglichen werden soll. Wenn Sie mehrere Schlüsselfelder angegeben haben, müssen Sie die entsprechende Anzahl von Lookup-Schlüsseln definieren. Zur Definition mehrerer Felder geben Sie die Feldnamen, jeweils getrennt durch ein Semikolon, direkt ein.
- Wählen Sie aus der Dropdown-Liste Ergebnisfeld das Feld in der Lookup-Datenmenge, das als Wert des Lookup-Feldes zurückgegeben werden soll.
Wenn Sie Ihre Anwendung entwerfen und ausführen, werden die Werte der Lookup-Felder vor denjenigen der berechneten Felder ermittelt. Die berechneten Felder können auf Lookup-Feldern basieren, was umgekehrt aber nicht möglich ist.
Mithilfe der Eigenschaft LookupCache lässt sich dieses Verhalten anpassen. LookupCache legt fest, ob die Werte eines Lookup-Feldes zwischengespeichert werden, wenn die Datenmenge zum ersten Mal geöffnet wird, oder ob die Werte dynamisch gesucht werden, wenn sich der aktuelle Datensatz in der Datenmenge ändert. Setzen Sie dazu die Eigenschaft LookupCache auf True, um die Werte eines Lookup-Feldes zwischenzuspeichern, wenn eine Änderung von LookupDataSet unwahrscheinlich ist und es nur wenige unterschiedliche Lookup-Werte gibt. Das Zwischenspeichern von Lookup-Werten kann zur Erhöhung der Ausführungsgeschwindigkeit beitragen. Die Lookup-Werte für jede Menge von LookupKeyFields-Werten werden im Voraus beim Öffnen der DataSet-Komponente geladen. Wenn sich der aktuelle Datensatz ändert, kann das Feldobjekt seinen Wert im Zwischenspeicher ausfindig machen und muss dazu nicht auf die Eigenschaft LookupDataSet zugreifen. Die erhöhte Ausführungsgeschwindigkeit ist vor allem dann deutlich spürbar, wenn sich die in LookupDataSet angegebene Datenmenge in einem Netzwerk befindet, in dem Zugriffe länger dauern.
Wenn alle Datensätze in DataSet unterschiedliche Werte für KeyFields haben, kann der Geschwindigkeitsvorteil durch das aufwändige Suchen der Werte im Zwischenspeicher wieder zunichte gemacht werden. Der Aufwand bei der Suche im Zwischenspeicher wird um so höher, je größer die Anzahl der unterschiedlichen Werte in KeyFields ist.
Wenn LookupDataSet nicht persistent ist, kann das Zwischenspeichern von Lookup-Werten zu ungenauen Ergebnissen führen. Rufen Sie RefreshLookupList auf, um die Werte im Lookup-Zwischenspeicher zu aktualisieren. RefreshLookupList regeneriert die Eigenschaft LookupList, die für jeden Satz mit LookupKeyFields-Werten den Wert von LookupResultField enthält.
Wenn LookupCache zur Laufzeit gesetzt wird, initialisieren Sie den Zwischenspeicher durch einen Aufruf von RefreshLookupList.