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


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

2020-12-25 Diskussionsfäden 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


Gelöst: [de-users] Letzte Zelle mit Inhalt ungleich ""

2020-12-25 Diskussionsfäden Bernd Obermayr
Am 20.12.20 um 15:55 schrieb Bernd Obermayr:
>  Die Funktionen zum ermitteln der letzten Zelle finden nur die erste
> Zelle die wirklich leer ist (UsedRange)
> Ich will aber die letzte Zelle deren angezeigter Inhalt nicht "" ist.
> Weil da z.B eine Formel drinsteht:
> =WENN(ISTZAHL(C63);LOG(2)/LOG(M63);"")
> 
> 
> Hat da jemand eine elegante Lösung?
> 

Hab genau das passende Werkzeug gefunden
com.sun.star.sheet.GeneralFunction.COUNTNUMS
Gibt die Anzahl der Zellen, die eine Zahl anzeigen, zurück

Weil in dem speziellen Fall wirklich nur Nummern oder "" in den Zellen
angezeigt werden,
ist das für mich die Lösung

Wenn auch text dort angezeigt wird ist wohl die Lösung in meiner letzten
Mail gefragt.

oSelektion = oSheet.getCellRangeByPosition(1,0,1,2000)
CountRows=oSelektion.computeFunction(com.sun.star.sheet.GeneralFunction.COUNTNUMS)

Aus der Doku: COUNTNUMS numerical values are counted.
Siehe


-- 
Gruss
  Bernd

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