Listbox Einträge manipulieren und weitere Probleme

Datenbanklösungen mit AOO/LO

Moderator: Moderatoren

kohai
Beiträge: 9
Registriert: Mi, 27.12.2006 10:50

Listbox Einträge manipulieren und weitere Probleme

Beitrag von kohai »

hallo,

ich habe mir nach unüberwindbaren problemen das buch "Makros in OpenOffice.org" gekauft und komme damit meinen problemen immer mehr auf die spur. ich habe aber noch einige fragen:

ich habe eine datenbank zur motorrad-rennen-verwaltung. es gibt drei tabellen: adressen, mopeds, starter. in "adressen" sind die adressen der fahrer gespeichert. in "mopeds" die motorräder, mit einem feld "besitzerID", das der ID des besitzers in "adressen" entspricht. dabei kann ein fahrer mehrere mopeds haben.

jetzt möchte ich in einem formular eine tabelle "starter" mit "AdressID" und "mopedID" füllen, also ich wähle zunächst einen starter aus "adressen" aus, dessen ID trage ich mittels einer listbox ein, die mit einträgen aus einer SQL abfrage gefüllt wird:

Code: Alles auswählen

SELECT `Name`, `ID` FROM `datenbank`.`Adressen`  order by Name ASC
das gebundene feld `ID` wird eingetragen. das klappt wunderbar. jetzt wäre es schön, wenn mir bei der eingabe in diesem datensatz in der spalte "mopedID" ähnliches gelingen würde, allerdings sollten zur auswahl nur die mopeds stehen, deren besitzerID mit der AdressID übereinstimmt. nach meinem wissen bisher geht das nur über makros, da ich ja den noch nicht gespeicherten eintrag "AdressID" in meine SQL abfrage einbauen muss.

also hab ich ein makro geschrieben, das über eine SQL-abfrage mir eben diese mopeds ermittelt. das klappt auch. nur...... wie zum ... bekomme ich das ergebnis des makros in eine listbox zur auswahl des mopeds? und, noch schwieriger: wie kriege ich aus der auswahl der listbox, die ja die bezeichnung und nicht die ID des mopeds zeigen soll, dessen ID in die tabelle "starter" eigetragen? also analog zur listbox bei der "AdressID".

oder geht das viel einfacher über eine per makro definierte variable? also in der art:

Code: Alles auswählen

SELECT `Bezeichnung`, `ID` FROM `datenbank`.`mopeds` WHERE `BesitzerID` = variable
wenn das so geht, wie greife ich in base in einer sql-abfrage auf eine per makro definierte variable zu?

nebenbei habe ich noch ein problem: bei mir startet das makro nicht automatisch, d.h. nur über button. eigentlich sollte es starten, sobald eine AdressID eingetragen wurde. in dieser spalte kann ich es unter "ereignisse" bei modifiziert oder fokusverlust eintragen, es passiert aber nichts.

puh. ich hoffe, es kann mir jemand helfen.

gruß, kohai

PS: langsam nach endlosem googeln und lesen kriege ich den verdacht, dass a) sehr viele leute dieses problem haben und b) niemand die lösung weiss... zumindest hab ich noch keine gefunden.
kohai
Beiträge: 9
Registriert: Mi, 27.12.2006 10:50

Beitrag von kohai »

hallo,

ich wäre dankbar, wenn mir einer einen hinweis geben würde.. auch wenn meine frage offensichtlich falsch/dumm/unbeantwortbar sein sollte :wink: , was ich selbst aber schwer beurteilen kann.

mein problem kreist immer wieder um eine kernfrage: kann ich vorgegebene, eingebaute funktionen direkt (z.b. über variablen) mit makros verbinden? im speziellen fall die SQL-abfrage einer listbox. ich kann ja mit :variable auf eingegebene oder via subformular definierte variablen zugreifen..... kann ich das auch mit (globalen) makro-variablen? oder ist sowas unmöglich? müsste ich dann das ganze formular als dialog mit makros programmieren, um die gewünschte funktionalität zu erreichen?

ich stecke hier einfach fest. evtl. sehe ich den wald vor bäumen nicht oder die frage wurde schon 1000mal beantwortet.. oder es weiss wirklich niemand?

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

Beitrag von Toxitom »

Hey kohai,

die Problematik ist: Du befindest dich jetzt an der Grenze. Auf der einen Seite das (recht einfache) Arbeiten mit Mais-Klick-Klick, vordefinierten Funktionen und leichten Verbindungen zu Steuerelementen, auf der anderen Seiten die manuelle Programmierung von Frontends und Funktionalitäten.
Also:
Selbstverständlich kannst du das alles per Makro-Programmierung lösen. Du kannst auch jede Listbox per Makro füllen - unabhängig der eingebauten Möglichkeit direkter Datenbank-Verbindung. Nur: Jetzt musst du halt selbst für alles Sorge tragen, eine Kombination ist schwierig.
Theoretisch könntest du auch die SQL- Befehlssequenz zunächst per Makro zusammensetzen (und somit deien Variable verwenden) und diese dann der Listbox zuweisen - das musst du nur machen, bevor das Formular aktiv wird, oder du musst es dann eben "erneuern" (neu laden).
Leider kann ich dir jetzt aus dem Kopf nicht die entsprechenden Eigenschaften sagen - da musst du zur Not mal in der IDL schmökern - die Bindungsvarainten (objekte) sind relativ neu.
Du bist bestimmt nicht der Erste, der sich damit bechäftigt, es sind aber sicher auch noich nicht so viele - und die Aufgabenstellungen sind überall anders.
Meine Projekte habe ich bis jetzt meist vollständig "programmiert", die eingebauten Funktionen selten benutzt. So hatte ich volle Kontrolle - über den Rest müsste ich mich auch erst einlesen/-denken...

