auf einem DBGrid, die auf eine Artikeltabelle gesetzt ist (ein Datensatz entspricht einer Rechnungsposition) werden diverse Informationen wie Bestellnummer, Menge, Einzelpreis,Hersteller,Kategorie usw. gelistet. Den Gesamtpreis, der nur informationshalber angezeigt und daher nur berechnet, aber nicht in der Datenbank gespeichert werden soll, konnte ich erhalten, indem ich im Dialog "Felder bearbeiten" (Doppelklick aufs Dataset) ein berechnetes Feld hinzugefügt und die Zuweisungsformel ins Ereignis CalcFields des Datasets eingetragen habe:
Code: Alles auswählen
procedure TDataModule1.ztPositionCalcFields(DataSet: TDataSet);
begin
ztPositionGesamtpreis.Value:=ztPositionMenge.Value*ztPositionEinzelpreis.Value;
ztPositionNettopreis.Value:=ztPositionEinzelpreis.Value/MWST_SATZ;
//...
end;
Nun wollte ich für die Fremdschlüsselwerte (z.B. HerstellerID) auch wieder sprechende Namen (z.B. Hersteller) anzeigen lassen, denn in einer etwa vor 4 Jahren erstellten Vorgängerversion hatte das auch schon ohne weiteres funktioniert. Folglich habe ich wie damals im DataModule das vom DBGrid genutzte DataSet in gleicher Weise wie oben mit dem Dialog "Felder bearbeiten" um ein Lookup-Feld (FieldKind: fkLookup) ergänzt, z.B.
Code: Alles auswählen
KeyFields: HerstellerID
LookupDataSet: ztHersteller
LookupKeyFields: HerstellerID
LookupResultField: Hersteller
LookupCache: TRUE
Im Entwurfsmodus (also im Designer) werden daraufhin auch die gewünschten Daten gezeigt. Starten läßt sich das Programm allerdings nicht, es kommt stets ein wenig aussagekräftiges "Operation cannot be performed in an inactive dataset." Entferne ich das Nachschlagefeld wieder, läuft das Programm wieder (nur eben ohne Nachschlagewerte). Es kann von daher also eigentlich nur um das Dataset des Nachschlagefelds gehen.
Die große Frage lautet also: wo und wie muß da noch zur Laufzeit nachgeholfen werden?
Ein "DataModule1.ztPositionHersteller.LookupDataSet.Active:=True;", versuchsweise in TForm1.FormShow gesetzt, hat auch nichts genützt, und leider finde ich zu diesem Thema auch nirgendwo ein erhellendes Beispiel.
Abschließend noch das wichtigste zum Drumherum: benutzt wird ein aktuelles Lazarus (trunk) mit aktuellem FPC (trunk) mit Zeos Access (zcomponent 7.2), alles mit fpclazupdeluxe installiert (also nichts linuxdistributionsspezifisches) auf Debian Stable 8 alias Jessie 64 Bit.