dbLookupCombobox

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
Antworten
paulderfinne
Beiträge: 65
Registriert: Mi 27. Feb 2013, 18:24
OS, Lazarus, FPC: Linux (L 0.9.30.4-1.1 FPC 2.6.0)
CPU-Target: 32Bit

dbLookupCombobox

Beitrag von paulderfinne »

Hallo Gemeinde,

denke schon ich bin ganz Plemplem. Ich habe eine ZQuery (also Zeos) mit einer datasorce verbunden und dann eine dblookupCombobox mit dieser (in der ListSource) verbunden. Wenn ich das mit einem Grid tue, ist alles OK, aber mit der Conmbobox funktioniert das nicht. Was könnte ich falsch machen?

grl
Beiträge: 36
Registriert: Fr 17. Okt 2008, 19:24
OS, Lazarus, FPC: Debian X64, Lazarus 1.1, FPC 2.7.1
CPU-Target: x86, ARM

Re: dbLookupCombobox

Beitrag von grl »

Tja, also aufgrund dieser präzisen Fehlerbeschreibung kann dir hier sicher jeder helfen...

Was tust du?
Was erwartest du?
Was passiert?
Wie schaut der zugehörige Source aus?

Luggi

paulderfinne
Beiträge: 65
Registriert: Mi 27. Feb 2013, 18:24
OS, Lazarus, FPC: Linux (L 0.9.30.4-1.1 FPC 2.6.0)
CPU-Target: 32Bit

Re: dbLookupCombobox

Beitrag von paulderfinne »

Ja, du hast ja so recht. War gestern Abend ein bisschen durch den Wind.
Also erstmal von hinten gefragt: gibt es, soweit ihr wisst irgendein Problem mit Zeos auf MYSQL und dblookupcomboboxen?

Ich habe eigentlich etwas ganz Simples probiert. In einem DataModul habe ich alle meine "Datencontrolls". Dort befindet sich ein u.a. ein zconnect auf eine Datenbank, ein zquery mit einem SQL-Befehl (select ID, name from table ) auf jene Datenbank und eine Datasource, die auf diese query zeigt. Nun wollte ich in einem anderen Formular ein dblookupcombobox, die den Namen aus dem Query anzeigt.

Ich setze also bei den Eigenschaften der Combobox das Attribut ListSource auf die DataSource. Im Attribut ListField werden auch ganz brav die beiden Felder ID und Name angezeigt. Ich Wähle name und denke gut ist. Aber wenn ich die Anwendung starte kommt in der Combobox gar nichts.

Versuche ich dasselbe mit einem dbGrid, dann geht das.

Code habe ich noch gar keinen generiert, außer, dass ich das Datenmodul in den Quelltext des Formulars eingebunden habe (uses datamodul).

hde
Beiträge: 556
Registriert: Mi 11. Aug 2010, 02:56

Re: dbLookupCombobox

Beitrag von hde »

paulderfinne hat geschrieben:Was könnte ich falsch machen?
Eine Menge :wink: was soll denn die DBLookupComboBox machen? Das Ergebnis deine SQL-Abfrage doch wohl hoffentlich nicht?
Was hast du denn bei Datasource und Datafield eingetragen?
hde

paulderfinne
Beiträge: 65
Registriert: Mi 27. Feb 2013, 18:24
OS, Lazarus, FPC: Linux (L 0.9.30.4-1.1 FPC 2.6.0)
CPU-Target: 32Bit

Re: dbLookupCombobox

Beitrag von paulderfinne »

hde hat geschrieben: was soll denn die DBLookupComboBox machen? Das Ergebnis deine SQL-Abfrage doch wohl hoffentlich nicht?
Doch. Zumindes ein Feld davon. Wozu ist denn das Ding sonst da? Aber anscheinend mache ich wirklich eine Menge falsch.

Dann frage ich anders herum: Wie kann ich eine Combobox kreieren in der das Resultat einer Datenbankabfrage steht? In der Zwischenzeit habe ich eine kleine Routine geschrieben (aus lauter Verzweiflung), die eine normale Combobox mit den Daten meiner Abfrage füllt. Aber ich denke, das kann es doch nicht sein, oder?

knight
Beiträge: 802
Registriert: Mi 13. Sep 2006, 22:30

Re: dbLookupCombobox

Beitrag von knight »

paulderfinne hat geschrieben: Wozu ist denn das Ding sonst da?
Ein klassischer Fall ist der Umgang mit Fremdschlüsseln. Angezeigt werden soll z.B. der Name eines Kunden (bzw. eine Auswahlliste mit den Namen), gespeichert werden soll aber die Kundennummer.

knight

paulderfinne
Beiträge: 65
Registriert: Mi 27. Feb 2013, 18:24
OS, Lazarus, FPC: Linux (L 0.9.30.4-1.1 FPC 2.6.0)
CPU-Target: 32Bit

Re: dbLookupCombobox

Beitrag von paulderfinne »

