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