SQL mittels Makro auf Schaltfläche legen

classic Classic list List threaded Threaded
11 messages Options
Leo-Hubert Kappes Leo-Hubert Kappes
Reply | Threaded
Open this post in threaded view
|

SQL mittels Makro auf Schaltfläche legen

Hallo User,

ich hab hier ein Problem, bei dem ich nicht weiterkomme.

Ich habe einen funktionierenden SQL-Befehl, den ich mit Hilfe eines
Makros auf eine Schaltfläche in einem Formular legen möchte.

Hier mein Code hierzu:


Sub Fuett_anfuegen
DIM oSQL_Statement AS OBJECT ' das Objekt, das den SQL-Befehl ausführt
DIM stSql AS STRING          ' Text des eigentlichen SQL-Befehls
DIM oResult AS OBJECT        ' Ergebnis für executeQuery
DIM iResult AS INTEGER       ' Ergebnis für executeUpdate
stSql = "INSERT INTO ""tbl_Fuetterung_Uebergabe"" ( ""StockNr"",
""Datum"", ""Jahr_ID"", ""Futterart_ID"" SELECT
""tbl_StockGrunddaten"".""StockNr"", ""tab_Vorg_Fuet"".""Datum"",
""tab_Vorg_Fuet"".""Jahr_ID"", ""tab_Vorg_Fuet"".""Futterart_ID"" FROM
""tab_Vorg_Fuet"", ""tbl_Vorg_Jahr"", ""tbl_Vorg_Futterart"",
""tbl_StockGrunddaten"" WHERE ""tab_Vorg_Fuet"".""Jahr_ID"" =
""tbl_Vorg_Jahr"".""ID"" AND ""tab_Vorg_Fuet"".""Futterart_ID"" =
""tbl_Vorg_Futterart"".""ID"" AND ""tbl_StockGrunddaten"".""Marke"" =
TRUE AND ""tbl_StockGrunddaten"".""Abgangsjahr"" = 0;"
iResult = oSQL_Statement.executeQuery(stSql)
End Sub

Bei der Zeile: iResult ... erscheint die Fehlermeldung:
BASIC-Laufzeitfehler. Objektvariable nicht belegt.

Kann mir jemand sagen, was hier falsch ist?


MfG Leo-Hubert



--
Liste abmelden mit E-Mail an: [hidden email]
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/discuss/
Datenschutzerklärung: https://www.documentfoundation.org/privacy
Thomas Krumbein-3 Thomas Krumbein-3
Reply | Threaded
Open this post in threaded view
|

Re: SQL mittels Makro auf Schaltfläche legen

Hei Leo,

klar. Dein "oSQL_Statement" ist nicht definiert. Du hast zwar die
Variable definiert, das war es dann aber auch.

Irgendein Objekt musste der Varaiblen halt zuweisen - in der Regel ist
das soetwas wie:

"oSQL_Statement = oDBVerb.createStatement()"  'Statementobjekt erzeugen

wobei oDBVerb das Objekt der Datenbank-Verbindung ist - musst Du
natürlich auch noch erzeugen und definieren;)

VG

Thomas


Am 03.10.2019 um 12:12 schrieb Leo-Hubert Kappes:

> Hallo User,
>
> ich hab hier ein Problem, bei dem ich nicht weiterkomme.
>
> Ich habe einen funktionierenden SQL-Befehl, den ich mit Hilfe eines
> Makros auf eine Schaltfläche in einem Formular legen möchte.
>
> Hier mein Code hierzu:
>
>
> Sub Fuett_anfuegen
> DIM oSQL_Statement AS OBJECT ' das Objekt, das den SQL-Befehl ausführt
> DIM stSql AS STRING          ' Text des eigentlichen SQL-Befehls
> DIM oResult AS OBJECT        ' Ergebnis für executeQuery
> DIM iResult AS INTEGER       ' Ergebnis für executeUpdate
> stSql = "INSERT INTO ""tbl_Fuetterung_Uebergabe"" ( ""StockNr"",
> ""Datum"", ""Jahr_ID"", ""Futterart_ID"" SELECT
> ""tbl_StockGrunddaten"".""StockNr"", ""tab_Vorg_Fuet"".""Datum"",
> ""tab_Vorg_Fuet"".""Jahr_ID"", ""tab_Vorg_Fuet"".""Futterart_ID"" FROM
> ""tab_Vorg_Fuet"", ""tbl_Vorg_Jahr"", ""tbl_Vorg_Futterart"",
> ""tbl_StockGrunddaten"" WHERE ""tab_Vorg_Fuet"".""Jahr_ID"" =
> ""tbl_Vorg_Jahr"".""ID"" AND ""tab_Vorg_Fuet"".""Futterart_ID"" =
> ""tbl_Vorg_Futterart"".""ID"" AND ""tbl_StockGrunddaten"".""Marke"" =
> TRUE AND ""tbl_StockGrunddaten"".""Abgangsjahr"" = 0;"
> iResult = oSQL_Statement.executeQuery(stSql)
> End Sub
>
> Bei der Zeile: iResult ... erscheint die Fehlermeldung:
> BASIC-Laufzeitfehler. Objektvariable nicht belegt.
>
> Kann mir jemand sagen, was hier falsch ist?
>
>
> MfG Leo-Hubert
>
>
>

--
Liste abmelden mit E-Mail an: [hidden email]
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/discuss/
Datenschutzerklärung: https://www.documentfoundation.org/privacy
Leo-Hubert Kappes Leo-Hubert Kappes
Reply | Threaded
Open this post in threaded view
|

Re: SQL mittels Makro auf Schaltfläche legen

Am 03.10.19 um 12:26 schrieb Thomas Krumbein:
> wobei oDBVerb das Objekt der Datenbank-Verbindung ist - musst Du
> natürlich auch noch erzeugen und definieren


Uff!


Als absoluter SQL-Anfänger bin ich mit oben genannter "Erzeugung" der
Datenbank-Verbindung ehrlich gesagt überfordert.

Den Eintrag:

oSQL_Statement = oConnection.createStatement()


hatte ich schon aus der Anleitung von Base in mein Makro übernommen.

Leider kam da auch die Meldung: BASIC-Laufzeitfehler. Objektvariable
nicht belegt.

Dann hab ich das wieder entfernt, weil ich im Handbuch und im Internet
nichts gefunden hatte, wie das zu machen inst.


Kann mir da jemand noch mal Hilfestellung leisten?


MfG L-H



--
Liste abmelden mit E-Mail an: [hidden email]
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/discuss/
Datenschutzerklärung: https://www.documentfoundation.org/privacy
Thomas Krumbein-3 Thomas Krumbein-3
Reply | Threaded
Open this post in threaded view
|

Re: SQL mittels Makro auf Schaltfläche legen

Hei Leo,

> Kann mir da jemand noch mal Hilfestellung leisten?

ziemlich unmöglich, ohne zu wissen, welche Datenbank
(Datenbankmanagement-Programm) Du verwendest und wie Du Dich verbindest.

Der allgemeine Ratschlag:  Handbücher lesen.  Gerade für Base
(Datenbanken) gibt es ein sehr gutes und aktuelles Handbuch, das an sich
keine Fragen offen lässt.

Hier der Link: https://de.libreoffice.org/get-help/documentation/ - dort
dann unter "Base" _ kannst Du Dir als PDF oder *.odt runterladen.

Ist Basislektüre:)


Viele Grüße

Thomas


Am 03.10.2019 um 15:17 schrieb Leo-Hubert Kappes:

> Am 03.10.19 um 12:26 schrieb Thomas Krumbein:
>> wobei oDBVerb das Objekt der Datenbank-Verbindung ist - musst Du
>> natürlich auch noch erzeugen und definieren
>
>
> Uff!
>
>
> Als absoluter SQL-Anfänger bin ich mit oben genannter "Erzeugung" der
> Datenbank-Verbindung ehrlich gesagt überfordert.
>
> Den Eintrag:
>
> oSQL_Statement = oConnection.createStatement()
>
>
> hatte ich schon aus der Anleitung von Base in mein Makro übernommen.
>
> Leider kam da auch die Meldung: BASIC-Laufzeitfehler. Objektvariable
> nicht belegt.
>
> Dann hab ich das wieder entfernt, weil ich im Handbuch und im Internet
> nichts gefunden hatte, wie das zu machen inst.
>
>
> Kann mir da jemand noch mal Hilfestellung leisten?
>
>
> MfG L-H
>
>
>

