Seite 1 von 1

Mehrfachselektion in einer Datenbank speichern

Verfasst: Sa, 05.05.2007 12:09
von cashew
Hello,

entweder ist mein Problem zu trivial oder zu kompliziert, zumindest hab ich nach langer Suche nichts finden können, was mir weiterhilft.

Und zwar bräuchte ich ein Formular, mit dem ich bspw. einem bestimmten Käufer mehrere Warenartikel zuweisen kann (in einem Datensatzzyklus).
Ich habe also eine Listbox, in der ich den Käufer auswählen kann, gefolgt von ein paar Markierfeldern, über welche dann ich ein oder mehrere Warenartikel auswählen kann.

Ich dachte, es wäre clever wenn ich die Datenbank in etwa so aufbaue:
Tabelle "Kaeufer"
ID---Name
0----Heinz
1----Hubert
2----...

Tabelle "Waren"
ID---Name
0----Bremsscheiben
1----Auspuff
2----Airbag
3----...

Tabelle "Kaeufer_Waren"
KaeuferID---WarenID
...-------------...

Wenn ich bis hierhin überhaupt richtig liege, zielt dann meine Frage darauf, wie ich dem Formular jetzt anweise, daß es mit der Aktivierung eines Markierfeldes jeweils die ID des Käufers und die ID des Artikels in die Tabelle "Kaeufer_Waren" einträgt.

Wenn also Hubert Bremsscheiben, Auspuff, Airbag kauft,
sollte das in der Tabelle "Kaeufer_Waren" so aussehen:

Tabelle "Kaeufer_Waren"
Kaeufer_ID---Waren_ID
1---------------0
1---------------1
1---------------2

So etwa dachte ich mir das zumindest - lasse mich da aber gerne eines besseren belehren.
Alles klappt ja soweit, außer eben die Sache mit der Mehrfachselektion bzw. dem Mehrfacheintrag in der Tabelle.
Ist dieses Szenario nur realisierbar mit einem Makro, oder kann ich mich davor nochmal erfolgreich drücken ? :wink:

Vielen Dank jetzt schon mal fürs durchlesen & schönen Tag wünscht
der Tibor

PS: Da das Formular noch mehrere Kontrollfelder enthält, wäre es ziemlich unpraktisch, alle Artikel einzeln einem Käufer zuzuweisen.
Als Datenbank verwende ich den OpenOffice-Standard (meines Wissens hsqldb)

Verfasst: Mi, 16.05.2007 11:00
von Toastbrot
Hallo,
ich habe genau das gleiche Problem! Bei mir sind es zwar Mannschaften und Mitglieder, aber das spielt ja keine Rolle...

Ich bin auch so weit, dass ich die Zuordnung jeweils einzeln machen kann, aber wie du schon schriebst, ist das ja sehr umständlich!

Dann warten wir mal gemeinsam auf Hilfe ;)

Verfasst: Mi, 16.05.2007 13:38
von Toxitom
Hey Cashew,

hmm, da überschätzt du relationale Datenbanken. Diese arbeiten Zeilenorientiert (also Dartensatzorientiert). Das, was du da möchtest, würde aber bedeuten, dass pro Datensatz (dein Formular, wie du es auf dem Bildschirm siehst, repräsentiert immer einen Datensatz!) mehrere einzelne Datensätze erzeugt würden (in deiner Tabelle "Kaeufer_Waren"). Das gibt die "normale" Syntax nicht her.
Also, entweder selbst programmieren - oder die Logik umbauen.
Also, du hast die Tabelle "Käufer", die beinhalten die Daten der Personen, identifiziert durch die ID. OK.
Was genau beinhaltet nun deine Tabelle "Waren"? nur die Namen der Waren oder auch zusätzliche Informationen (wie Beschreibungen etc)?
Wenn sie nur die Namen der Waren haben und diese fix sind, kannst du sie auch weglassen.
Die dritte Tabelle sollte nun ebenfalls "Vorgänge" aufzeichnen, also bsw. "Käufe". Dabei wäre der "Kauf" ein Datensatz, Mit Datum, Kunde und Waren, wobei für jede Ware ebenfalls ein Datensatz ausgelöst würde.

