Re:  Re: [de-users] Frage zu Verwendung von vorbereiteten Abfragen in UnoService RowSet

2020-12-26 Diskussionsfäden Stefan Deutsch

Hallo Gerhard,

danke nochmal, jetzt tut mein Makro, wie es soll. Hab solange geknobelt,
was die Objekte und Methoden können, dass mir die simpelste Methode
schlicht entfallen ist .

Einen Guten Rutsch euch allen!

Stefan

Am 26.12.2020 um 01:29 schrieb Gerhard Weydt:

Hallo Stefan,

in vielen (oder sehr vielen) Fällen dürfte das Zusammensetzen des
SQL-Befehls aus Konstanten und Variablen die beste Wahl sein, wenn man
das einmal pro Programmaufruf verwendet, ist es tatsächlich die
günstigste Variante. Und wenn das deine momentane Aufgabe erledigt,
ist das ja gut so.
Wenn man einen solchen Zugriff z.B. in einer Schleife x-mal braucht
für jeweils andere Parameter, dann ist die Version mit Parametern und
Prepare sinnvoll, weil effektiver. Ich bin mir nicht sicher, ob ich
das selbst schon mal in LibreOffice verwendet habe, anderswo mit
Sicherheit, aber wenn das im Base-Handbuch sogar beschrieben ist, hat
Robert das garantiert getestet. Wenn das bei dir nicht funktioniert,
müsste man dem ggf. auf den Grund gehen. Ich will das jetzt auch nicht
ins Blaue hinein weitertreiben, aber wenn das wieder aktuell wird,
melde dich wieder.

Viele Grüße
Gerhard

Am 25.12.2020 um 23:23 schrieb Stefan Deutsch:

Hi Gerhard,Mein Problem war, dass das rowset mit dem prepare
scheinbar nichts angefangen kann und als command den SQL-Befehl mit
Platzhalter auszuführen scheint. Wenn ich anstelle des Platzhalters
einen festen Wert eingefügt habe, hat er sich wie gewünscht
verhalten. Auf die Idee, einfach mitmeinen SQL-Befehl zu bauen, war
ich noch nicht gekommen. Danke!Viele Grüße Stefan--Diese Nachricht
wurde von meinem Android Mobiltelefon mitWEB.DEMail gesendet.
Am 25.12.20, 19:25 schrieb Gerhard
weydtgerhard.we...@t-online.de:Hallo Stefan, was stellst du dir denn
vor, was noch einfacher sein sollte als das in deinem Beispiel
verwendete Vorgehen? Ich wüsste nur noch die Möglichkeit, den
SQL-Befehl per Code zusammenzusetzen, also etwas wie:stSQLRowSet =
"SELECT * FROM ""tab_Sub_Kat_1"" WHERE""Sub_Kat_Fremd_ID"" =
"deineVariabeFürDieIdwobei dann natürlich kein Prepare mehr nötig
ist.Das ist kürzer zu schreiben, wenn du das nur einmal (oder wenige
Male) brauchst, wenn die SQL-Anweisung in einer Schleife öfters mit
unterschiedlichen IDs ausgeführt wird, ist die Variante mit Prepare
effektiver. Viele GrüßeGerhard Am 25.12.2020 um 16:04 schrieb Stefan
Deutsch:Hallo zusammen,ich hab mal wieder ein kleines Problem, bei
dem ich nicht weiter komme.Ich möchte in meinem Makro unten dem
erstellten UnoService RowSet einCommand übergeben, dass mit
Platzhaltern ausgestattet ist, die ichvorher befülle. Geht das
überhaupt? Oder geht nur der Weg, der imHandbuch S. 431 für das
Arbeiten mit Platzhaltern beschrieben ist?Sub SubKat1_loeschenREM
Verbindung zum FormularoForm
=thisComponent.drawpage.forms.getByName("frm_Kategorie").getByName("frm_Subkategorie1")
oConnection = oForm.activeConnection()stDataSourceName =
ThisDatabaseDocument.TitlestDataSourceName = Left(stDataSourceName,
len(stDataSourceName)-4)iRow =
oForm.getByName("tabCtrl_SubKat1").RowSet.getRowotxtField
=oForm.parent.getByName("tabCtrl_Kategorie").getByName("txtField_KatID")iEintrag
= otxtField.getCurrentValue()REM SQL-Befehl vorbereitenstSQLRowSet =
"SELECT * FROM ""tab_Sub_Kat_1"" WHERE""Sub_Kat_Fremd_ID"" =
?"oSQLRowSet =
oConnection.prepareStatement(stSQLRowSet)oSQLRowSet.setInt(1,
iEintrag)REM RowSet-Objekt erstellenoRowSet =
createUnoService("com.sun.star.sdbc.RowSet")with
oRowSet.DataSourceName = stDataSourceName.Command =
stSQLRowSet.ResultSetConcurrency
=com.sun.star.sdbc.ResultSetConcurrency.UPDATABLE.ResultSetType =
com.sun.star.sdbc.ResultSetType.SCROLL_SENSITIVE.execute()End WithREM
Löschen der
ZeileoRowSet.absolute(iRow)oRowSet.deleteRowoForm.reloadEnd SubViele
Grüße und frohe Weihnachten euch allen!Stefan Deutsch -- Liste
abmelden mit E-Mail an:
users+unsubscribe@de.libreoffice.orgProbleme?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