--
Liste abmelden mit E-Mail an: [hidden email]
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/discuss/
Datenschutzerklärung: https://www.documentfoundation.org/privacy
Thomas Krumbein-3 Thomas Krumbein-3
Reply | Threaded
Open this post in threaded view
|

Re: SQL mittels Makro auf Schaltfläche legen - Ergänzung

In reply to this post by Leo-Hubert Kappes
Hei Leo,

> Kann mir da jemand noch mal Hilfestellung leisten?

ziemlich unmöglich, ohne zu wissen, welche Datenbank
(Datenbankmanagement-Programm) Du verwendest und wie Du Dich verbindest.

Der allgemeine Ratschlag:  Handbücher lesen.  Gerade für Base
(Datenbanken) gibt es ein sehr gutes und aktuelles Handbuch, das an sich
keine Fragen offen lässt.

Hier der Link: https://de.libreoffice.org/get-help/documentation/ - dort
dann unter "Base" _ kannst Du Dir als PDF oder *.odt runterladen.

Nachtrag:

das Verbindungsobjekt (hier oConnection) ist sicher in einer eigenem
Routine definiert. Such einfach mal im Handbuch nach diesem Begriff. Die
Variable ist dann global definiert, so dass sie jederzeit zur Verfügung
steht.



--
Liste abmelden mit E-Mail an: [hidden email]
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/discuss/
Datenschutzerklärung: https://www.documentfoundation.org/privacy
Gerhard Weydt Gerhard Weydt
Reply | Threaded
Open this post in threaded view
|

Re: SQL mittels Makro auf Schaltfläche legen - Ergänzung

Hallo Leo-Hubert (& Thomas),

