ComboBox: Titel anzeigen, ID speicher

Datenbanklösungen mit AOO/LO

Moderator: Moderatoren

almiho
Beiträge: 2
Registriert: Fr, 21.07.2006 21:55

ComboBox: Titel anzeigen, ID speicher

Beitrag von almiho »

Hallo,

Ich hoffe, Ihr könnt mir helfen, folgendes Problem zu lösen:
Ich habe mir die klassiche Kombination aus einer Tabelle für Kunden und einer für Aufträge angelegt. Beide mit IDs und Primary Keys, über "Tools"->"Relationships" habe ich eine 1-n Verbindung zwischen Kunde und Auftrag erstellt. Jetzt möchte ich gern ein Formular nutzen, um weitere Aufträge einzugeben. Also habe ich mit dem Wizard ein Formular dafür angelegt. Ohne jede Änderung bekomme ich ein Formular, in dem ich u.a. die ID des Kunden zu jedem Auftrag eingeben muss. Das ist natürlich nicht sehr komfortabel. Ich würde lieber eine Combobox haben, in der ich die Namen aller Kunden sehe. Wenn ich dann einen davon auswähle und den Record speichere, soll natürlich nicht der Name des Kunden aus der combobox, sondern dessen ID in der Auftragstabelle gespeichert werden.
Ich glaube, dass müsste ein alltägliches Problem sein und habe alle möglichen Einstellungen durchprobiert, leider ohne Erfolg. Kann mir jemand sagen, was ich tun muss ?

Vielen Dank,
Alex
Toxitom
********
Beiträge: 3769
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Beitrag von Toxitom »

Hey Alex,
Ich glaube, dass müsste ein alltägliches Problem sein ...
Jou, das stimmt. Nur so einfach ist das eben nicht umzusetzen! Wie hast du denn dein Formular erzeugt? Mit Subformular?

Auf jeden Fall: Die Combobox ist das falsche Instrument - du müsstest die Listbox nutzen.
Am besten baust du dir dein Formular "per Hand" auf.
Die Listbox ist das Hauptformular - du wählst den Kundennamen aus - die Id (Kd-Nr) wird jetzt intern als Selektionskriterium zum Unterformular weitergereicht. Und dort kannst du dann weitere Datensätze eingeben.
Falls du ohne Makros arbeitest, musst du eventuell noch einen Butten einfügen ("Kunde übernehmen" oder so), der das Hauptformular "refreshed". Nur die Auswahl in einer Listbox führt nicht automatisch zum Speichern des Datensatzes.
Nun weis ich nicht, wieviel Ahnung du schon von Formularen, Basic, Programmierung, Datenbanken, SQL hast, schwer also, irgendwo anzusetzen. Und die Gesamtlösung ist recht aufwendig.

Gruss
Thomas
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
alex0801
*
Beiträge: 14
Registriert: Di, 15.08.2006 12:02
Kontaktdaten:

Beitrag von alex0801 »

Ich stehe gerade vor dem gleichen Problem...
Arbeite zum ersten mal mit OO Base. Programmiertechnisch bin ich mit Java sehr gut vertraut, auch was SQL betrifft.

Was ich allerdings nicht verstehe: Warum ist sowas alltägliches in einem program dass ein wenig die komplexität einer Datebank abstrahiert nichti n der Lage so eine kleine Aufgabe mit 3 clicks abzuhaken?!

Nun ja. Wär klasse wenn du etwas mehr ins Detail gehen könntest oder nen Link hast der sowas "alltägliches" genauer beschreibt.

Gruß
Alex
alex0801
*
Beiträge: 14
Registriert: Di, 15.08.2006 12:02
Kontaktdaten:

Beitrag von alex0801 »

Hab ich zu doof gefragt? Hab ich was offensichtliches übersehen? Kann oder will mir (evtl auch uns) hier niemand antworten?

Gruß
Alex
almiho
Beiträge: 2
Registriert: Fr, 21.07.2006 21:55

falsche Prioritaten bei der Entwicklung ?

Beitrag von almiho »

