🙏 Helfen Sie jetzt mit, unser LibreOffice Forum zu erhalten! 🙏
Mit Ihrer Spende sichern Sie den Fortbestand, den Ausbau und die laufenden Kosten dieses Forums. 🌱

🍀 Jeder Beitrag zählt – vielen Dank für Ihre Unterstützung!🍀

❤️ DANKE >> << DANKE ❤️

>> Dank Ihrer Unterstützung -> Keine Werbung für alle registrierten LibreOffice-Forum User! <<
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗

[Gelöst] Makro Firebird Beliebige SQL-Kommandos speichern und bei Bedarf ausführen

Base ermöglicht es Ihnen, Ihre Daten in einer Datenbank direkt mit LibreOffice zu bearbeiten.
Antworten
malt14
Beiträge: 125
Registriert: Fr 7. Nov 2014, 06:21

[Gelöst] Makro Firebird Beliebige SQL-Kommandos speichern und bei Bedarf ausführen

Beitrag von malt14 » So 28. Aug 2022, 19:15

Beispiel_InsertUpdateDelete_SQL.odb

Guten Tag,

das Makro zum Ausführen von wiederkehrenden SQL Befehlen ist sehr nützlich und zeitsparend.

In Firebird funktionieren bei mir von den folgenden Befehlen mit dem Makro nur die beiden "update" enthaltenden. Die anderen führen zu BASIC-Laufzeitfehlern. In "SQL ausführen" funktionieren diese Befehle.
Beispiel_InsertUpdateDelete_SQL_Firebird.zip
(13.76 KiB) 148-mal heruntergeladen

Code: Alles auswählen

UPDATE "Personen" SET "Klasse" = "Klasse" +1
ALTER TABLE "test"  ALTER "ID" RESTART WITH 2
CREATE OR ALTER TRIGGER BEFORE_IN_UP_NAME FOR "test"ACTIVE BEFORE INSERT OR UPDATE POSITION 0AS BEGIN NEW."cts" = CURRENT_TIMESTAMP;END;
ALTER TABLE "test" ALTER COLUMN "ts" SET DEFAULT CURRENT_TIMESTAMP
execute block as  begin  update "test" SET "d" = "d" +1; update "test" SET "d2" = "d2" +1; update "test" SET "d3" = "d3" +1; end


Grüße
Malt

Version: 7.3.5.2 (x64) / LibreOffice Community
OS: Windows 10.0 Build 22000
Zuletzt geändert von malt14 am Mo 29. Aug 2022, 06:24, insgesamt 2-mal geändert.

RobertG
* LO-Experte *
Beiträge: 2884
Registriert: Sa 19. Mai 2012, 17:37
Kontaktdaten:

Re: Makro Firebird Beliebige SQL-Kommandos speichern und bei Bedarf ausführen

Beitrag von RobertG » So 28. Aug 2022, 20:46

Hallo Malt,

ich habe jetzt laufen lassen.

Wenn ich das über Extras → SQL laufen lasse, dann kommt da mit

Code: Alles auswählen

2: at /home/buildslave/source/libo-core/connectivity/source/drivers/firebird/StatementCommonBase.cxx:459
eine undefinierbare Statusmeldung. Das bringt executeUpdate durcheinander. Wie für den Normalnutzer auch wird so etwas als Fehlermeldung angesehen, auch wenn der Code verarbeitet wird.