Thomas hat im Grunde recht, dass das Lesen von Dokumentation
unerlässlich ist.
Aber ich bin mir nicht sicher, ob du mit einem Base-Dokument arbeitest
oder vielleicht mit einem Writer- oder Calc-Dokument (Draw und Impress
wäre genauso, aber das halte ich für eher unwahrscheinlich.
Im ersten Fall findest du im Base-Handbuch tatsächlich Beispiele zuhauf,
du kannst die connection entweder über die "DataSource" oder über ein
Formular (Stichwort "form") ermitteln, diese Begriffe finden sich in den
Beispielen nur wenige Zeilen vor der Zuweisung der connection.
Im zweiten Fall findest du allerdings nichts im Base-Handbuch, weil dort
immer von Base-Dokumenten ausgegangen wird. Für diesen Fall will ich dir
eine Hilfestellung andeuten.
Voraussetzung ist, soweit ich weiß, dass es ein Base-Dokument gibt, das
mit deiner Datenbank verbunden ist; wie man das anlegt, steht im
Base-Handbuch, das Dokument muss keine Formulardokumente oder sonstige
weitere Element enthalten (aber es lohnt sich sicher, da mal
anzuschauen, wie die Tabellen angezeigt werden, und dann ein bisschen
weiter zu schnuppern). Beim Erzeugen wirst du gefragt, ob das
Dokument/die Datenbank o.ä. angemeldet werden soll, es empfiehlt sich,
das zu bejahen, dann ist die Formulierung im folgenden Aufruf einfacher.
Du kannst dann die connection mit folgendem Aufruf
connection = connecterSource("xxx")
zuweisen, wobei xxx der Name des angemeldeten Dokuments (z.B.
"Fuetterung.odb", ich rate jetzt mal den Titel) ist. (Bei unangemeldetem
Dokument müsstest du den Speicherplatz in der internen Form beginnend
mit file:/// angeben, eine zusätzliche Hürde).

Das hier aufgerufene Makro stammt aus dem Buch von Bernard Marcelly und
Laurent Godard, ich habe mir nicht die Mühe gemacht, die Bezeichner zu
übersetzen und es optisch lesbarer aufzubereiten. Du musst es entweder
im Dokument, oder wenn du es öfters verwenden willst, irgendwo in
MeineMakros abspeichern.

'    Funktionen kopiert aus Marcelly/Godard:
Function ConnecterSource(nomSource As String, Optional nomUtilisateur As
String, Optional motDePasse As String) As Object
Dim maSource As Object, dbContexte As Object, demandePasse As Object
dbContexte = CreateUnoService("com.sun.star.sdb.DatabaseContext")
if dbContexte.hasByName(nomSource) then
maSource=dbContexte.getByName(nomSource)
if IsMissing(nomUtilisateur) then
' demander le mot de passe, si nécessaire
demandePasse = CreateUnoService("com.sun.star.sdb.InteractionHandler")
ConnecterSource = maSource.connectWithCompletion(demandePasse)
else ' nomUtilisateur imposé
if IsMissing(motDePasse) then motDePasse = ""
ConnecterSource = maSource.getConnection(nomUtilisateur, motDePasse)
end if
end if
End Function
Sub DeconnecterSource(maConnexion As Object)
maConnexion.close
maConnexion.dispose
End Sub

Wenn du zu Makros Fragen hast, die über den im knappen Kapitel dazu im
Handbuch Erste Schritte behandelten Umfang hinausgehen, kann ich neben
dem genannten Buch von Marcelly/Godard, das allerdings nur in
Französisch erhältlich ist, Thomas Krumbeins "Makro-Grundlagen"
empfehlen. Ich habe bei meinem Einstieg in LibreOffice aus einer
früheren Auflage ganz Wesentliches gelernt.

Wenn du immer noch Fragen hast, kannst du dich gerne noch einmal an mich
wenden, auch direkt. Als Base-Fan begrüße ich es immer, wenn jemand das
nutzt.

Gruß

Gerhard

Am 03.10.2019 um 15:47 schrieb Thomas Krumbein:

> Hei Leo,
>
>> Kann mir da jemand noch mal Hilfestellung leisten?
>
> ziemlich unmöglich, ohne zu wissen, welche Datenbank
> (Datenbankmanagement-Programm) Du verwendest und wie Du Dich verbindest.
>
> Der allgemeine Ratschlag:  Handbücher lesen.  Gerade für Base
> (Datenbanken) gibt es ein sehr gutes und aktuelles Handbuch, das an
> sich keine Fragen offen lässt.
>
> Hier der Link: https://de.libreoffice.org/get-help/documentation/ -
> dort dann unter "Base" _ kannst Du Dir als PDF oder *.odt runterladen.
>
> Nachtrag:
>
> das Verbindungsobjekt (hier oConnection) ist sicher in einer eigenem
> Routine definiert. Such einfach mal im Handbuch nach diesem Begriff.
> Die Variable ist dann global definiert, so dass sie jederzeit zur
> Verfügung steht.
>
>
>


--
Liste abmelden mit E-Mail an: [hidden email]
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/discuss/
Datenschutzerklärung: https://www.documentfoundation.org/privacy
Leo-Hubert Kappes Leo-Hubert Kappes
Reply | Threaded
Open this post in threaded view
|

Re: SQL mittels Makro auf Schaltfläche legen

In reply to this post by Leo-Hubert Kappes
Hallo an alle,

ich habe jetzt mal viel gelesen und getestet und komme (nicht ganz) zu
meinem gewünschten Ziel.

Folgende Variante funktioniert aus dem BASIC-Editor heraus, wenn ich den
Prozedurschritt ausführe:

Sub Fuett_anfuegen

DIM oDatasource AS OBJECT
DIM oConnection AS OBJECT
DIM oSQL_Statement AS OBJECT ' das Objekt, das den SQL-Befehl ausführt
DIM stSql AS STRING                    ' Text des eigentlichen SQL-Befehls
DIM oResult AS OBJECT                ' Ergebnis für executeQuery
DIM iResult AS INTEGER               ' Ergebnis für executeUpdate


oDatasource = thisDatabaseDocument.CurrentController
IF NOT (oDatasource.isConnected()) THEN oDatasource.connect()
oConnection = oDatasource.ActiveConnection()

oSQL_Statement = oConnection.createStatement() 'Statementobjekt erzeugen

stSql = "INSERT INTO ""tbl_Fuetterung_Uebergabe"" ( ""StockNr"",
""Datum"", ""Jahr_ID"", ""Futterart_ID"" ) SELECT
""tbl_StockGrunddaten"".""StockNr"", ""tab_Vorg_Fuet"".""Datum"",
""tab_Vorg_Fuet"".""Jahr_ID"", ""tab_Vorg_Fuet"".""Futterart_ID"" FROM
""tab_Vorg_Fuet"", ""tbl_Vorg_Jahr"", ""tbl_Vorg_Futterart"",
""tbl_StockGrunddaten"" WHERE ""tab_Vorg_Fuet"".""Jahr_ID"" =
""tbl_Vorg_Jahr"".""ID"" AND ""tab_Vorg_Fuet"".""Futterart_ID"" =
""tbl_Vorg_Futterart"".""ID"" AND ""tbl_StockGrunddaten"".""Marke"" =
TRUE AND ""tbl_StockGrunddaten"".""Abgangsjahr"" = 0;"

iResult = oSQL_Statement.executeUpdate(stSql) 'Anfügeabfrage ausführen.
End Sub

Aus dem Formular heraus funktioniert das Makro allerdings nicht !


Nun habe ich den Ablauf nach Anleitungen und Beispielen der Handbücher
so abgeändert, dass er aus dem Formular heraus funktionieren sollte.

Das sieht dann meiner Meinung nach so aus:

Sub Fuett_anfuegen

DIM oForm AS OBJECT

DIM oDatasource AS OBJECT
DIM oConnection AS OBJECT
DIM oSQL_Statement AS OBJECT ' das Objekt, das den SQL-Befehl ausführt
DIM stSql AS STRING          ' Text des eigentlichen SQL-Befehls
DIM oResult AS OBJECT        ' Ergebnis für executeQuery
DIM iResult AS INTEGER       ' Ergebnis für executeUpdate

oForm = thisComponent.Drawpage.Forms.getByName("MainForm")

oConnection = oForm.ActiveConnection()

oSQL_Statement = oConnection.createStatement() 'Statementobjekt erzeugen

stSql = "INSERT INTO ""tbl_Fuetterung_Uebergabe"" ( ""StockNr"",
""Datum"", ""Jahr_ID"", ""Futterart_ID"" ) SELECT
""tbl_StockGrunddaten"".""StockNr"", ""tab_Vorg_Fuet"".""Datum"",
""tab_Vorg_Fuet"".""Jahr_ID"", ""tab_Vorg_Fuet"".""Futterart_ID"" FROM
""tab_Vorg_Fuet"", ""tbl_Vorg_Jahr"", ""tbl_Vorg_Futterart"",
""tbl_StockGrunddaten"" WHERE ""tab_Vorg_Fuet"".""Jahr_ID"" =
""tbl_Vorg_Jahr"".""ID"" AND ""tab_Vorg_Fuet"".""Futterart_ID"" =
""tbl_Vorg_Futterart"".""ID"" AND ""tbl_StockGrunddaten"".""Marke"" =
TRUE AND ""tbl_StockGrunddaten"".""Abgangsjahr"" = 0;"

