BITTE helfen Sie uns HEUTE mit einer SPENDE
Helfen Sie das LibreOffice Forum zu erhalten!
> KEINE WERBUNG FÜR REGISTRIERTE BENUTZER!<
Ihre Spende wird für die Deckung der laufenden Kosten sowie den Erhalt und Ausbau 🌱 des LibreOffice Forums verwendet.
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗
Frage zum Handbuch: Drucken über Textfelder unabhängig von der Datenquelle des Formulars?
-
- Beiträge: 756
- Registriert: Fr 28. Mär 2014, 10:41
Frage zum Handbuch: Drucken über Textfelder unabhängig von der Datenquelle des Formulars?
Hallo Robert,
zu dem im Handbuch behandelten Textfieldmakro im Kapitel "Drucken über Textfelder" habe ich eine Frage:
Es steht dort der Satz "Wenn der Name des Textfeldes gleich dem Spaltennamen der Daten ist, die dem Formular
zugrunde liegen, wird der Inhalt aus der Datenbank auf das Feld in dem Textdokument übertragen."
Ich würde gerne aus dem Auftragsformular möglichst automatisch eine Rechnung erstellen können. Im Auftragsformular werden zwar die Auftraggeber angezeigt, die über eine Zwischentabelle mit dem Auftrag verbunden sind (m:n-Beziehung), über ein Listenfeld als Unterformular, wo eine Ansicht den Auftraggebernamen anzeigt. So wird der Auftrag auch mit bereits erstellten Auftraggebern verbunden.
Jetzt würde ich gerne wissen, ob es noch eine andere Möglichkeit gibt, für eine Rechnung die Adresse der markierten Auftraggeber "aus der Datenbank zu holen", ohne daß das Auftragsformular auf einer riesigen Abfrage aller Aufträge verknüpft mit allen Auftraggebern beruhen muß.
Kann man nicht das Makro selbst im Einzelfall (anhand der Auftraggeber-ID aus dem Auftraggeber-Unterformular) in der Zwischentabelle und der Auftraggeber-Tabelle "nachschauen" lassen, wie die Adresse des markierten Auftraggebers ist? Und damit dann die Textfelder einer Rechnung (Tabellenvorlage) füllen?
So eine Lösung stelle ich mir zum einen schneller vor, und man könnte auch später Informationen ergänzen, die in der Abfrage, auf der das Formular beruht, nicht enthalten sind.
Gruß
Freischreiber
zu dem im Handbuch behandelten Textfieldmakro im Kapitel "Drucken über Textfelder" habe ich eine Frage:
Es steht dort der Satz "Wenn der Name des Textfeldes gleich dem Spaltennamen der Daten ist, die dem Formular
zugrunde liegen, wird der Inhalt aus der Datenbank auf das Feld in dem Textdokument übertragen."
Ich würde gerne aus dem Auftragsformular möglichst automatisch eine Rechnung erstellen können. Im Auftragsformular werden zwar die Auftraggeber angezeigt, die über eine Zwischentabelle mit dem Auftrag verbunden sind (m:n-Beziehung), über ein Listenfeld als Unterformular, wo eine Ansicht den Auftraggebernamen anzeigt. So wird der Auftrag auch mit bereits erstellten Auftraggebern verbunden.
Jetzt würde ich gerne wissen, ob es noch eine andere Möglichkeit gibt, für eine Rechnung die Adresse der markierten Auftraggeber "aus der Datenbank zu holen", ohne daß das Auftragsformular auf einer riesigen Abfrage aller Aufträge verknüpft mit allen Auftraggebern beruhen muß.
Kann man nicht das Makro selbst im Einzelfall (anhand der Auftraggeber-ID aus dem Auftraggeber-Unterformular) in der Zwischentabelle und der Auftraggeber-Tabelle "nachschauen" lassen, wie die Adresse des markierten Auftraggebers ist? Und damit dann die Textfelder einer Rechnung (Tabellenvorlage) füllen?
So eine Lösung stelle ich mir zum einen schneller vor, und man könnte auch später Informationen ergänzen, die in der Abfrage, auf der das Formular beruht, nicht enthalten sind.
Gruß
Freischreiber
Freischreiber nutzt seit 6/2023 LibreOffice Version: 7.2.7.2 (x64) unter Windows 10 und SplitDB mit HSQL 2.7.2.
Re: Frage zum Handbuch: Drucken über Textfelder unabhängig von der Datenquelle des Formulars?
Hallo Freischreiber,
ich würde nicht nur über Textfelder Rechnungen drucken wollen. Schau Dir dazu vielleicht einmal die gesondert herunterladbaren Beispiel mit Beschreibung an. Da sind "Serienbriefe direkt aus Base heraus" erklärt und vor allem im Screenshot zu sehen. Mein Favorit: Die Adressdaten, Rechnungsnummer und Summe werden aus dem Formular geholt. Die Inhalte der Rechnung aber über eine Abfrage aus der Datenbank in eine Tabelle eingefügt.
Gruß
Robert
ich würde nicht nur über Textfelder Rechnungen drucken wollen. Schau Dir dazu vielleicht einmal die gesondert herunterladbaren Beispiel mit Beschreibung an. Da sind "Serienbriefe direkt aus Base heraus" erklärt und vor allem im Screenshot zu sehen. Mein Favorit: Die Adressdaten, Rechnungsnummer und Summe werden aus dem Formular geholt. Die Inhalte der Rechnung aber über eine Abfrage aus der Datenbank in eine Tabelle eingefügt.
Gruß
Robert
https://de.libreoffice.org/get-help/documentation/
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=base_handbuch
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=xml_formulare
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=base_handbuch
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=xml_formulare
-
- Beiträge: 756
- Registriert: Fr 28. Mär 2014, 10:41
Re: Frage zum Handbuch: Drucken über Textfelder unabhängig von der Datenquelle des Formulars?
Hallo Robert,
ich schon. Meine (immer ziemlich gleichen) Rechnungsinhalte stehen schon in einer Tabellenvorlage, dort wird von Hand angepaßt, Informationen, die sowieso nicht in der Datenbank stehen.
Ich brauche also nur Adresse, Rechnungsnummer, Auftragsnummer möglichst einfach dort eingetragen.
Aber ich sehe schon: in dem Makro "Rechnungsinhalt_zusammenstellen_Tabelle" aus deiner Beispieldatenbank gibt es diese Stelle:
Da wird auf Tabellen der Datenbank zugegriffen, oder? Sowas müßte doch auch mit einer Adresse gehen, wenn man ihre ID hat?
Gruß
Freischreiber
ich schon. Meine (immer ziemlich gleichen) Rechnungsinhalte stehen schon in einer Tabellenvorlage, dort wird von Hand angepaßt, Informationen, die sowieso nicht in der Datenbank stehen.
Ich brauche also nur Adresse, Rechnungsnummer, Auftragsnummer möglichst einfach dort eingetragen.
Aber ich sehe schon: in dem Makro "Rechnungsinhalt_zusammenstellen_Tabelle" aus deiner Beispieldatenbank gibt es diese Stelle:
Code: Alles auswählen
oVerbindung = oDatenquelle.ActiveConnection()
oSQL_Anweisung = oVerbindung.createStatement()
stSql = "SELECT ""Verkauf"".""Anzahl"", ""Waren"".""Ware"", ""Waren"".""Preis"", ""Verkauf"".""Anzahl"" * ""Waren"".""Preis"" FROM "
stSql = stSql + """Verkauf"", ""Waren"" WHERE ""Verkauf"".""Waren_ID"" = ""Waren"".""ID"" AND ""Verkauf"".""Rechnung_ID"" = "+loID+""
oAbfrageergebnis = oSQL_Anweisung.executeQuery(stSql)' Ergebnis auswerten
Gruß
Freischreiber
Freischreiber nutzt seit 6/2023 LibreOffice Version: 7.2.7.2 (x64) unter Windows 10 und SplitDB mit HSQL 2.7.2.
Re: Frage zum Handbuch: Drucken über Textfelder unabhängig von der Datenquelle des Formulars?
Hallo Freischreiber,
geht natürlich auch, wenn Du die Adresse nicht gerade im Formular stehen hast, wohl aber den Schlüssel für die Adresse, dann kannst Du auch die Inhalt der Tabelle direkt auslesen.
Gruß
Robert
geht natürlich auch, wenn Du die Adresse nicht gerade im Formular stehen hast, wohl aber den Schlüssel für die Adresse, dann kannst Du auch die Inhalt der Tabelle direkt auslesen.
Gruß
Robert
https://de.libreoffice.org/get-help/documentation/
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=base_handbuch
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=xml_formulare
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=base_handbuch
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=xml_formulare
-
- Beiträge: 756
- Registriert: Fr 28. Mär 2014, 10:41
Re: Frage zum Handbuch: Drucken über Textfelder unabhängig von der Datenquelle des Formulars?
Hallo Robert,
da gehen die Probleme schon los.
Erstes: Die ID der Adresstabelle, die ich brauche, um die Adresse herauszufinden, verbirgt sich hinter einem Tabellenkontrollfeld, das nur die "andere" Spalte einer Ansicht anzeigt: einen zusammengesetzten Namen des Kunden. "Daneben" wäre die ID, nur: wie drankommen?
Und das zweite Problem: bei der Abfrage nach einer bisher auf 3 festgelegten AdressID bekomme ich eine leere Messagebox und einen Fehler "Falscher Wert für Eigenschaft". Ich vermute, meine Abfrage sucht nach einem String statt einem Integerwert. Ich weiß aber nicht, wie man sie anders formulieren könnte.
Bisher habe ich:
Gruß
Freischreiber
Edit: Das erste Problem ist gelöst, mit,
und die Abfrage heißt korrekt jetzt ohne einfache Anführungszeichen.
Aber ob sie funktioniert, kann ich immer noch nicht sagen. Die msgbox bringt nur "Falscher Wert für Eigenschaft". Wie kriegt man den String aus diesem Objekt?
da gehen die Probleme schon los.
Erstes: Die ID der Adresstabelle, die ich brauche, um die Adresse herauszufinden, verbirgt sich hinter einem Tabellenkontrollfeld, das nur die "andere" Spalte einer Ansicht anzeigt: einen zusammengesetzten Namen des Kunden. "Daneben" wäre die ID, nur: wie drankommen?
Und das zweite Problem: bei der Abfrage nach einer bisher auf 3 festgelegten AdressID bekomme ich eine leere Messagebox und einen Fehler "Falscher Wert für Eigenschaft". Ich vermute, meine Abfrage sucht nach einem String statt einem Integerwert. Ich weiß aber nicht, wie man sie anders formulieren könnte.
Bisher habe ich:
Code: Alles auswählen
Sub Rechnungsfelder
DIM oSheet AS OBJECT
DIM oCell AS OBJECT
DIM sURL AS STRING
DIM oDoc AS OBJECT
DIM oDrawpage AS OBJECT
DIM oForm AS OBJECT
oDatabaseContext = createUnoService("com.sun.star.sdb.DatabaseContext")
oDatenquelle = ThisComponent.Parent.CurrentController
IF NOT (oDatenquelle.isConnected()) THEN
oDatenquelle.connect()
END IF
DialogLibraries.LoadLibrary( "Standard" )
oDoc = thisComponent
oDrawpage = oDoc.drawpage
oForm = oDrawpage.forms.getbyName("MainForm").getbyName("SubForm_Zugeo_Kunden")
'iAdressID aus Tabellenkontrollfeld, nicht angezeigter Name!
iAdressID=3 'testweise
oVerbindung = oDatenquelle.ActiveConnection()
oSQL_Anweisung = oVerbindung.createStatement()
sNachname = "SELECT ""Nachname"" FROM ""t-adressen"" WHERE ""ID"" = '"+iAdressID+"'"
msgbox sNachname
sNachnameSQL = oSQL_Anweisung.executeQuery(sNachname)
msgbox sNachnameSQL
End Sub
Freischreiber
Edit: Das erste Problem ist gelöst, mit
Code: Alles auswählen
iID = oform.getint(oForm.findcolumn("AdressID"))
und die Abfrage heißt korrekt jetzt
Code: Alles auswählen
oAbfrage = "SELECT ""Nachname"" FROM ""t-adressen"" WHERE ""ID"" = "+iAdressID+""
Aber ob sie funktioniert, kann ich immer noch nicht sagen. Die msgbox bringt nur "Falscher Wert für Eigenschaft". Wie kriegt man den String aus diesem Objekt?
Freischreiber nutzt seit 6/2023 LibreOffice Version: 7.2.7.2 (x64) unter Windows 10 und SplitDB mit HSQL 2.7.2.
Re: Frage zum Handbuch: Drucken über Textfelder unabhängig von der Datenquelle des Formulars?
Hallo Freischreiber,
das zweite Problem zuerst: Du versuchst, in der Messagebox ein Objekt anzuzeigen, nicht das Ergebnis einer Abfrage. Das Objekt kann nicht in der Messagebox abgefragt werden.
Es fehlt etwas wie
Zum ersten Problem (Felder, die zwar in den Datengrundlagen für ein Formular vorhanden sind, aber nicht angezeigt werden, auslesen):
Wenn Du weißt, an welcher Position Dein Schlüsselwert steht, dann reicht:
Hiermit wird das erste Feld der Tabelle/Ansicht/Abfrage ausgelesen - ob es zur Anzeige kommt oder nicht. Das erste Feld ist ein Feld von dem Variablentyp LONG (Basic-Variable), der von der Größe her einem Integer-Typ von HSQLDB entspricht.
Wenn Du den Namen, aber nicht die Position weißt:
Das Feld Name aus der Tabelle/Ansicht/Abfrage wird gesucht. In dem Feld steht ein Text (Varchar aus HSQLDB), der über getString (String in BASIC) ausgelesen wird.
Gruß
Robert
das zweite Problem zuerst: Du versuchst, in der Messagebox ein Objekt anzuzeigen, nicht das Ergebnis einer Abfrage. Das Objekt kann nicht in der Messagebox abgefragt werden.
Es fehlt etwas wie
Code: Alles auswählen
...
oNachnameSQL = oSQL_Anweisung.executeQuery(sNachname)
WHILE oNachname.next
sNachname = oNachname.getString(1)
WEND
...
Wenn Du weißt, an welcher Position Dein Schlüsselwert steht, dann reicht:
Code: Alles auswählen
ID = oForm.getLong(1)
Wenn Du den Namen, aber nicht die Position weißt:
Code: Alles auswählen
nName = oForm.findColumn("Name")
sName = oForm.getString(nName)
Gruß
Robert
https://de.libreoffice.org/get-help/documentation/
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=base_handbuch
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=xml_formulare
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=base_handbuch
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=xml_formulare
-
- Beiträge: 756
- Registriert: Fr 28. Mär 2014, 10:41
Re: Frage zum Handbuch: Drucken über Textfelder unabhängig von der Datenquelle des Formulars?
Hallo Robert,
1. Problem:
tatsächlich, es klappt sogar mit
(Nummer hab ich durch Probieren rausgefunden, es ist eine Listbox in einer Tabellenspalte, eigentlich mit gebundenem Feld 1, aber wohl von 0 aus gezählt).
2. Problem:
Klappt, vielen Dank.
Aber warum um Himmels Willen braucht man dieses "(1)" und eine Schleife für EINEN String aus EINEM Objekt? In meinen bisherigen Makros gab es das getstring immer ohne diese Klammer mit Zahl drin, wie z. B. das hier:
Ist das dann was anderes?
Gruß
Freischreiber
Edit: Jetzt wo ich auch Vorname, Straße und Ort abfrage, merke ich, was das ist: das Objekt, das aus der Abfrage kommt, ist eine Tabellenzeile, und man muß sagen, aus welcher Spalte der String gebildet werden soll.
Aber: die Tabelle besteht ja nur aus einer Zeile, daher verstehe ich die Notwendigkeit der Schleife immer noch nicht.
1. Problem:
tatsächlich, es klappt sogar mit
Code: Alles auswählen
iID = oform.getint(2)
2. Problem:
Klappt, vielen Dank.
Aber warum um Himmels Willen braucht man dieses "(1)" und eine Schleife für EINEN String aus EINEM Objekt? In meinen bisherigen Makros gab es das getstring immer ohne diese Klammer mit Zahl drin, wie z. B. das hier:
Code: Alles auswählen
scurrentKontakt = oFormKontakt.getString(oFormKontakt.findcolumn("Nummer"))
Gruß
Freischreiber
Edit: Jetzt wo ich auch Vorname, Straße und Ort abfrage, merke ich, was das ist: das Objekt, das aus der Abfrage kommt, ist eine Tabellenzeile, und man muß sagen, aus welcher Spalte der String gebildet werden soll.
Aber: die Tabelle besteht ja nur aus einer Zeile, daher verstehe ich die Notwendigkeit der Schleife immer noch nicht.
Freischreiber nutzt seit 6/2023 LibreOffice Version: 7.2.7.2 (x64) unter Windows 10 und SplitDB mit HSQL 2.7.2.
Re: Frage zum Handbuch: Drucken über Textfelder unabhängig von der Datenquelle des Formulars?
Hallo Freischreiber,
ich zitiere einmal aus dem Handbuch:
Robert
ich zitiere einmal aus dem Handbuch:
GrußSoll nur der erste Datensatz ausgewertet werden, so wird mitzuerst die Zeile auf diesen Datensatz bewegt und dann mitCode: Alles auswählen
oResult.next
z.B. der Inhalt des ersten Datenfeldes gelesen. Die Schleife entfällt hier.Code: Alles auswählen
stVar = oResult.getString(1)
Robert
https://de.libreoffice.org/get-help/documentation/
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=base_handbuch
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=xml_formulare
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=base_handbuch
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=xml_formulare
-
- Beiträge: 756
- Registriert: Fr 28. Mär 2014, 10:41
Re: Frage zum Handbuch: Drucken über Textfelder unabhängig von der Datenquelle des Formulars?
Hallo Robert,
das klappt bei mir aber nicht, da bekomme ich "Objektvariable nicht belegt."
Da die Abfrage auf den Primärschlüssel geht, gibt es nur eine Zeile, wo ich dann verschiedene Spalten abfrage:
So, mit auskommentierter Schleife, kommt die Fehlermeldung.
Gruß
Freischreiber
das klappt bei mir aber nicht, da bekomme ich "Objektvariable nicht belegt."
Da die Abfrage auf den Primärschlüssel geht, gibt es nur eine Zeile, wo ich dann verschiedene Spalten abfrage:
Code: Alles auswählen
oAdresse = oSQL_Anweisung.executeQuery(oAdressabfrage)
' WHILE oAdresse.next
o.Adresse.next 'ohne Schleife, wenn nur die erste Zeile ausgelesen werden soll.
iAnredeID = oAdresse.getint(1)
iTitelID = oAdresse.getint(2)
sVorname = oAdresse.getString(3)
sNachname = oAdresse.getString(4)
sStrasse = oAdresse.getString(5)
sPLZ = oAdresse.getString(6)
sOrt = oAdresse.getString(7)
' WEND
Gruß
Freischreiber
Freischreiber nutzt seit 6/2023 LibreOffice Version: 7.2.7.2 (x64) unter Windows 10 und SplitDB mit HSQL 2.7.2.
Re: Frage zum Handbuch: Drucken über Textfelder unabhängig von der Datenquelle des Formulars?
Hallo freischreiber,
"Objektvariable nicht belegt" > da würde ich nachschauen, ob ich irgendeine Variable falsch geschrieben habe, auf die ich mich beziehe. Ich sehe bei Dir
statt
Gruß
Robert
"Objektvariable nicht belegt" > da würde ich nachschauen, ob ich irgendeine Variable falsch geschrieben habe, auf die ich mich beziehe. Ich sehe bei Dir
Code: Alles auswählen
o.Adresse.next
Code: Alles auswählen
oAdresse.next
Robert
https://de.libreoffice.org/get-help/documentation/
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=base_handbuch
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=xml_formulare
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=base_handbuch
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=xml_formulare
An alle, die das LibreOffice-Forum nutzen:
Bitte beteiligen Sie sich mit 7 Euro pro Monat und helfen uns bei unserem Budget für das Jahr 2024.
Einfach per Kreditkarte oder PayPal.
Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet.
❤️ Vielen lieben Dank für Ihre Unterstützung ❤️