--
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:  Re: [de-users] Frage zu Verwendung von vorbereiteten Abfragen in UnoService RowSet

2020-12-25 Diskussionsfäden Gerhard Weydt

Hallo Stefan,

in vielen (oder sehr vielen) Fällen dürfte das Zusammensetzen des 
SQL-Befehls aus Konstanten und Variablen die beste Wahl sein, wenn man 
das einmal pro Programmaufruf verwendet, ist es tatsächlich die 
günstigste Variante. Und wenn das deine momentane Aufgabe erledigt, ist 
das ja gut so.
Wenn man einen solchen Zugriff z.B. in einer Schleife x-mal braucht für 
jeweils andere Parameter, dann ist die Version mit Parametern und 
Prepare sinnvoll, weil effektiver. Ich bin mir nicht sicher, ob ich das 
selbst schon mal in LibreOffice verwendet habe, anderswo mit Sicherheit, 
aber wenn das im Base-Handbuch sogar beschrieben ist, hat Robert das 
garantiert getestet. Wenn das bei dir nicht funktioniert, müsste man dem 
ggf. auf den Grund gehen. Ich will das jetzt auch nicht ins Blaue hinein 
weitertreiben, aber wenn das wieder aktuell wird, melde dich wieder.


Viele Grüße
Gerhard

Am 25.12.2020 um 23:23 schrieb Stefan Deutsch:

Hi Gerhard,Mein Problem war, dass das rowset mit dem prepare scheinbar nichts 
angefangen kann und als command den SQL-Befehl mit Platzhalter auszuführen 
scheint. Wenn ich anstelle des Platzhalters einen festen Wert eingefügt habe, 
hat er sich wie gewünscht verhalten. Auf die Idee, einfach mitmeinen SQL-Befehl 
zu bauen, war ich noch nicht gekommen. Danke!Viele Grüße Stefan--Diese 
Nachricht wurde von meinem Android Mobiltelefon mitWEB.DEMail gesendet.
Am 25.12.20, 19:25 schrieb Gerhard weydtgerhard.we...@t-online.de:Hallo Stefan, was stellst du dir denn vor, was noch einfacher sein sollte als das in deinem Beispiel verwendete Vorgehen? Ich wüsste nur noch die Möglichkeit, den SQL-Befehl 
per Code zusammenzusetzen, also etwas wie:stSQLRowSet = "SELECT * FROM ""tab_Sub_Kat_1"" WHERE""Sub_Kat_Fremd_ID"" = "deineVariabeFürDieIdwobei dann natürlich kein Prepare mehr nötig 
ist.Das ist kürzer zu schreiben, wenn du das nur einmal (oder wenige Male) brauchst, wenn die SQL-Anweisung in einer Schleife öfters mit unterschiedlichen IDs ausgeführt wird, ist die Variante mit Prepare effektiver. Viele GrüßeGerhard Am 
25.12.2020 um 16:04 schrieb Stefan Deutsch:Hallo zusammen,ich hab mal wieder ein kleines Problem, bei dem ich nicht weiter komme.Ich möchte in meinem Makro unten dem erstellten UnoService RowSet einCommand übergeben, dass mit Platzhaltern 
ausgestattet ist, die ichvorher befülle. Geht das überhaupt? Oder geht nur der Weg, der imHandbuch S. 431 für das Arbeiten mit Platzhaltern beschrieben ist?Sub SubKat1_loeschenREM Verbindung zum FormularoForm 
=thisComponent.drawpage.forms.getByName("frm_Kategorie").getByName("frm_Subkategorie1") oConnection = oForm.activeConnection()stDataSourceName = ThisDatabaseDocument.TitlestDataSourceName = Left(stDataSourceName, 
len(stDataSourceName)-4)iRow = oForm.getByName("tabCtrl_SubKat1").RowSet.getRowotxtField =oForm.parent.getByName("tabCtrl_Kategorie").getByName("txtField_KatID")iEintrag = otxtField.getCurrentValue()REM 
SQL-Befehl vorbereitenstSQLRowSet = "SELECT * FROM ""tab_Sub_Kat_1"" WHERE""Sub_Kat_Fremd_ID"" = ?"oSQLRowSet = oConnection.prepareStatement(stSQLRowSet)oSQLRowSet.setInt(1, iEintrag)REM 
RowSet-Objekt erstellenoRowSet = createUnoService("com.sun.star.sdbc.RowSet")with oRowSet.DataSourceName = stDataSourceName.Command = stSQLRowSet.ResultSetConcurrency 
=com.sun.star.sdbc.ResultSetConcurrency.UPDATABLE.ResultSetType = com.sun.star.sdbc.ResultSetType.SCROLL_SENSITIVE.execute()End WithREM Löschen der ZeileoRowSet.absolute(iRow)oRowSet.deleteRowoForm.reloadEnd SubViele Grüße und frohe 
Weihnachten euch allen!Stefan Deutsch  -- Liste abmelden mit E-Mail an: users+unsubscribe@de.libreoffice.orgProbleme?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






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