iResult = oSQL_Statement.executeUpdate(stSql) 'Anfügeabfrage ausführen.

End Sub

Allerdings bekomme ich hier bei der Zeile: oForm =
thisComponent.Drawpage.Forms.getByName("MainForm")

den

BASIC-Laufzeitfehler.
Eigenschaft oder Methode nicht gefunden: Drawpage.

Drawpage ist aber im Handbuch als Container der Formulare beschrieben
uns sollte vorhanden sein, wenn man aus einem Formular heraus das Makro
aktiviert.

Oder sehe ich da noch was falsch?

MfG L-H


--
Liste abmelden mit E-Mail an: [hidden email]
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/discuss/
Datenschutzerklärung: https://www.documentfoundation.org/privacy
Leo-Hubert Kappes Leo-Hubert Kappes
Reply | Threaded
Open this post in threaded view
|

Re: SQL mittels Makro auf Schaltfläche legen


Am 03.10.19 um 22:48 schrieb Leo-Hubert Kappes:
> Hallo an alle,
>
> ich habe jetzt mal viel gelesen und getestet und komme (nicht ganz) zu
> meinem gewünschten Ziel.
>

Noch ein (vielleicht notwendiger) Zusatz:

Ich arbeite mit einer eingebetteter HSQLDB


MfG L-H


