BITTE helfen Sie uns HEUTE mit einer SPENDE
Helfen Sie das LibreOffice Forum zu erhalten!

❤️ DANKE >><< DANKE ❤️

> 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?

Base ermöglicht es Ihnen, Ihre Daten in einer Datenbank direkt mit LibreOffice zu bearbeiten.
Freischreiber
Beiträge: 755
Registriert: Fr 28. Mär 2014, 10:41

Frage zum Handbuch: Drucken über Textfelder unabhängig von der Datenquelle des Formulars?

Beitrag von Freischreiber » Do 10. Aug 2017, 17:03

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
Freischreiber nutzt seit 6/2023 LibreOffice Version: 7.2.7.2 (x64) unter Windows 10 und SplitDB mit HSQL 2.7.2.

RobertG
Beiträge: 2732
Registriert: Sa 19. Mai 2012, 17:37
Kontaktdaten:

Re: Frage zum Handbuch: Drucken über Textfelder unabhängig von der Datenquelle des Formulars?

Beitrag von RobertG » Do 10. Aug 2017, 17:26

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
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

Freischreiber
Beiträge: 755
Registriert: Fr 28. Mär 2014, 10:41

Re: Frage zum Handbuch: Drucken über Textfelder unabhängig von der Datenquelle des Formulars?

Beitrag von Freischreiber » Do 10. Aug 2017, 18:01

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:

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
Da wird auf Tabellen der Datenbank zugegriffen, oder? Sowas müßte doch auch mit einer Adresse gehen, wenn man ihre ID hat?

Gruß
Freischreiber
Freischreiber nutzt seit 6/2023 LibreOffice Version: 7.2.7.2 (x64) unter Windows 10 und SplitDB mit HSQL 2.7.2.

RobertG
Beiträge: 2732
Registriert: Sa 19. Mai 2012, 17:37
Kontaktdaten:

Re: Frage zum Handbuch: Drucken über Textfelder unabhängig von der Datenquelle des Formulars?

Beitrag von RobertG » Do 10. Aug 2017, 21:12

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
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

Freischreiber
Beiträge: 755
Registriert: Fr 28. Mär 2014, 10:41

Re: Frage zum Handbuch: Drucken über Textfelder unabhängig von der Datenquelle des Formulars?

Beitrag von Freischreiber » So 13. Aug 2017, 14:07

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:

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
Gruß
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+""
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?
Freischreiber nutzt seit 6/2023 LibreOffice Version: 7.2.7.2 (x64) unter Windows 10 und SplitDB mit HSQL 2.7.2.

RobertG
Beiträge: 2732
Registriert: Sa 19. Mai 2012, 17:37
Kontaktdaten:

Re: Frage zum Handbuch: Drucken über Textfelder unabhängig von der Datenquelle des Formulars?

Beitrag von RobertG » So 13. Aug 2017, 17:12

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

Code: Alles auswählen

...
oNachnameSQL = oSQL_Anweisung.executeQuery(sNachname)
WHILE oNachname.next
sNachname = oNachname.getString(1)
WEND
...
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:

Code: Alles auswählen

ID = oForm.getLong(1)
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:

Code: Alles auswählen

nName = oForm.findColumn("Name")
sName = oForm.getString(nName)
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
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

Freischreiber
Beiträge: 755
Registriert: Fr 28. Mär 2014, 10:41

Re: Frage zum Handbuch: Drucken über Textfelder unabhängig von der Datenquelle des Formulars?

Beitrag von Freischreiber » So 13. Aug 2017, 17:37

Hallo Robert,

1. Problem:
tatsächlich, es klappt sogar mit

Code: Alles auswählen

iID = oform.getint(2)
(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:

Code: Alles auswählen

scurrentKontakt = oFormKontakt.getString(oFormKontakt.findcolumn("Nummer"))
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. :idea:
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.

RobertG
Beiträge: 2732
Registriert: Sa 19. Mai 2012, 17:37
Kontaktdaten:

Re: Frage zum Handbuch: Drucken über Textfelder unabhängig von der Datenquelle des Formulars?

Beitrag von RobertG » So 13. Aug 2017, 18:59

Hallo Freischreiber,

ich zitiere einmal aus dem Handbuch:
Soll nur der erste Datensatz ausgewertet werden, so wird mit

Code: Alles auswählen

oResult.next
zuerst die Zeile auf diesen Datensatz bewegt und dann mit

Code: Alles auswählen

stVar = oResult.getString(1)
z.B. der Inhalt des ersten Datenfeldes gelesen. Die Schleife entfällt hier.
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

Freischreiber
Beiträge: 755
Registriert: Fr 28. Mär 2014, 10:41

Re: Frage zum Handbuch: Drucken über Textfelder unabhängig von der Datenquelle des Formulars?

Beitrag von Freischreiber » Mo 14. Aug 2017, 09:08

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:

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
So, mit auskommentierter Schleife, kommt die Fehlermeldung.

Gruß
Freischreiber
Freischreiber nutzt seit 6/2023 LibreOffice Version: 7.2.7.2 (x64) unter Windows 10 und SplitDB mit HSQL 2.7.2.

RobertG
Beiträge: 2732
Registriert: Sa 19. Mai 2012, 17:37
Kontaktdaten:

Re: Frage zum Handbuch: Drucken über Textfelder unabhängig von der Datenquelle des Formulars?

Beitrag von RobertG » Mo 14. Aug 2017, 09:24

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

Code: Alles auswählen

o.Adresse.next
statt

Code: Alles auswählen

oAdresse.next
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

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 ❤️

Antworten