knight hat geschrieben: Ein klassischer Fall ist der Umgang mit Fremdschlüsseln. Angezeigt werden soll z.B. der Name eines Kunden (bzw. eine Auswahlliste mit den Namen), gespeichert werden soll aber die Kundennummer.
Aber genau das will ich ja, krieg es aber nicht hin...

knight
Beiträge: 802
Registriert: Mi 13. Sep 2006, 22:30

Re: dbLookupCombobox

Beitrag von knight »

Was hast du denn bei 'ListSource' und 'KeyField' eingetragen?

knight

paulderfinne
Beiträge: 65
Registriert: Mi 27. Feb 2013, 18:24
OS, Lazarus, FPC: Linux (L 0.9.30.4-1.1 FPC 2.6.0)
CPU-Target: 32Bit

Re: dbLookupCombobox

Beitrag von paulderfinne »

knight hat geschrieben:Was hast du denn bei 'ListSource' und 'KeyField' eingetragen?

knight
Bei Listsource die datasource, die wiederum auf den query zeigt, der meine Daten enthält ('select name, ID from table order by name') und bei Keyfield das name-Feld (sie ließen sich beide auswählen).
Dann habe ich versucht die datasource im Objektinspektor vom dbLookupComboBox sowohl leer zu lassen, als uch mit der gleichen datasource wie bei List source zu füllen und bei datafield sowohl name als auch ID einzugeben. Jedes Mal leeere dbLookupComboBox.

Wenn ich nur eine dbComboBox verwende, erscheint nur der letze Name des SQL-Befehls. Verwemde ich einen Grid. alles OK.

hde
Beiträge: 556
Registriert: Mi 11. Aug 2010, 02:56

Re: dbLookupCombobox

Beitrag von hde »

die DBLookupComboBox ist für eine völlig anderen Zweck gedacht als du sie verwenden willst. Das Ergebnis einer einfachen SQL-Abfrage anzeigen, das kann sie nicht.
knight hat geschrieben:Ein klassischer Fall ist der Umgang mit Fremdschlüsseln. Angezeigt werden soll z.B. der Name eines Kunden (bzw. eine Auswahlliste mit den Namen), gespeichert werden soll aber die Kundennummer.
Wenn du ein Feld aus einer einfachen SQL-Abfrage nicht im DBGrid sondern einer Combobox anzeigen willst ist etwas Handarbeit möglich, du musst sie nach der Abfrage füllen

hde

knight
Beiträge: 802
Registriert: Mi 13. Sep 2006, 22:30

Re: dbLookupCombobox

Beitrag von knight »

paulderfinne hat geschrieben: Bei Listsource die datasource, die wiederum auf den query zeigt, der meine Daten enthält ('select name, ID from table order by name') und bei Keyfield das name-Feld (sie ließen sich beide auswählen).
Dann habe ich versucht die datasource im Objektinspektor vom dbLookupComboBox sowohl leer zu lassen, als uch mit der gleichen datasource wie bei List source zu füllen und bei datafield sowohl name als auch ID einzugeben. Jedes Mal leeere dbLookupComboBox.
Unter Keyfield muß die ID ausgewählt werden. Für ein sinnvolles Ergebnis dürfen Listsource und Datasource nicht gleich sein. Unter Datasource muß eine Verbindung zu der Tabelle hergestellt werden, in der die Daten eingetragen werden sollen (z.B. Listsource -> Kundentabelle, Datasource -> Auftragstabelle).
Wenn die DBLookupCombobox leer bleibt - hast du geprüft, ob über die Query Komponente überhaupt Daten geliefert werden (ein Tippfehler im SQL Kommando kann große Auswirkungen haben).

knight

hde
Beiträge: 556
Registriert: Mi 11. Aug 2010, 02:56

Re: dbLookupCombobox

Beitrag von hde »

@knight
wenn ich das richtig sehe, will und braucht er kein "LookUp" sondern will einfach ein Feld seiner SQL-Abfrage anzeigen.

hde
Beiträge: 556
Registriert: Mi 11. Aug 2010, 02:56

Re: dbLookupCombobox

Beitrag von hde »

@Paulderfinne
nimm eine normale ComboBox und fülle die Lines bei jeder SQL-Abfrage. Die max 5 Zeilen wird man doch schreiben können :wink:

paulderfinne
Beiträge: 65
Registriert: Mi 27. Feb 2013, 18:24
OS, Lazarus, FPC: Linux (L 0.9.30.4-1.1 FPC 2.6.0)
CPU-Target: 32Bit

Re: dbLookupCombobox

Beitrag von paulderfinne »

hde hat geschrieben:@Paulderfinne
nimm eine normale ComboBox und fülle die Lines bei jeder SQL-Abfrage. Die max 5 Zeilen wird man doch schreiben können :wink:
Ja, das habe ich jetzt auch getan. Dachte halt bei relationalen Datenbanken kommt sowas doch häufig vor. OK Danke für eure Tipps. Ich habe die Lösung jetzt mit "Befüllen zu Fuß"

Antworten