--
Liste abmelden mit E-Mail an: [hidden email]
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/discuss/
Datenschutzerklärung: https://www.documentfoundation.org/privacy
Gerhard Weydt Gerhard Weydt
Reply | Threaded
Open this post in threaded view
|

Re: SQL mittels Makro auf Schaltfläche legen

In reply to this post by Leo-Hubert Kappes
Hallo Hubert-Leo,

zumindest scheint jetzt klar zu sein, dass du mit einem Base-Dokument
arbeitest.
Es hängt sehr davon ab, wo dein Makro aufgerufen wird. Das Base-Dokument
selbst kennt keine Drawpage, nur die einzelnen Formulardokumente
innerhalb eines Base-Dokuments kennen diese Variable.
Aus welchem Formulardokument rufst du das auf? Sind alle Variablen dort
durch das Select de formulars bekannt?

Gruß

Gerhard

Am 03.10.2019 um 22:48 schrieb Leo-Hubert Kappes:

> Hallo an alle,
>
> ich habe jetzt mal viel gelesen und getestet und komme (nicht ganz) zu
> meinem gewünschten Ziel.
>
> Folgende Variante funktioniert aus dem BASIC-Editor heraus, wenn ich
> den Prozedurschritt ausführe:
>
> Sub Fuett_anfuegen
>
> DIM oDatasource AS OBJECT
> DIM oConnection AS OBJECT
> DIM oSQL_Statement AS OBJECT ' das Objekt, das den SQL-Befehl ausführt
> DIM stSql AS STRING                    ' Text des eigentlichen
> SQL-Befehls
> DIM oResult AS OBJECT                ' Ergebnis für executeQuery
> DIM iResult AS INTEGER               ' Ergebnis für executeUpdate
>
>
> oDatasource = thisDatabaseDocument.CurrentController
> IF NOT (oDatasource.isConnected()) THEN oDatasource.connect()
> oConnection = oDatasource.ActiveConnection()
>
> oSQL_Statement = oConnection.createStatement() 'Statementobjekt erzeugen
>
> stSql = "INSERT INTO ""tbl_Fuetterung_Uebergabe"" ( ""StockNr"",
> ""Datum"", ""Jahr_ID"", ""Futterart_ID"" ) SELECT
> ""tbl_StockGrunddaten"".""StockNr"", ""tab_Vorg_Fuet"".""Datum"",
> ""tab_Vorg_Fuet"".""Jahr_ID"", ""tab_Vorg_Fuet"".""Futterart_ID"" FROM
> ""tab_Vorg_Fuet"", ""tbl_Vorg_Jahr"", ""tbl_Vorg_Futterart"",
> ""tbl_StockGrunddaten"" WHERE ""tab_Vorg_Fuet"".""Jahr_ID"" =
> ""tbl_Vorg_Jahr"".""ID"" AND ""tab_Vorg_Fuet"".""Futterart_ID"" =
> ""tbl_Vorg_Futterart"".""ID"" AND ""tbl_StockGrunddaten"".""Marke"" =
> TRUE AND ""tbl_StockGrunddaten"".""Abgangsjahr"" = 0;"
>
> iResult = oSQL_Statement.executeUpdate(stSql) 'Anfügeabfrage ausführen.
> End Sub
>
> Aus dem Formular heraus funktioniert das Makro allerdings nicht !
>
>
> Nun habe ich den Ablauf nach Anleitungen und Beispielen der Handbücher
> so abgeändert, dass er aus dem Formular heraus funktionieren sollte.
>
> Das sieht dann meiner Meinung nach so aus:
>
> Sub Fuett_anfuegen
>
> DIM oForm AS OBJECT
>
> DIM oDatasource AS OBJECT
> DIM oConnection AS OBJECT
> DIM oSQL_Statement AS OBJECT ' das Objekt, das den SQL-Befehl ausführt
> DIM stSql AS STRING          ' Text des eigentlichen SQL-Befehls
> DIM oResult AS OBJECT        ' Ergebnis für executeQuery
> DIM iResult AS INTEGER       ' Ergebnis für executeUpdate
>
> oForm = thisComponent.Drawpage.Forms.getByName("MainForm")
>
> oConnection = oForm.ActiveConnection()
>
> oSQL_Statement = oConnection.createStatement() 'Statementobjekt erzeugen
>
> stSql = "INSERT INTO ""tbl_Fuetterung_Uebergabe"" ( ""StockNr"",
> ""Datum"", ""Jahr_ID"", ""Futterart_ID"" ) SELECT
> ""tbl_StockGrunddaten"".""StockNr"", ""tab_Vorg_Fuet"".""Datum"",
> ""tab_Vorg_Fuet"".""Jahr_ID"", ""tab_Vorg_Fuet"".""Futterart_ID"" FROM
> ""tab_Vorg_Fuet"", ""tbl_Vorg_Jahr"", ""tbl_Vorg_Futterart"",
> ""tbl_StockGrunddaten"" WHERE ""tab_Vorg_Fuet"".""Jahr_ID"" =
> ""tbl_Vorg_Jahr"".""ID"" AND ""tab_Vorg_Fuet"".""Futterart_ID"" =
> ""tbl_Vorg_Futterart"".""ID"" AND ""tbl_StockGrunddaten"".""Marke"" =
> TRUE AND ""tbl_StockGrunddaten"".""Abgangsjahr"" = 0;"
>
> iResult = oSQL_Statement.executeUpdate(stSql) 'Anfügeabfrage ausführen.
>
> End Sub
>
> Allerdings bekomme ich hier bei der Zeile: oForm =
> thisComponent.Drawpage.Forms.getByName("MainForm")
>
> den
>
> BASIC-Laufzeitfehler.
> Eigenschaft oder Methode nicht gefunden: Drawpage.
>
> Drawpage ist aber im Handbuch als Container der Formulare beschrieben
> uns sollte vorhanden sein, wenn man aus einem Formular heraus das
> Makro aktiviert.
>
> Oder sehe ich da noch was falsch?
>
> MfG L-H
>
>