Aw: Re: [de-users] Frage zu Verwendung von vorbereiteten Abfragen in UnoService RowSet

2020-12-25 Diskussionsfäden Stefan Deutsch
Hi Gerhard,Mein Problem war, dass das rowset mit dem prepare scheinbar nichts 
angefangen kann und als command den SQL-Befehl mit Platzhalter auszuführen 
scheint. Wenn ich anstelle des Platzhalters einen festen Wert eingefügt habe, 
hat er sich wie gewünscht verhalten. Auf die Idee, einfach mitmeinen SQL-Befehl 
zu bauen, war ich noch nicht gekommen. Danke!Viele Grüße Stefan--Diese 
Nachricht wurde von meinem Android Mobiltelefon mitWEB.DEMail gesendet.
Am 25.12.20, 19:25 schrieb Gerhard weydtgerhard.we...@t-online.de:Hallo Stefan, 
was stellst du dir denn vor, was noch einfacher sein sollte als das in deinem 
Beispiel verwendete Vorgehen? Ich wüsste nur noch die Möglichkeit, den 
SQL-Befehl per Code zusammenzusetzen, also etwas wie:stSQLRowSet = "SELECT * 
FROM ""tab_Sub_Kat_1"" WHERE""Sub_Kat_Fremd_ID"" = "deineVariabeFürDieIdwobei 
dann natürlich kein Prepare mehr nötig ist.Das ist kürzer zu schreiben, wenn du 
das nur einmal (oder wenige Male) brauchst, wenn die SQL-Anweisung in einer 
Schleife öfters mit unterschiedlichen IDs ausgeführt wird, ist die Variante mit 
Prepare effektiver. Viele GrüßeGerhard Am 25.12.2020 um 16:04 schrieb Stefan 
Deutsch:Hallo zusammen,ich hab mal wieder ein kleines Problem, bei dem ich 
nicht weiter komme.Ich möchte in meinem Makro unten dem erstellten UnoService 
RowSet einCommand übergeben, dass mit Platzhaltern ausgestattet ist, die 
ichvorher befülle. Geht das überhaupt? Oder geht nur der Weg, der imHandbuch S. 
431 für das Arbeiten mit Platzhaltern beschrieben ist?Sub SubKat1_loeschenREM 
Verbindung zum FormularoForm 
=thisComponent.drawpage.forms.getByName("frm_Kategorie").getByName("frm_Subkategorie1")
 oConnection = oForm.activeConnection()stDataSourceName = 
ThisDatabaseDocument.TitlestDataSourceName = Left(stDataSourceName, 
len(stDataSourceName)-4)iRow = 
oForm.getByName("tabCtrl_SubKat1").RowSet.getRowotxtField 
=oForm.parent.getByName("tabCtrl_Kategorie").getByName("txtField_KatID")iEintrag
 = otxtField.getCurrentValue()REM SQL-Befehl vorbereitenstSQLRowSet = "SELECT * 
