Re: [de-users] Base - Listenfeld mit zwei Kriterien
Hallo Thomas, wenn ich das richtig unterpretiere, schlägt Robert das gleiche vor wie ich. Viel Erfolg, und frage ruhig nach Gerhard Am 15.01.2020 um 19:47 schrieb Thomas: Hallo Robert, vielen Dank für die Hinweise. Am 15.01.20 um 15:35 schrieb Robert Großkopf: Hallo Thomas, Hallo Gerhard, die Struktur ohne Makros läuft nur über Hauptformular - Unterformular - UnterUnterformular. Ohne Listenfelder wären im Hauptformular und im Unterformular nur Tabellenkontrollfelder, die die beschriebenen Orte und Räume enthielten. Deren eingestellter Inhalt wird dann in das Unter-Unterformular übernommen. Diese Tabellenkontrollfelder brauchen ja keine Neueingabe von Daten zu enthalten, da vermutlich die Räume bereits feststehen. Sonst gäbe es ja auch mit Listenfeldern Probleme. Ja, Orte und Räume sind schon in separaten Tabellen vorhanden. Die Ortseingabe funktioniert und es geht um die Raumeingabe, wobei eben nur die passenden Räume angeboten werden sollen. Ich denke, mit Unter- und UnterUnterformular könnte es gehen und werde das zuerst probieren. Danke Thomas Dann ist noch die Möglichkeit, das Hauptformular als Filterformular mit einem Listenfeld zu versehen. Ohne Makro braucht es hier aber schon einen Button zusätzlich, der dann dafür sorgt, dass der Inhalt weitergegeben wird. Im Handbuch steht im Kapitel "Makros" bei den Eigenschaften für Listenfelder dieses Makro: --- SUB Listenfeldfilter DIM stSql(0) AS STRING DIM oDoc AS OBJECT DIM oDrawpage AS OBJECT DIM oForm AS OBJECT DIM oFeld AS OBJECT oDoc = thisComponent oDrawpage = oDoc.drawpage oForm = oDrawpage.forms.getByName("MainForm") oFeld = oForm.getByname("Listenfeld") stSql(0) = "SELECT ""Name"", ""ID"" FROM ""Filter_Name"" ORDER BY ""Name""" oFeld.ListSource = stSql oFeld.refresh END SUB --- Sobald also der Ort vorgegeben wurde müsste der Code für das Listenfeld entsprechend unter stSql(0) eingetragen werden. Also, wie in gerhards Beispiel, "SELECT ""Raum"", ""ID_Raum"" FROM ""Räume"" WHERE ""ID_Ort"" = '1' ORDER BY ""Raum""" Die '1' für die ID_Ort muss dann aus dem Feld für den Ort gelesen werden. Das geht dann auch in Kurzform, wenn beide Listenfelder im gleichen Formular liegen: --- SUB Listenfeldfilter(oEvent AS OBJECT) DIM stSql(0) AS STRING DIM oForm AS OBJECT DIM oFeld AS OBJECT DIM oStartFeld AS OBJECT oFeldStart = oEvent.Source.Model inIDOrt = oFeldStart.CurrentValue oForm = oFeldStart.Parent oFeld = oForm.getByname("Listenfeld") stSql(0) = "SELECT ""Raum"", ""ID_Raum"" FROM ""Räume"" WHERE ""ID_Ort"" = '"+inIDOrt+"' ORDER BY ""Raum""" oFeld.ListSource = stSql oFeld.refresh END SUB --- Gruß Robert -- Liste abmelden mit E-Mail an: users+unsubscr...@de.libreoffice.org Probleme? https://de.libreoffice.org/hilfe-kontakt/mailing-listen/abmeldung-liste/ Tipps zu Listenmails: https://wiki.documentfoundation.org/Netiquette/de Listenarchiv: https://listarchives.libreoffice.org/de/users/ Datenschutzerklärung: https://www.documentfoundation.org/privacy
Re: [de-users] Base - Listenfeld mit zwei Kriterien
Hallo Robert, vielen Dank für die Hinweise. Am 15.01.20 um 15:35 schrieb Robert Großkopf: > Hallo Thomas, Hallo Gerhard, > > die Struktur ohne Makros läuft nur über Hauptformular - Unterformular - > UnterUnterformular. Ohne Listenfelder wären im Hauptformular und im > Unterformular nur Tabellenkontrollfelder, die die beschriebenen Orte und > Räume enthielten. Deren eingestellter Inhalt wird dann in das > Unter-Unterformular übernommen. > > Diese Tabellenkontrollfelder brauchen ja keine Neueingabe von Daten zu > enthalten, da vermutlich die Räume bereits feststehen. Sonst gäbe es ja > auch mit Listenfeldern Probleme. Ja, Orte und Räume sind schon in separaten Tabellen vorhanden. Die Ortseingabe funktioniert und es geht um die Raumeingabe, wobei eben nur die passenden Räume angeboten werden sollen. Ich denke, mit Unter- und UnterUnterformular könnte es gehen und werde das zuerst probieren. Danke Thomas > > Dann ist noch die Möglichkeit, das Hauptformular als Filterformular mit > einem Listenfeld zu versehen. Ohne Makro braucht es hier aber schon > einen Button zusätzlich, der dann dafür sorgt, dass der Inhalt > weitergegeben wird. > > Im Handbuch steht im Kapitel "Makros" bei den Eigenschaften für > Listenfelder dieses Makro: > > --- > SUB Listenfeldfilter > DIM stSql(0) AS STRING > DIM oDoc AS OBJECT > DIM oDrawpage AS OBJECT > DIM oForm AS OBJECT > DIM oFeld AS OBJECT > oDoc = thisComponent > oDrawpage = oDoc.drawpage > oForm = oDrawpage.forms.getByName("MainForm") > oFeld = oForm.getByname("Listenfeld") > stSql(0) = "SELECT ""Name"", ""ID"" FROM ""Filter_Name"" ORDER BY ""Name""" > oFeld.ListSource = stSql > oFeld.refresh > END SUB > --- > Sobald also der Ort vorgegeben wurde müsste der Code für das Listenfeld > entsprechend unter stSql(0) eingetragen werden. Also, wie in gerhards > Beispiel, > "SELECT ""Raum"", ""ID_Raum"" FROM ""Räume"" WHERE ""ID_Ort"" = '1' > ORDER BY ""Raum""" > Die '1' für die ID_Ort muss dann aus dem Feld für den Ort gelesen > werden. Das geht dann auch in Kurzform, wenn beide Listenfelder im > gleichen Formular liegen: > --- > SUB Listenfeldfilter(oEvent AS OBJECT) > DIM stSql(0) AS STRING > DIM oForm AS OBJECT > DIM oFeld AS OBJECT > DIM oStartFeld AS OBJECT > oFeldStart = oEvent.Source.Model > inIDOrt = oFeldStart.CurrentValue > oForm = oFeldStart.Parent > oFeld = oForm.getByname("Listenfeld") > stSql(0) = "SELECT ""Raum"", ""ID_Raum"" FROM ""Räume"" WHERE ""ID_Ort"" > = '"+inIDOrt+"' ORDER BY ""Raum""" > oFeld.ListSource = stSql > oFeld.refresh > END SUB > --- > > Gruß > > Robert -- Liste abmelden mit E-Mail an: users+unsubscr...@de.libreoffice.org Probleme? https://de.libreoffice.org/hilfe-kontakt/mailing-listen/abmeldung-liste/ Tipps zu Listenmails: https://wiki.documentfoundation.org/Netiquette/de Listenarchiv: https://listarchives.libreoffice.org/de/users/ Datenschutzerklärung: https://www.documentfoundation.org/privacy
Re: [de-users] Base - Listenfeld mit zwei Kriterien
Hallo Thomas, Hallo Gerhard, die Struktur ohne Makros läuft nur über Hauptformular - Unterformular - UnterUnterformular. Ohne Listenfelder wären im Hauptformular und im Unterformular nur Tabellenkontrollfelder, die die beschriebenen Orte und Räume enthielten. Deren eingestellter Inhalt wird dann in das Unter-Unterformular übernommen. Diese Tabellenkontrollfelder brauchen ja keine Neueingabe von Daten zu enthalten, da vermutlich die Räume bereits feststehen. Sonst gäbe es ja auch mit Listenfeldern Probleme. Dann ist noch die Möglichkeit, das Hauptformular als Filterformular mit einem Listenfeld zu versehen. Ohne Makro braucht es hier aber schon einen Button zusätzlich, der dann dafür sorgt, dass der Inhalt weitergegeben wird. Im Handbuch steht im Kapitel "Makros" bei den Eigenschaften für Listenfelder dieses Makro: --- SUB Listenfeldfilter DIM stSql(0) AS STRING DIM oDoc AS OBJECT DIM oDrawpage AS OBJECT DIM oForm AS OBJECT DIM oFeld AS OBJECT oDoc = thisComponent oDrawpage = oDoc.drawpage oForm = oDrawpage.forms.getByName("MainForm") oFeld = oForm.getByname("Listenfeld") stSql(0) = "SELECT ""Name"", ""ID"" FROM ""Filter_Name"" ORDER BY ""Name""" oFeld.ListSource = stSql oFeld.refresh END SUB --- Sobald also der Ort vorgegeben wurde müsste der Code für das Listenfeld entsprechend unter stSql(0) eingetragen werden. Also, wie in gerhards Beispiel, "SELECT ""Raum"", ""ID_Raum"" FROM ""Räume"" WHERE ""ID_Ort"" = '1' ORDER BY ""Raum""" Die '1' für die ID_Ort muss dann aus dem Feld für den Ort gelesen werden. Das geht dann auch in Kurzform, wenn beide Listenfelder im gleichen Formular liegen: --- SUB Listenfeldfilter(oEvent AS OBJECT) DIM stSql(0) AS STRING DIM oForm AS OBJECT DIM oFeld AS OBJECT DIM oStartFeld AS OBJECT oFeldStart = oEvent.Source.Model inIDOrt = oFeldStart.CurrentValue oForm = oFeldStart.Parent oFeld = oForm.getByname("Listenfeld") stSql(0) = "SELECT ""Raum"", ""ID_Raum"" FROM ""Räume"" WHERE ""ID_Ort"" = '"+inIDOrt+"' ORDER BY ""Raum""" oFeld.ListSource = stSql oFeld.refresh END SUB --- Gruß Robert -- Homepage: https://www.familiegrosskopf.de/robert -- Liste abmelden mit E-Mail an: users+unsubscr...@de.libreoffice.org Probleme? https://de.libreoffice.org/hilfe-kontakt/mailing-listen/abmeldung-liste/ Tipps zu Listenmails: https://wiki.documentfoundation.org/Netiquette/de Listenarchiv: https://listarchives.libreoffice.org/de/users/ Datenschutzerklärung: https://www.documentfoundation.org/privacy
Re: [de-users] Base - Listenfeld mit zwei Kriterien
Hallo Gerhard, Am 14.01.20 um 22:55 schrieb Gerhard Weydt: > Hallo Thomas, > > ich nehme an, die "Grundtabelle" soll die Veranstaltungen aufnehmen. > Ich wüsste bei deiner Vorstellung mit Listenfeldern nur den Weg, das > Listenfeld für die Räume abhängig vom gewählten Ort anzupassen, das > kann geschehen, indem die Datenquelle als SQL deklariert ist und das > SQL-Stament geändert wird (SELECT Raum, ID_Raum FROM Räume WHERE > ID_Ort = id_ort). Diese Änderung musst du aber in einem Makro > durchführen, das du beim Datensatzwechsel in dem Formular, wo der Ort > eingetragen wird, anstößt; dort musst du die Variable id_ort (deshalb > kleingeschrieben) ermitteln und damit das SQL zusammenbasteln. Mit so einem SQL hatte ich es probiert, aber halt nicht im Makro. Damit habe ich keine Erfahrung. > Ich weiß nicht, ob Makros für dich möglich sind, aber ich denke, etwas > in der Art ist da der einzige Weg. (Es sei denn, Robert kommt noch mit > einem tollen Trick.) Mal sehen. Danke und viele Grüße Thomas -- Liste abmelden mit E-Mail an: users+unsubscr...@de.libreoffice.org Probleme? https://de.libreoffice.org/hilfe-kontakt/mailing-listen/abmeldung-liste/ Tipps zu Listenmails: https://wiki.documentfoundation.org/Netiquette/de Listenarchiv: https://listarchives.libreoffice.org/de/users/ Datenschutzerklärung: https://www.documentfoundation.org/privacy
Re: [de-users] Base - Listenfeld mit zwei Kriterien
Hallo Thomas, ich nehme an, die "Grundtabelle" soll die Veranstaltungen aufnehmen. Ich wüsste bei deiner Vorstellung mit Listenfeldern nur den Weg, das Listenfeld für die Räume abhängig vom gewählten Ort anzupassen, das kann geschehen, indem die Datenquelle als SQL deklariert ist und das SQL-Stament geändert wird (SELECT Raum, ID_Raum FROM Räume WHERE ID_Ort = id_ort). Diese Änderung musst du aber in einem Makro durchführen, das du beim Datensatzwechsel in dem Formular, wo der Ort eingetragen wird, anstößt; dort musst du die Variable id_ort (deshalb kleingeschrieben) ermitteln und damit das SQL zusammenbasteln. Ich weiß nicht, ob Makros für dich möglich sind, aber ich denke, etwas in der Art ist da der einzige Weg. (Es sei denn, Robert kommt noch mit einem tollen Trick.) Du könntest aber auch einen anderen Weg gehen, wenn Makros nicht in Frage kommen: Zum Erfassen von Veranstaltungen verwendest du ein Formulardokument, das folgende Formularstruktur hat: Ort +- Raum +-Veranstaltung Zur späteren Übersicht über Veranstaltungen verwendest du ein anderes Formulardokument, das ungefähr so aussehen dürfte wie deine jetzige Vorstellung. Der Vorteil ist, dass beim ersten Formulardokument LibO die Verknüpfung der Tabellen machen kann und du kein Makro brauchst. Nachteil ist, dass du zwei Formulare hast, aber es hängt sehr von der Arbeitsweise ab, ob das wirklich ein Nachteil ist oder nur Gewöhnungssache. Ich habe das jetzt nicht konkret getestet, aber bin mir ziemlich sicher, dass das so funktioniert. Gruß Gerhard Am 14.01.2020 um 20:01 schrieb Thomas: Hallo, ich möchte in einer Datenbank Orte und zugehörige Räume für Veranstaltungen aufnehmen. Ich habe da Ort1, Ort2, Ort3 usw. Im Ort1 gibt es Raum1, Raum2, im Ort2 Raum3, Raum4, Raum5, im Ort3 gibt es Raum6... Die Orte sind in einer Tabelle mit ID_Ort und Ort, die Räume in einer anderen Tabelle mit ID_Raum, ID_Ort und Raum. Damit weiß ich, welcher Raum in welchem Ort ist. In einem Formular werden zunächst die Orte mit Hilfe eines Listenfeldes ausgewählt und deren ID_Ort in die Grundtabelle eingetragen. Das funktioniert einwandfrei. Nun möchte ich im selben Formular für den vorher eingetragenen Ort einen zugehörigen Raum auswählen. Das Listenfeld soll mir also nur die relevanten Räume anbieten und die entsprechende ID_Raum in die Grundtabelle eintragen. Für Ort2 dürften mir also nur Raum3, Raum4 oder Raum5 angeboten werden. Da habe ich schon viel probiert, schaffe es aber einfach nicht und bitte nun um Hilfe Viele Grüße Thomas -- Liste abmelden mit E-Mail an: users+unsubscr...@de.libreoffice.org Probleme? https://de.libreoffice.org/hilfe-kontakt/mailing-listen/abmeldung-liste/ Tipps zu Listenmails: https://wiki.documentfoundation.org/Netiquette/de Listenarchiv: https://listarchives.libreoffice.org/de/users/ Datenschutzerklärung: https://www.documentfoundation.org/privacy
Re: [de-users] Base - Listenfeld mit zwei Kriterien
Hallo! Versuche es mal von der Überlegung her anders herum: Erst gibt dir die Auswahl mögliche Räume vor und dann sagt sie dir wo die Räume sind. Ferner bietet es sich an eine "Hotelnummerierung" vorzunehmen: Zimmer 312 ist das "12." Zimmer in der 3. Etage. Wobei die 12 das 2. zimmer rechts vom Aufzug ist. Was du brauchst sind verschachtelte Suchabfragen. Grüsse Am 14.01.2020 um 20:01 schrieb Thomas: Hallo, ich möchte in einer Datenbank Orte und zugehörige Räume für Veranstaltungen aufnehmen. Ich habe da Ort1, Ort2, Ort3 usw. Im Ort1 gibt es Raum1, Raum2, im Ort2 Raum3, Raum4, Raum5, im Ort3 gibt es Raum6... Die Orte sind in einer Tabelle mit ID_Ort und Ort, die Räume in einer anderen Tabelle mit ID_Raum, ID_Ort und Raum. Damit weiß ich, welcher Raum in welchem Ort ist. In einem Formular werden zunächst die Orte mit Hilfe eines Listenfeldes ausgewählt und deren ID_Ort in die Grundtabelle eingetragen. Das funktioniert einwandfrei. Nun möchte ich im selben Formular für den vorher eingetragenen Ort einen zugehörigen Raum auswählen. Das Listenfeld soll mir also nur die relevanten Räume anbieten und die entsprechende ID_Raum in die Grundtabelle eintragen. Für Ort2 dürften mir also nur Raum3, Raum4 oder Raum5 angeboten werden. Da habe ich schon viel probiert, schaffe es aber einfach nicht und bitte nun um Hilfe Viele Grüße Thomas -- Liste abmelden mit E-Mail an: users+unsubscr...@de.libreoffice.org Probleme? https://de.libreoffice.org/hilfe-kontakt/mailing-listen/abmeldung-liste/ Tipps zu Listenmails: https://wiki.documentfoundation.org/Netiquette/de Listenarchiv: https://listarchives.libreoffice.org/de/users/ Datenschutzerklärung: https://www.documentfoundation.org/privacy