--
Liste abmelden mit E-Mail an: [hidden email]
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/discuss/
Datenschutzerklärung: https://www.documentfoundation.org/privacy
Leo-Hubert Kappes Leo-Hubert Kappes
Reply | Threaded
Open this post in threaded view
|

Re: SQL mittels Makro auf Schaltfläche legen

In reply to this post by Leo-Hubert Kappes
Hallo LOUser,

jetzt habe ich aus Versehen gerade einen Antwort-Post aus diesem Thread
gelöscht. Das tut mir Leid, wollte nur einen Teil des Inhalts löschen..

Jetzt ein nuer Versuch:

Wenn ich dieses Makro bei geöffnetem Forular über den Menüpunkt =>
Makros => ausführen starte, dann werden die Daten richtig übertragen,

wenn ich das Makro allerdings über einen Button, der sich auf dem
Formular befindet starte, dann passiert nichts.

Wo liegt denn da der Fehler?

MfG  L-H


> Sub Fuett_anfuegen
>
> DIM oForm AS OBJECT
>
> DIM oDatasource AS OBJECT
> DIM oConnection AS OBJECT
> DIM oSQL_Statement AS OBJECT ' das Objekt, das den SQL-Befehl ausführt
> DIM stSql AS STRING          ' Text des eigentlichen SQL-Befehls
> DIM oResult AS OBJECT        ' Ergebnis für executeQuery
> DIM iResult AS INTEGER       ' Ergebnis für executeUpdate
>
> oForm = thisComponent.Drawpage.Forms.getByName("MainForm")
>
> oConnection = oForm.ActiveConnection()
>
> oSQL_Statement = oConnection.createStatement() 'Statementobjekt erzeugen
>
> stSql = "INSERT INTO ""tbl_Fuetterung_Uebergabe"" ( ""StockNr"",
> ""Datum"", ""Jahr_ID"", ""Futterart_ID"" ) SELECT
> ""tbl_StockGrunddaten"".""StockNr"", ""tab_Vorg_Fuet"".""Datum"",
> ""tab_Vorg_Fuet"".""Jahr_ID"", ""tab_Vorg_Fuet"".""Futterart_ID"" FROM
> ""tab_Vorg_Fuet"", ""tbl_Vorg_Jahr"", ""tbl_Vorg_Futterart"",
> ""tbl_StockGrunddaten"" WHERE ""tab_Vorg_Fuet"".""Jahr_ID"" =
> ""tbl_Vorg_Jahr"".""ID"" AND ""tab_Vorg_Fuet"".""Futterart_ID"" =
> ""tbl_Vorg_Futterart"".""ID"" AND ""tbl_StockGrunddaten"".""Marke"" =
> TRUE AND ""tbl_StockGrunddaten"".""Abgangsjahr"" = 0;"
>
> iResult = oSQL_Statement.executeUpdate(stSql) 'Anfügeabfrage ausführen.
>
> End Sub
>
>