alex0801 hat geschrieben:Hab ich zu doof gefragt? Hab ich was offensichtliches übersehen? Kann oder will mir (evtl auch uns) hier niemand antworten?
Anscheinen ist tatsächlich eingetreten, was ich befürchtet habe. Vor einigen Jahren habe ich mal etwas mit MS Access herumgespielt (zugegeben, die Versionen würde man heute nicht mehr als aktuell bezeichnen, dort gibt es evtl. inzwischen eine Lösung) und habe das gleiche Problem gehabt. Damals habe ich es nicht verstanden, da ich dachte, man hätte Access eben genau deshalb entwickelt, damit man schnell und effektiv eine einfache relationale Datenstruktur und die dazu passenden einfachen Eingabemasken erstellen kann. Genau das konnte man aber nicht.
Meine große Hoffnung ruhte dann auf OO Base. Nachdem ich fleissiger und (in den meisten Fällen) begeisterter Benutzer von OO Writer und OO Calc bin, hatte ich vermutet, dass OO Base genauso gut durchdacht und in Details sehr elegant umgesetzt sein müsste. Dass offensichtlich keine Standard-Lösung für dieses Standard-Problem existiert, enttäuchst mich sehr. Warum gibt es nicht direkt einen Button in einer der Haupttoolbars für eine entsprechende Auswahlbox. Ich denke, dieser Button würde beim Designen von Masken in Base eine Favoritenrolle bekommen für viele User. Aber nein, ausgerechnet diese Funktion fehlt.
Mal Hand aufs Herz, hat einer der an OO Base beteiligten Entwickler - so sehr ich deren Leistung schätze - mal eine Maske im eigenen Sinne (nicht nur zum Testen) erstellt ? Ich kanns mir nicht vorstellen. Ich würde mich freuen, wenn einfach irgend ein anderes geplantes Feature gestrichen würde und in einer der kommenden Versionen diese Riesenlücke geschlossen würde.

Schöne Grüsse,
alex
Toxitom
********
Beiträge: 3769
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Beitrag von Toxitom »

Hey Alex, hey Alex2,

hab mir den Thread noch mal durchgelesen - eigentlich ist das doch schon alles so einfach eingebaut. Ich dachte da an einen anderen Fall. Also:
Die Listbox ist das richtige Instrument. Da könnt ihr euch einen Eintrag aus einer anderen Tabelle ansehen (also anzeigen lassen), in den Datensatz eingetragen wird aber ein anderer Wert (Feld).

Also, ihr geht wie folgt vor:
Erstellt euch eiuer Formular - am besten zunächst it Hilfe des Assistenten.
Ist es fertig, öffnet es in der Bearbietungsansicht (Kontextmenü - bearbeiten). Markiert das gewünschte Feld und wählst zunächst aus dem Kontextmenü "Gruppierung aufheben". Der Assistent gruppiert nämlich die Eingabefelkder mit den Beschriftungsfeldern - so könnt ihr einzelne Felder nicht bearbeiten. Jetzt markiert nur das Eingabefeld - und löscht es.
Fügt nun an seiner Stelle eine Listbox ein (Icon in Formular-Entwurfsansicht). Es öffnet sich ein Assistent und ihr könnt bequem Schritt für Schritt eure Auswahl fixieren. Im 1. Schritt wählt ihr die Tabelle, aus der die Liste erzeugt werden soll. Im 2. Schritt das Feld, das den Klartextnamen enthält. Dieses Feld wird dann in der Liste angezeigt - mit allen Namen. Im dritten Schritt schliesslich wählt ihr dann das aus, was wo eingetragen werden soll - also das verknüpfte Feld. Die erste Spalte bezieht sich auf die Tabelle, zu der das Formular gehört - und dort wählt ihr das Feld des Sekundärschlüssels. In der zweiten Spalte wird dann der passende Eintrag (Feld) der verknüpften Tabellen markiert - also meist ID.
Tia, das war es dann auch schon. Jetzt zeigt die Listbox den Inhalt der Tabelle (die Namen zum Beispiel), in dien Datensatz eingetragen wird aber die zu diesem Datensatz gehörige ID.
OK, nun viel Spass beim experimentieren.

Gruss
Thomas

PS: Mehr Informationen findet ihr in dem folgenden Buch:
http://www.galileocomputing.de/1176?GPP=ooo
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
alex0801
*
Beiträge: 14
Registriert: Di, 15.08.2006 12:02
Kontaktdaten:

Beitrag von alex0801 »

Hi Alex,
so gehts mir auch. Dachte Base ist ein Tool mit dem ich zumindest für kleine Sachen nixmehr großartig coden muss. Aber "toxitom's" Aussage:
Und die Gesamtlösung ist recht aufwendig.
hat mich jetzt doch etwas schockiert. Gut, meinetwegen. Sollen die Base-Entwickler also genauso faul gewesen sein wie die Access Entwickler und so eine Funktion nicht bedacht und realisiert haben.
Was ich jetzt dennoch vermisse ist eine Anleitung, ein HowTo oder sowas in der Art die wenigstens Erklärt wie man's macht.