FROM ""tab_Sub_Kat_1"" WHERE""Sub_Kat_Fremd_ID"" = ?"oSQLRowSet = 
oConnection.prepareStatement(stSQLRowSet)oSQLRowSet.setInt(1, iEintrag)REM 
RowSet-Objekt erstellenoRowSet = 
createUnoService("com.sun.star.sdbc.RowSet")with oRowSet.DataSourceName = 
stDataSourceName.Command = stSQLRowSet.ResultSetConcurrency 
=com.sun.star.sdbc.ResultSetConcurrency.UPDATABLE.ResultSetType = 
com.sun.star.sdbc.ResultSetType.SCROLL_SENSITIVE.execute()End WithREM Löschen 
der ZeileoRowSet.absolute(iRow)oRowSet.deleteRowoForm.reloadEnd SubViele Grüße 
und frohe Weihnachten euch allen!Stefan Deutsch  -- Liste abmelden mit E-Mail 
an: 
users+unsubscribe@de.libreoffice.orgProbleme?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
 


-- 
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] Frage zu Verwendung von vorbereiteten Abfragen in UnoService RowSet

2020-12-25 Diskussionsfäden Gerhard Weydt

Hallo Stefan,

was stellst du dir denn vor, was noch einfacher sein sollte als das in 
deinem Beispiel verwendete Vorgehen? Ich wüsste nur noch die 
Möglichkeit, den SQL-Befehl per Code zusammenzusetzen, also etwas wie:

stSQLRowSet = "SELECT * FROM ""tab_Sub_Kat_1"" WHERE
""Sub_Kat_Fremd_ID"" = " & deineVariabeFürDieId
wobei dann natürlich kein Prepare mehr nötig ist.
Das ist kürzer zu schreiben, wenn du das nur einmal (oder wenige Male) 
brauchst, wenn die SQL-Anweisung in einer Schleife öfters mit 
unterschiedlichen IDs ausgeführt wird, ist die Variante mit Prepare 
effektiver.


Viele Grüße
Gerhard

Am 25.12.2020 um 16:04 schrieb Stefan Deutsch:

Hallo zusammen,

ich hab mal wieder ein kleines Problem, bei dem ich nicht weiter komme.

Ich möchte in meinem Makro unten dem erstellten UnoService RowSet ein
Command übergeben, dass mit Platzhaltern ausgestattet ist, die ich
vorher befülle. Geht das überhaupt? Oder geht nur der Weg, der im
Handbuch S. 431 für das Arbeiten mit Platzhaltern beschrieben ist?

Sub SubKat1_loeschen

REM Verbindung zum Formular
    oForm =
thisComponent.drawpage.forms.getByName("frm_Kategorie").getByName("frm_Subkategorie1") 


    oConnection = oForm.activeConnection()

    stDataSourceName = ThisDatabaseDocument.Title
    stDataSourceName = Left(stDataSourceName, len(stDataSourceName)-4)

    iRow = oForm.getByName("tabCtrl_SubKat1").RowSet.getRow

    otxtField =
oForm.parent.getByName("tabCtrl_Kategorie").getByName("txtField_KatID")
    iEintrag = otxtField.getCurrentValue()

REM SQL-Befehl vorbereiten
    stSQLRowSet = "SELECT * FROM ""tab_Sub_Kat_1"" WHERE
""Sub_Kat_Fremd_ID"" = ?"
    oSQLRowSet = oConnection.prepareStatement(stSQLRowSet)
    oSQLRowSet.setInt(1, iEintrag)

REM RowSet-Objekt erstellen
    oRowSet = createUnoService("com.sun.star.sdbc.RowSet")
    with oRowSet
        .DataSourceName = stDataSourceName
        .Command = stSQLRowSet
        .ResultSetConcurrency =
com.sun.star.sdbc.ResultSetConcurrency.UPDATABLE
        .ResultSetType = com.sun.star.sdbc.ResultSetType.SCROLL_SENSITIVE
        .execute()
    End With

REM Löschen der Zeile
    oRowSet.absolute(iRow)
    oRowSet.deleteRow

oForm.reload
End Sub

Viele Grüße und frohe Weihnachten euch allen!

Stefan Deutsch





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