Viele Grüße
Thomas
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
kohai
Beiträge: 9
Registriert: Mi, 27.12.2006 10:50

Beitrag von kohai »

hallo thomas,
Toxitom hat geschrieben: Du kannst auch jede Listbox per Makro füllen - unabhängig der eingebauten Möglichkeit direkter Datenbank-Verbindung. Nur: Jetzt musst du halt selbst für alles Sorge tragen, eine Kombination ist schwierig.
Theoretisch könntest du auch die SQL- Befehlssequenz zunächst per Makro zusammensetzen (und somit deien Variable verwenden) und diese dann der Listbox zuweisen - das musst du nur machen, bevor das Formular aktiv wird, oder du musst es dann eben "erneuern" (neu laden).
Leider kann ich dir jetzt aus dem Kopf nicht die entsprechenden Eigenschaften sagen - da musst du zur Not mal in der IDL schmökern - die Bindungsvarainten (objekte) sind relativ neu.
Du bist bestimmt nicht der Erste, der sich damit bechäftigt, es sind aber sicher auch noich nicht so viele - und die Aufgabenstellungen sind überall anders.
danke für den hinweis. fragt sich jetzt nur noch, ob es zeitsparender und einfacher ist, die vordefinierten funktionen mit den makros zu verbinden oder gleich alles "zu fuss" zu machen.

interessant hört sich das zuweisen des SQL-strings zur listbox an... fragt sich dann halt, ob die funktionalität erhalten bleibt, also die sache mit dem "gebundenen feld": angezeigt werden soll die bezeichnung, eingetragen werden soll die ID. scheint mir allerdings auf ein ziemliches gestöpsel mit ungewissem ausgang hinauszulaufen.
Meine Projekte habe ich bis jetzt meist vollständig "programmiert", die eingebauten Funktionen selten benutzt. So hatte ich volle Kontrolle - über den Rest müsste ich mich auch erst einlesen/-denken...
das versuche ich, wenn es irgendwie geht, zu vermeiden. nicht, weil ich mir das nicht zutrauen würde oder angst habe davor, sondern weil es einfach viel zeit kostet. wenn das das einzige projekt wäre.... :roll:

jedenfalls danke für deine antwort!

gruß, kohai
Frank Lauer
***
Beiträge: 88
Registriert: Mi, 30.07.2003 18:06
Wohnort: Wiesloch

Beitrag von Frank Lauer »

Hallo kohai,
das versuche ich, wenn es irgendwie geht, zu vermeiden. nicht, weil ich mir das nicht zutrauen würde oder angst habe davor, sondern weil es einfach viel zeit kostet. wenn das das einzige projekt wäre....
Das hatte ich mir auch gedacht und versucht über vorgefertigte Funktionen zu arbeiten. Leider hat mich das viel Frust und erfolglose 5 Studen gekostet, da sich die vorgefertigten Funktionen oft etwas "seltsam" verhalten. Nach einer Stunde und der hälfte des Makrocodes mit reiner "Handarbeit" lief dann alles wurderbar.

Zu deinem Problem:

Tip: verwende keine in der Basedatei gespeicherten Formulare, sondern melde die Datenbank an und arbeite mit unabhängigen Formulardateien. Die Baseinternen verhalten sich noch etwas buggy.

Baue eine Tabelle (Starter) auf, die Adress ID und Moped ID enhält und einen Primärschlüssel. Zur Eingabe verwendet du ein "nur Lesen" Formular, in dem eine Abfrage aus Starter, Mopeds und Adressen jeweils die Starterdaten im Klartext darstellt. Dort hast zu dann die Schaltflächen "Löschen", "Ändern" und "Neuer Starter", die die Tabelle "Starter über SQL-Befehle manipulieren.

Für Hinzufügen und Ändern verwendet du ein Formular, das Daten aus Adressen und in einem Unterformular die Dazugehörigen Daten aus Mopeds darstellt (Alles read only). Außerdem hat das Formula einen Button übernehmen. Bei übernehmen holt der sich die aktuellen IDs aus dem Formular und unterformular und schreibt sie über einne Insert Abfrage in die Startertabelle.
OOo 2.1 , Win XP
kohai
Beiträge: 9
Registriert: Mi, 27.12.2006 10:50

Beitrag von kohai »

hallo frank,

klingt nicht schlecht! ich würde aber dennoch gern bei den base-formularen bleiben, ich hatte bisher damit keine probleme. aber das ist eh zweitrangig.

die idee gefällt mir ganz gut. ich könnte dann im prinzip alles so lassen wie bisher: momentan habe ich 2 tabellen im formular: events und starter. events ist read only und nur zum auswählen des passenden event. die startertabelle ist dann ein subformular mit der bedingung "events.ID" = "starter.eventID". ich wollte nun eben die startertabelle direkt editieren.... aber die idee mit den "ändern" oder "löschen" buttons ist evtl. die lösung. der button ruft einen makro-dialog auf und fertig ist die laube... :D probier ich aus! hätte den vorteil, dass ich nicht alles manuell programmieren muss.

gruß, kohai
Antworten