Re: [de-users] Base - Listenfeld mit zwei Kriterien

2020-01-15 Diskussionsfäden Gerhard Weydt

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

2020-01-15 Diskussionsfäden 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

2020-01-15 Diskussionsfäden 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.

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

2020-01-15 Diskussionsfäden Thomas
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

2020-01-14 Diskussionsfäden 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.
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

2020-01-14 Diskussionsfäden Mohing

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