Wenn sowas alltägliches "recht aufwendig" ist und zudem noch nirgends Idiotenscher erklärt ist, dann frage ich mich welche Daseinsberechtigung OO Base hat. Für den NICHT-OO-Base-Profi ist es ungeeignet, da so ein kleines Problem "recht aufwendig" ist und nicht ausreichend dokumentiert und erklärt ist, für den allgemeinen SQL-Profi und Coder ist es schlichtweg zu klein um etwas damit zu machen. Die Setzen dann doch MySQL, Oracle oder Postgres ein...

Also für wenn ist dann OO-Base wenns nicht für den einigermaßen erfahrenen Einsteiger zu gebrauchen ist?

Bin weiterhin auf der Suche nach einer Anleitung oder HowTo. Vielleicht gehts ja doch in 5 Schritten statt in dem gewünschten 1-click-Step den es noch zu implementieren gilt...
FürAnregungen, Links oder detaliertere Hinweise wäre ich dankbar.

Gruß
Alex

[edit]
war zu langsam.. erstmal lesen was es neues gibt ...
alex0801
*
Beiträge: 14
Registriert: Di, 15.08.2006 12:02
Kontaktdaten:

Beitrag von alex0801 »

Okay, Anleitung hab ich genau so befolgt.
Und ich musste feststellen: soweit war ich schonmal. Und: es geht dennoch nicht.

Ich hab eine mitglieder-tabelle. Darin gibt es eine spalte mitglied_typ_id.
Dazu passend gibts eine zweite Tabelle. Dort gibts 2 spalten: Eine mit der ID und eine mit dem Namen des Typs.

jetzt hab ich mir ein Formular mit dem Assistenten angelegt und alle felder meiner mitglieder-tabelle damit verknüft. Das mitglied_typ_id feld hab ich exakt wie von dir beschrieben durch die listbox ausgetauscht.
Alles gespeichert und getestet:

fazit: In die spalte mitglied_typ_id wird nicht die Typ-ID sondern der dazugehörige Name gespeichert.

Ich hab dan etwas weiter geforscht:
Wenn man über "Kontrollfeld" der Listbox in die Eigenschaften geht hat man unter dem Register "Daten" den Eintrag "Gebundenes Feld".
So wie ich das aus der Online-Hilfe verstenden hab wird da das Feld gewählt das später in mitglied_typ_id gespeichert wird.
Dazu passend hier das SQL-Statement:

SELECT "mitglied_typ_name", "mitglied_typ_id" FROM "mitglied_typ"

Der EIntrag "gebundenes Feld" steht auf 1. Da ja per 0 indiziert wird müsste 1 das zweite Feld sein, also mitglied_typ_id. Ist aber scheinbar nicht so. Ich habs noch mit 0 und 2 als gebundenes Feld probiert. jeweils kein Erfolg. Beim testen hab ich eine leere Listbox.


Any ideas why ?

- Alex
Toxitom
********
Beiträge: 3769
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Beitrag von Toxitom »

Hey Alex,
Any ideas why ?
Nein. Ich hab es gerade noch mal bei mir getestet - funktioniert einwandfrei. Der Name wird angezeigt, die ID-Nummer abgespeichert. Kann auch keinen Fehler in deiner Beschreibung finden, der Select-Befehl ist korrekt, das gebundene Feld (1) auch. Sollte also funktionieren.
Welche Version verwendest du? Welches Betriebssystem?

Gruss
Thomas

<edit> Wenn keine Geheimnisse in der Datei stehen, stell sie doch mal onlien - und poste den Link. Dann kann ich mir mal direkt dein Problem ansehen.
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
alex0801
*
Beiträge: 14
Registriert: Di, 15.08.2006 12:02
Kontaktdaten:

Beitrag von alex0801 »

HI,
alles klar, stell die datei morgen rein. is heute schon zu spät *gähn*
OS: WinX SP2
OO: Die Version von vorgestern (erst frisch runtergeladen und installiert).
Sprache: Deutsch

- Alex
alex0801
*
Beiträge: 14
Registriert: Di, 15.08.2006 12:02
Kontaktdaten:

Beitrag von alex0801 »

So,
also ich hab nochmal nach den Versionen geschaut.
Hab zwei verschiedene da:
Auf dem Laptop ist 2.0 installiert, auf meinem Desktop-PC 2.0.3
Beide in der Sprache deutsch (falls das nen Unterschied macht) und mit Windows XP prof. mit SP2.

In beiden Versionen ist es mir nicht gelungen, trotz der doch einfachen Anleitung, dass die ID statt der Name in der Tabelle gespeichert wird.

Hier hab ich nochmal kurz ein Beispiel zusammengeklickt:

http://www.root1.de/ListboxIdTest.odb

Ist ganz primitiv aufgebaut:

Zwei Tabellen: member und member_type
Verlinkt werden soll:

member.member_type_id

mit

member_type.member_type_id

In der Listbox soll jedoch member_type.member_type_name angezeigt werden.
Bin gespannt ob du das Problem lösen kannst und woran es dann letztendlich liegt.

Gruß und danke für die Hilfe,
Alex
Toxitom
********
Beiträge: 3769
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Beitrag von Toxitom »

Hey Alex,
In der Listbox soll jedoch member_type.member_type_name angezeigt werden.
Bin gespannt ob du das Problem lösen kannst und woran es dann letztendlich liegt.
Hmm, und wo ist das Problem? Alles OK. Hab mir deine Datei runtergeladen, das Formular geladen, einen Datensatz eingegeben:
Die Listbox zeigt die Typen an (Adminsitrator, User) - ich habe Admin ausgewählt. Datensatz gespeichert. In der Tabelle Member" werden wie gewünscht die ID Nummern abgespeichert - nämlich 0 für den Administartor und - beim nächsten Datensatz 1 für den User (so gewählt).
Also, alles so wie es ein soll.
Mein system: Win XP, OOo 2.0.3

Gruss
Thomas

PS: Mit der 2.0.0 wäre ich vorsichtig. Da gab es schon noch diverse Bugs - möglich, dass es dort nicht funktionierte.
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
alex0801
*
Beiträge: 14
Registriert: Di, 15.08.2006 12:02
Kontaktdaten:

Beitrag von alex0801 »

Das ist jetzt krass. Ich hab hier 1:1 die gleiche Datei, und bei mir will er die Namen statt der ID speichern... *am Kopf kratz* Was mach ich denn jetzt noch falsch?

2.0 hab ich nur installiert ums mal mit ner anderen Version zu prüfen.

[update]
Argh, ich Depp...
Ist aber auch verwirrend:

Bild

Beim eintragen zeigt er die Namen an. Wenn ich aber später in die member-Tabelle reinschaue dann stehen da tatsächlich die ID's statt der Namen.
Frag mich jetzt gerade wieso der beim Eintragen, wenn man die Tabelle mit anzeigen lässt, die Namen statt die ID's drin stehen.
Hab da halt immer gliech abgebrochen... Sieht ja offensichltich so aus als ob's nicht funktionieren würde...
*Verwirrende Sache*

Trotzdem, danke für die Hilfe.

Gruß
Alex
Toxitom
********
Beiträge: 3769
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Beitrag von Toxitom »

Hey Alex,
Frag mich jetzt gerade wieso der beim Eintragen, wenn man die Tabelle mit anzeigen lässt, die Namen statt die ID's drin stehen.
Hmm, das sind zwei verschiedene Sachen! Das, was du anzeigst im Screenshot ist an sich eine Abbildung des altuellen Resultsets - nicht der Tabelle selbst. Da wird die ID wieder aufgelöst - entsprechend der Verknüpfung. (Wahrscheinlich interne Logig - für die DAUs??)
Tia, so entstehen die Missverständnisse.

Gut zu wissen, das es nun funktioniert :-)

Gruss
Thomas
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
danny1000
Beiträge: 7
Registriert: Do, 17.06.2004 23:24

Beitrag von danny1000 »

Sorry, wenn ich nochmal diesen alten Thread ausgrabe, aber ich habe genau ein Problem, das darin besprochen wird. Nun habe ich die Anleitung von Toxitom versucht und scheitere schon am Punkt "Einfügen der Listbox" (peinlich).

Wo genau finde ich das Icon zum Einfügen der Listbox ("Icon in Formular-Entwurfsansicht")? Ich bin in der Entwurfsansicht des Formulars und habe ein Icon "Feld hinzufügen", aber da kommen nur die Felder der aktuellen Tabelle, es kommt kein Assistent.

Kann mir da bitte noch einer den entscheidenden Tipp geben, wie ich dieses Listenfeld einfügen kann?

1000 Dank, an diesem Problem (mit den verknüpften Tabellen) knabbere ich schon lange.
Antworten