--
Liste abmelden mit E-Mail an: [hidden email]
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/discuss/
Datenschutzerklärung: https://www.documentfoundation.org/privacy
Leo-Hubert Kappes Leo-Hubert Kappes
Reply | Threaded
Open this post in threaded view
|

Re: SQL mittels Makro auf Schaltfläche legen

Hallo LO-User,

der Fall ist gelöst und ich möchte mich bei euch für die Mühe, die ich
euch gemacht habe gleich mal entschuldigen.

Das u.a. Makro funktioniert so wie es da steht ohne Probleme von einem
Button im geöffneten Formular aus, wenn man die Aktion nur in das
richtige Feld einträgt. Ich hatte nämlich die Funktion versehentlich in
das Feld "Taste gedrückt" eingetragen!

Wenn ich die Funktion in das Feld "Maustaste gedrückt" eintrage
funktioniert alles einwandfrei.

Vielen Dank noch mal für die Hilfe.


MfG L-H


>> Sub Fuett_anfuegen
>>
>> DIM oForm AS OBJECT
>>
>> DIM oDatasource AS OBJECT
>> DIM oConnection AS OBJECT
>> DIM oSQL_Statement AS OBJECT ' das Objekt, das den SQL-Befehl ausführt
>> DIM stSql AS STRING          ' Text des eigentlichen SQL-Befehls
>> DIM oResult AS OBJECT        ' Ergebnis für executeQuery
>> DIM iResult AS INTEGER       ' Ergebnis für executeUpdate
>>
>> oForm = thisComponent.Drawpage.Forms.getByName("MainForm")
>>
>> oConnection = oForm.ActiveConnection()
>>
>> oSQL_Statement = oConnection.createStatement() 'Statementobjekt erzeugen
>>
>> stSql = "INSERT INTO ""tbl_Fuetterung_Uebergabe"" ( ""StockNr"",
>> ""Datum"", ""Jahr_ID"", ""Futterart_ID"" ) SELECT
>> ""tbl_StockGrunddaten"".""StockNr"", ""tab_Vorg_Fuet"".""Datum"",
>> ""tab_Vorg_Fuet"".""Jahr_ID"", ""tab_Vorg_Fuet"".""Futterart_ID""
>> FROM ""tab_Vorg_Fuet"", ""tbl_Vorg_Jahr"", ""tbl_Vorg_Futterart"",
>> ""tbl_StockGrunddaten"" WHERE ""tab_Vorg_Fuet"".""Jahr_ID"" =
>> ""tbl_Vorg_Jahr"".""ID"" AND ""tab_Vorg_Fuet"".""Futterart_ID"" =
>> ""tbl_Vorg_Futterart"".""ID"" AND ""tbl_StockGrunddaten"".""Marke"" =
>> TRUE AND ""tbl_StockGrunddaten"".""Abgangsjahr"" = 0;"
>>
>> iResult = oSQL_Statement.executeUpdate(stSql) 'Anfügeabfrage ausführen.
>>
>> End Sub
>>
>>
>

--
Liste abmelden mit E-Mail an: [hidden email]
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/discuss/
Datenschutzerklärung: https://www.documentfoundation.org/privacy