[Erledigt] DBLookUpCombobox

Rund um die LCL und andere Komponenten
Antworten
MacWomble
Lazarusforum e. V.
Beiträge: 999
Registriert: Do 17. Apr 2008, 01:59
OS, Lazarus, FPC: Mint 21.1 Cinnamon / FPC 3.2.2/Lazarus 2.2.4
CPU-Target: Intel i7-10750 64Bit
Wohnort: Freiburg

[Erledigt] DBLookUpCombobox

Beitrag von MacWomble »

Hallo, ich habe eine DBLookupCombobox in meinem Programm. Nun möchte ich aus der Listsource ein weiteres Feld auslesen (nicht anzeigen).
Wie mache ich das?
Bsp:
Listsource:

OID (Integer
KontaktArt (String)
KontaktTyp (Integer)

Die Kontaktart wird angezeigt und übernommen (ist so OK), bei Auswahl soll aber ebenfalls der KontaktTyp übergeben werden.
Der KontaktTyp ist nicht eindeutig, d.h. ein Typ kann mehrfach vorhanden sein!

Code: Alles auswählen

Typ    Art
1        Telefon
2        Telefax
1        Mobil
3        eMail privat
3        eMail geschäftl.
4        URL privat
4        URL geschäftl
Zuletzt geändert von MacWomble am Mo 14. Aug 2017, 16:24, insgesamt 1-mal geändert.
Alle sagten, dass es unmöglich sei - bis einer kam und es einfach gemacht hat.

Benutzeravatar
gladio
Beiträge: 217
Registriert: Sa 21. Jun 2014, 06:15
OS, Lazarus, FPC: Win10-64 - aktuelle Lazarus/FPC Standard-Edition
CPU-Target: 64Bit
Wohnort: Rügen

Re: DBLookUpCombobox

Beitrag von gladio »

Wenn in der DBLookUpCombobox die 'Kontaktart' gewählt wird, stehen automatisch die dazugehörigen Datenfelder
des Datensatzes zur Verfügung.
Du kannst also den zugehörigen 'Kontakttyp' ganz einfach abgreifen.
Eventuell das dann im OnSelect oder OnCloseUp.

MacWomble
Lazarusforum e. V.
Beiträge: 999
Registriert: Do 17. Apr 2008, 01:59
OS, Lazarus, FPC: Mint 21.1 Cinnamon / FPC 3.2.2/Lazarus 2.2.4
CPU-Target: Intel i7-10750 64Bit
Wohnort: Freiburg

Re: DBLookUpCombobox

Beitrag von MacWomble »

.. wenn es so einfach wäre.

Ich habe das schon versucht, aber es geht nicht.

Ich habe in beiden Ereignissen

ShowMessage(DBLookupComboBox1.ListSource.DataSet.FieldByName('kontakttyp').AsString);

eingetragen. Anscheinend zeigt er immer den ersten Datensatz an,
Alle sagten, dass es unmöglich sei - bis einer kam und es einfach gemacht hat.

Benutzeravatar
gladio
Beiträge: 217
Registriert: Sa 21. Jun 2014, 06:15
OS, Lazarus, FPC: Win10-64 - aktuelle Lazarus/FPC Standard-Edition
CPU-Target: 64Bit
Wohnort: Rügen

Re: DBLookUpCombobox

Beitrag von gladio »

Es gibt im Lazarus-Verzeichnis ein Demo-Projekt:
Lazarus/examles/database/dblookup

Da habe ich mal das eingefügt:

Code: Alles auswählen

 
uses: ...., Dialogs, ....
 
procedure TForm1.DBLookupComboBox1Select(Sender: TObject);
begin
  if DBF1.Locate('MTH_NAME',DBLookUpComboBox1.Text, []) then
  showmessage(DBF1ID.AsString);
end;


Vielleicht wäre diese Variante eine Möglichkeit.

MacWomble
Lazarusforum e. V.
Beiträge: 999
Registriert: Do 17. Apr 2008, 01:59
OS, Lazarus, FPC: Mint 21.1 Cinnamon / FPC 3.2.2/Lazarus 2.2.4
CPU-Target: Intel i7-10750 64Bit
Wohnort: Freiburg

Re: DBLookUpCombobox

Beitrag von MacWomble »

Danke, das hilft weiter. So geht es:

Code: Alles auswählen

procedure TfrmEditKontakt.DBLookupComboBox1Select(Sender: TObject);
begin
   if DBLookupComboBox1.ListSource.DataSet.Locate('kontaktart',DBLookUpComboBox1.Text, []) then
   ShowMessage(DBLookupComboBox1.ListSource.DataSet.FieldByName('kontakttyp').AsString);
end;       
Alle sagten, dass es unmöglich sei - bis einer kam und es einfach gemacht hat.

Antworten