Außerdem gilt für executeUpdate, dass es gedacht ist für INSERT, UPDATE und DELETE (siehe auch https://api.libreoffice.org/docs/idl/re ... ement.html)

Versuche alternativ das Makro mit executeQuery ablaufen zu lassen. Dann läuft es durch. Ob die Änderungen aber vollzogen werden habe ich nicht getestet. Und weiter ist es möglich, auch mit einem "execute" das Ganze ablaufen zu lassen.

Da Firebird immer noch nicht richtig mit der GUI zusammenläuft bleibt bei so etwas nur das Testen. Ich habe so ein Problem einmal damit behoben, dass ich vor der Ausführung des executeUpdate einfach bei einer For … NEXT -Schleife zum

Code: Alles auswählen

"ALTER TABLE """+TabellenPK(i)+""" ALTER ""ID"" RESTART WITH 0"

Code: Alles auswählen

On Error Resume Next
eingebaut habe. Dann lief die Schleife problemlos durch alle Tabellen und ignorierte die Rückmeldung.

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

malt14
Beiträge: 125
Registriert: Fr 7. Nov 2014, 06:21

Re: Makro Firebird Beliebige SQL-Kommandos speichern und bei Bedarf ausführen

Beitrag von malt14 » Mo 29. Aug 2022, 06:22

Guten Tag Robert,

Dank für die Informationen.

Du hattest Recht. Die Makros enden zwar mit einer Anzeige "BASIC-Laufzeitfehler", sie werden aber ausgeführt. Der Code wird korrekt verarbeitet.
Das Makro funktioniert also auch für SQLs, die "Alter" enhalten.

Grüße
Malt

malt14
Beiträge: 125
Registriert: Fr 7. Nov 2014, 06:21

Re: [Gelöst] Makro Firebird Beliebige SQL-Kommandos speichern und bei Bedarf ausführen

Beitrag von malt14 » Mo 11. Nov 2024, 07:14

Guten Tag,

Robert stellte das nützliche Makro zum SQL-Kommandos speichern und bei Bedarf ausführen bereit:

Code: Alles auswählen

REM  *****  BASIC  *****

SUB ChangeData(oEvent AS OBJECT)
	DIM oConnection AS OBJECT
	DIM oForm AS OBJECT
	DIM stSql AS STRING
	DIM oSql_Statement AS OBJECT
	DIM inValue AS INTEGER
	oForm = oEvent.Source.Model.Parent
	oConnection = oForm.activeConnection()
	stSQL = oForm.getString(2)
	inValue = MsgBox("Soll der SQL-Code" & CHR(13) & stSQL & CHR(13) & "ausgeführt werden?", 20, "SQL-Code ausführen")
	IF inValue = 6 THEN
		oSQL_Statement = oConnection.createStatement()
		oSQL_Statement.executeUpdate(stSql)
	END IF
END SUB
Dank dafür!

Um über die Ausführung informiert zu werden, ergänzte ChatGPT 4o mini das Makro:

Code: Alles auswählen

REM  *****  BASIC  *****

SUB ChangeData(oEvent AS OBJECT)
    DIM oConnection AS OBJECT
    DIM oForm AS OBJECT
    DIM stSQL AS STRING
    DIM oSql_Statement AS OBJECT
    DIM inValue AS INTEGER
    DIM result AS INTEGER ' Variable zur Speicherung der Rückmeldung der SQL-Ausführung
    
    ' Zugriff auf das Formular und die aktive Verbindung
    oForm = oEvent.Source.Model.Parent
    oConnection = oForm.activeConnection()
    
    ' SQL-Text aus dem Formular lesen
    stSQL = oForm.getString(2)
    
    ' Bestätigung vom Benutzer einholen, ob der SQL-Code ausgeführt werden soll
    inValue = MsgBox("Soll der SQL-Code" & CHR(13) & stSQL & CHR(13) & "ausgeführt werden?", 20, "SQL-Code ausführen")
    
    ' Wenn der Benutzer 'Ja' auswählt (6 = Ja), SQL ausführen
    IF inValue = 6 THEN
        oSql_Statement = oConnection.createStatement()
        
        ' SQL-Befehl ausführen und die Anzahl der betroffenen Zeilen speichern
        result = oSql_Statement.executeUpdate(stSQL)
        
        ' Rückmeldung in einer MessageBox anzeigen (z.B. "4 rows deleted")
        MsgBox(CStr(result) & " rows affected.", 64, "SQL-Ausführung abgeschlossen")
    END IF
END SUB
Grüße
Malt

Version: 24.8.2.1 (X86_64) Firebird
OS: Windows 11 X86_64 (10.0 build 22631)


An alle, die das LibreOffice-Forum gern nutzen und unterstützen wollen:


Bitte helfen Sie uns mit 7 Euro pro Monat.
Durch Ihren Beitrag tragen Sie dazu bei, unsere laufenden Kosten für die kommenden Monate zu decken.
Unkompliziert per Kreditkarte oder PayPal.
Als ein kleines Dankeschön werden Sie im LO-Forum als SUPPORTER gekennzeichnet.



Antworten