Das liesse sich einfach über Formular und Subformular lösen, ohne Programmierung. Beispiele hierzu finden sich sowohl -> in dem Buch als auch in -> diesem. Möglicherweise findest du auch woanders noch Beispiele.

Viele Grüße
Thomas

Verfasst: Di, 29.05.2007 20:03
von cashew
Hello ToxiTom,

danke für deine Tipps und Hinweise zu den Büchern. Es ist tatsächlich so, daß in der Tabelle Waren nur eine Spalte mit den jeweiligen Warennamen enthalten ist (+ 1 ID-Spalte). Ich dachte, ich fahre mit diesem Aufbau ganz gut, da dort ab und an mal Waren hinzukommen.

Nach weiterer Suche im Netz bin ich dan mal auf dieses Buch gestossen, welches ich mir dann auch mal geliehen habe.
Netterweise sind die Beispiele dazu auf der Homepage verlinkt, und zwar hier:
http://examples.oreilly.de/german_examp ... asebasger/

Jetzt bin ich mir langsam nicht mehr sicher, ob OpenOffice Base nicht mehr Bugs hat als ich :? :
Wenn ich aus diesen Beispielen die entsprechende odb-Datei und das darin enthaltene Formular "Bestellungen" (read-only !) öffne und Daten ins Formular eintragen will, bekomme ich folgende Fehlermeldung:

Error updating the current record

Integrity constraint violation SYS_FK_107 table: Best_Ware in statement
[UPDATE "Bestellungen" SET "Bestellnummer" = ? Where "Bestellnummer" = ? ]

...Danach verabschiedet sich das komplette Openoffice und ich muss ein Document-Recovery machen, und das ohne die gesamte Datei in irgendeiner Form geändert zu haben (ausser den versuchten Datenbankeintrag natürlich). Mit anderen Worten bekomme ich den Eindruck, daß man Base mit bloßem Blick abschiessen kann (Daran arbeite ich aber noch ;-)

Leider konnte ich zu dieser Fehlermeldung nichts Ergiebiges im Forum finden, und wenn es irgendjemand schoneinmal geschafft hat, diese Fehlermeldung erfolgreich zu beseitigen, dann würde ich mich um eine kurze Anleitung sehr freuen.

Vielen Dank schonmal ,
Chashew

Verfasst: Di, 29.05.2007 22:02
von berndkli
Hallo Cashew

Wenn du damit leben kannst statt einem Listenfeld ein Tabellenkontrollfeld für die Kunden zu nehmen, dann schau hier mal. Ist die gleiche Problematik.

Gruss Bernd

Verfasst: Mi, 30.05.2007 13:19
von cashew
Hello Berndkli,

vielen Dank für deine Antwort, aber auch bei deinem Beispiel erhalte ich den in meinem letzten Posting erwähnten, sehr ähnlichen Error "Violation of unique constraint SYS_PK_47 ..."
gefolgt von einem Komplettabsturz von OpenOffice.

Das läßt natürlich darauf schließen, daß irgendwas mit meinem OpenOffice speziell nicht stimmt. Komischerweise erhalte ich diese Fehlermeldung sowohl mit neuestem NeoOffice auf Mac als auch mit neuestem OpenOffice auf Ubuntu-Linux und auf WindowsXP.
Eine komplette Re-Installation hat da auch nichts gebracht.
Da ich eueren Genius ebensowenig anzweifle wie den eines Lehrbuches von oreilly, bei dessen Beispiel-Datenbank ja die selbe Fehlermeldung auftauchte, bin ich gerade höchst ratlos und derbe ausgebremst.

Falls also eventuell jemand noch eine Idee hat ... sie stößt auf offene Ohren
Danke & auf bald,
Cashew