![]() |
AW: TDBGrid mit Master/Detail?
Hallo Thomas, danke für deinen Beitrag. Meine Datenbank und die Tabellen werden erst zur Laufzeit erzeugt. Die Anbindungsobjeke ebenfalls.
Momentan nutze ich auch nur für die Erstellung der DB/Tables SQL, ansonsten läuft alles über TTable. Weiterhin bin ich leider noch nicht so weit mit den Abfolgen vertraut, als dass ich wüsste, was Du mir versuchen wolltest, zu erklären. 😔 LG Mathias |
AW: TDBGrid mit Master/Detail?
Liste der Anhänge anzeigen (Anzahl: 1)
Nun ja, man kann in einer Table oder Query mit Rechtsklick -> Fields Editor die persistenten Felder der Tabelle oder Query aufrufen. Nun lässt sich im Field Editor auch ein neues Nachschlagefeld anlegen, das Daten aus anderen Tabellen verwenden kann (siehe angehängtes Beispiel). Dieses Nachschlagefeld lässt sich dann in jedem datensensitiven Grid als Spalte verwenden.
Mehr dazu erfährst Du hier: ![]() Wie gesagt, eignet sich nicht für jeden Anwendungsfall. Wenn man keine persistenten Felder zur Laufzeit verwendet, macht das dann auch keinen Sinn. Dann verwendet man lieber gleich von vorneherein SQL-Joins. In manchen Anwendungsfällen ist es eine schnelle und elegante Möglichkeit, wie man Felder aus vielen anderen Tabellen im Grid verwenden kann, kommt halt immer darauf an, wie man vorgeht. |
AW: TDBGrid mit Master/Detail?
Huhu Thomas,
eine Nachfrage habe ich noch. Für ein Lookup-Feld muss in beiden Tabellen jeweils der gleiche Tabellenfeldname existieren? LG |
AW: TDBGrid mit Master/Detail?
Hallo Mathias,
nein, muss nicht sein. Die beteiligten Felder für die Nachschlagefelder gibst Du ja bei der Definition alle mit an: Name: Der neue Feldname in der Master-Tabelle Komponente: Name des Feldes in Delphi (wird anhand der Eingabe des Namens vorgeschlagen) Typ: Feldtyp entsprechend des Feldinhalts Größe: Größe des neuen Feldes in der Master-Tabelle Schlüsselfelder: Das Schlüsselfeld in der Master-Tabelle Datenmenge: Die Query oder Table der Detail-Tabelle Schlüssel: Das Schlüsselfeld in der Detail-Tabelle Ergebnisfeld: Das darzustellende Feld aus der Detail-Tabelle |
AW: TDBGrid mit Master/Detail?
Danke für die Erklärung.
Ich habe versucht es zur Laufzeit einzubauen, es kommt immer die Fehlermeldung, dass das Feld 'book_author' nicht existiert. Die Tabelle wurde erstellt, im Anschluss wird das Lookup-Feld angelegt. Mein Code für das Lookup-Feld sieht jetzt so aus:
Delphi-Quellcode:
var
NewField: TField; begin if Table2.FieldDefs.Updated = False then Table2.FieldDefs.Update; if Table12FindField('lfAuthor') = nil then begin NewField := TStringField.Create(Table2); NewField.FieldName := 'lfAuthor'; // Lookup Field Author NewField.SetFieldType(ftString); // String NewField.Size:=255; NewField.KeyFields := 'book_author'; // Field aus Table1 NewField.LookUpDataset := Table1; NewField.LookUpKeyFields := 'id'; // Field aus Table2 NewField.LookUpResultField := 'autor_nachname'; // Field aus Table2, welches über die id, die in 'book_author' steht, angezeigt werden soll NewField.FieldKind := fkLookup; NewField.DataSet := Table2; end; |
AW: TDBGrid mit Master/Detail?
Wenn Table1 die ID für den Lookup enthält, dann muss da die Lookup-Geschichte definiert werden. Eigentlich ganz einfach zusammencklickbar, wenn man persistente Felder benutzt.
Einfach Dataset - Feldeditor - Neues Feld bei Tabelle1. Manuell sollte es aber auch gehen. |
AW: TDBGrid mit Master/Detail?
Zitat:
Die ID aus Tabelle1 ist eine Referenz auf Tabelle2, als Integer. Also in Tabelle2 stehen Werte, die im DBGrid erscheinen sollen, owohl eigentlich nur Tabelle1 im DBGrid angezeigt wird. LG Mathias |
AW: TDBGrid mit Master/Detail?
Dann müsste es aber eher so aussehen:
Delphi-Quellcode:
NewField := TStringField.Create(Table1);
NewField.FieldName := 'lfAuthor'; // Lookup Field Author NewField.SetFieldType(ftString); // String NewField.Size:=255; NewField.KeyFields := 'book_author'; // Field aus Table1 NewField.LookUpDataset := Table2; NewField.LookUpKeyFields := 'id'; // Field aus Table2 NewField.LookUpResultField := 'autor_nachname'; // Field aus Table2, welches über die id, die in 'book_author' steht, angezeigt werden soll NewField.FieldKind := fkLookup; NewField.DataSet := Table1; |
AW: TDBGrid mit Master/Detail?
Guten Morgen!
Nochmal zum Verständnis für mich: das Feld lfAuthor darf nicht existieren, damit das ganze funktionieren soll? @Uwe Raabe: Danke, leider gibt es immer noch den Fehler, dass das Feld: book_author (gibt es in table1) nicht existiert. Lasse ich im Code: NewField.DataSet := Table1; weg, lauft es durch, aber das Lookup-Feld wird im DBGrid nicht angezeigt. LG |
AW: TDBGrid mit Master/Detail?
Mach doch mal ein komplettes Beispiel, damit wir genau wissen, was wo ist und was nicht.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:52 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz