BITTE helfen Sie uns HEUTE mit einer SPENDE
Helfen Sie das LibreOffice Forum zu erhalten!

❤️ DANKE >><< DANKE ❤️

> KEINE WERBUNG FÜR REGISTRIERTE BENUTZER!<
Ihre Spende wird für die Deckung der laufenden Kosten sowie den Erhalt und Ausbau 🌱 des LibreOffice Forums verwendet.
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗

Probleme mit DB-Update aus Makro nach Konvertierung in eine MySQL-DB

Base ermöglicht es Ihnen, Ihre Daten in einer Datenbank direkt mit LibreOffice zu bearbeiten.
jh56
Beiträge: 23
Registriert: Fr 16. Mär 2018, 11:17

Probleme mit DB-Update aus Makro nach Konvertierung in eine MySQL-DB

Beitrag von jh56 » Mi 3. Jul 2019, 08:56

Hallo,
ich habe eine eingebette HSQL-DB konvertiert nach MySQL und will sie weiter als Libredatenbank bearbeiten.
Inzwischen funktioniert fast alles:
  • Bearbeitung über Formulare
  • Lesen von Daten miitels Makros
Was nicht läuft ist ein Datenbankupdate aus einem Makro heraus.
Ich benutze hierzu mehrere Routinen zum Aufbau der Verbindung, holen der Altdaten und dann zum Update.
Es kommt keine Fehlermeldung. Beim Neuaufruf des Hauptformulares sind die Daten allerdings nicht verändert.

hier der Code und der generierte SQL-String:

Code: Alles auswählen

Sub verarbeite_Monat(oForm as Object)

	DIM SQL_Anweisung AS OBJECT
	DIM Abfrageergebnis AS OBJECT
	DIM sql_str as string
	DIM erg as Boolean
	DIM monatalt as Integer


	verbinde_DB	
	read_Defaults	
		'lese Datensatz aud Defaults und aktualisiere Monat
	monatalt = monat

		' Auslesen des neuen Monatzwertes und Dialog schließen 
	monat = Odialog1.getControl("MonatNeu").Value	
	Odialog1.endexecute()
	'Update Defaults-Monat
	sql_str = "Update "  +CHR(34)+ "Defaults" +CHR(34) + " set " +CHR(34)+ "Selmon" +CHR(34) + " =  '" + monat
	sql_str = sql_str + "' " +  " where "   +CHR(34)+ "ID" +CHR(34) + " = '" + ID +"';"
	SQL_Anweisung = Verbindung.createStatement()
 	SQL_Anweisung.executeQuery(Sql_str)
end sub
Hier die Ergebnisse der Debug- überwachung
  • Sql_str = "Update "Defaults" set "Selmon" = '6' where "ID" = '1';"
  • Verbindung: Typ com.sun.star.drivers.OCConnectionWrapper
  • SQL_Anweisung Typ com.sun.star.OStatement
Kann mir jemand helfen?
Mit HSQLDB läuft das ganze. Ich benutze den selben Formalismus zum Lesen aus der DB, wo es auch klappt, so dass ich keine Ideen mehr habe.

Gruß und Danke für eine hilfreiche Antwort

Jürgen

RobertG
Beiträge: 2732
Registriert: Sa 19. Mai 2012, 17:37
Kontaktdaten:

Re: Probleme mit DB-Update aus Makro nach Konvertierung in eine MySQL-DB

Beitrag von RobertG » Mi 3. Jul 2019, 17:32

Hallo Jürgen,

ich vermute, dass das an der Maskierung liegt. Ich kopiere Dir einmal den Abschnitt aus dem Handbuch:
MySQL-Code in Makros
Wird die interne Datenbank angesprochen, so werden die Tabellen und Felder mit doppelten
Anführungszeichen gegenüber dem SQL-Code abgesetzt:

Code: Alles auswählen

SELECT "Feld" FROM "Tabelle"
Da in Makros der SQL-Befehl Text darstellt, müssen die doppelten Anführungszeichen zusätzlich
maskiert werden:

Code: Alles auswählen

stSQL = "SELECT ""Feld"" FROM ""Tabelle"""
MySQL-Abfragen hingegen werden anders maskiert:

Code: Alles auswählen

SELECT `Feld` FROM `Datenbank`.`Tabelle`
Durch diese andere Form der Maskierung wird daraus im Makro-Code:

Code: Alles auswählen

stSql = "SELECT `Feld` FROM `Datenbank`.`Tabelle`"
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

jh56
Beiträge: 23
Registriert: Fr 16. Mär 2018, 11:17

Re: Probleme mit DB-Update aus Makro nach Konvertierung in eine MySQL-DB

Beitrag von jh56 » Mi 3. Jul 2019, 20:06

Hallo Robert,

ich verstehe Dich nicht ganz:

Deine Maskierung ist der select, mein Problem liegt beim Update. das bekomme ich jetzt nicht zusammen. Dies ist aber auch Sql_str dokumentiert:
"Update "Defaults" set "Selmon" = '6' where "ID" = '1';"

ich schrieb:
Was nicht läuft ist ein Datenbankupdate aus einem Makro heraus.
Ich benutze hierzu mehrere Routinen zum Aufbau der Verbindung, holen der Altdaten und dann zum Update.
Es kommt keine Fehlermeldung. Beim Neuaufruf des Hauptformulares sind die Daten allerdings nicht verändert.


Hier noch ein paar Informationen zum Umfeld:

Betriebssystem: Linux Mint
Libre Version 6.1 und 6.2
Java Schnittstelle 8.0.15
Mysql Server 5.7

gogo
Beiträge: 1072
Registriert: Sa 5. Feb 2011, 19:07

Re: Probleme mit DB-Update aus Makro nach Konvertierung in eine MySQL-DB

Beitrag von gogo » Mi 3. Jul 2019, 23:33

;)
versuch's mal mit

Code: Alles auswählen

...
SQL_Anweisung.executeUpdate(Sql_str)
...
g
2008 LucidL./MaverickM./WinXP LibreOffice 3.3.2 > 02/13 LinuxMint13/Xubuntu > 09/13 Debian Wheezy+LO3.5.4.2 > 01/15 Debian Jessie KDE+LO4.3.3.2/Mint17 openbox auf USB+LO4.2.8.2 > 03/16 ArchLin & LO5.1+ff > 02/18 Kubuntu

jh56
Beiträge: 23
Registriert: Fr 16. Mär 2018, 11:17

Re: Probleme mit DB-Update aus Makro nach Konvertierung in eine MySQL-DB

Beitrag von jh56 » Do 4. Jul 2019, 10:39

Hallo gogo,
Danke für für Deine Idee, sie läuft aber auch nicht in der MySQL-anbindung mit dem Javatreiber.

interessanter Weise läuft dieser Code aber genau wie mein vorgestellter Code in der HSQLDB.
Ich beginne zu vermuten, dass eventuell ein Bug im Libre Base vorliegt, da bei einem Versuch diesen Wert über eine Formularmaske zu ändern dies einwandfrei funktioniert.
Die Alternative. wir haben alle noch nicht den richtigen Punkt in der Doku gefunden, allerdings sollte meiner Ansicht der Code datenbankunabhängig arbeiten.

Ich freue mich also weiter um jeden Post, der hilfreiche Ideen bringt.

Danke und Gruß
Jürgen

RobertG
Beiträge: 2732
Registriert: Sa 19. Mai 2012, 17:37
Kontaktdaten:

Re: Probleme mit DB-Update aus Makro nach Konvertierung in eine MySQL-DB

Beitrag von RobertG » Do 4. Jul 2019, 16:44

Hallo Jürgen,

was macht denn Dein Code, wenn Du den entsprechenden Teil (aus der Messagebox) kopierst und über Extras > SQL laufen lässt?

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

jh56
Beiträge: 23
Registriert: Fr 16. Mär 2018, 11:17

Re: Probleme mit DB-Update aus Makro nach Konvertierung in eine MySQL-DB

Beitrag von jh56 » Do 4. Jul 2019, 20:24

im SQL-Fenster funktioniert der Code:" update Defaults set Selmon = 1 where ID = 1 " , also ohne Anführungszeichen und Hochkomma. Das läuft aber nicht im Makro

RobertG
Beiträge: 2732
Registriert: Sa 19. Mai 2012, 17:37
Kontaktdaten:

Re: Probleme mit DB-Update aus Makro nach Konvertierung in eine MySQL-DB

Beitrag von RobertG » Do 4. Jul 2019, 21:07

Hallo Jürgen,

ich habe hier nicht genau Deine Konfiguration, konnte aber das Update ganz ohne jegliche Maskierung durchführen:

Code: Alles auswählen

SUB UpDate
	oDatasource = thisDatabaseDocument.CurrentController
	IF NOT (oDatasource.isConnected()) THEN oDatasource.connect()
	oConnection = oDatasource.ActiveConnection()
	oSQL_Command = oConnection.createStatement()
	oSql_Command.executeUpdate("UPDATE personen SET Nachname = 'Hein' WHERE ID = 2;")
END SUB
Die Maskierung um Text wird wohl weiterhin nötig sein. Bei mir handelt es sich allerdings um eine MariaDB und den entsprechenden JDBC-Treiber für die MariaDB Version 2.4.1. Das ganze läuft unter OpenSUSE 15 64bit rpm Linux.

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

jh56
Beiträge: 23
Registriert: Fr 16. Mär 2018, 11:17

Re: Probleme mit DB-Update aus Makro nach Konvertierung in eine MySQL-DB

Beitrag von jh56 » Fr 5. Jul 2019, 09:21

Hallo Robert,
wenn ich genau wie Du den SQL-Befehl als String einfüge, läuft bei mir gar nichts. ich bekomme die Fehlermeldung siehe Bildschirmfoto
Bildschirmfoto vom 2019-07-05 08-07-10.png
Bildschirmfoto vom 2019-07-05 08-07-10.png (221.19 KiB) 2553 mal betrachtet
Ich muss also mit einer Variablen für den SQL-Befehl arbeiten, wie sie ja auch bei den DB_Selectionen bestens funktioniert.
Hier ein Bildschirmfoto mit Breakpoint vor der Ausführung des Updatebefehls.
Bildschirmfoto vom 2019-07-05 07-59-16.png
Bildschirmfoto vom 2019-07-05 07-59-16.png (237.29 KiB) 2553 mal betrachtet
Hier läuft der Makro zwar ohne Fehlermeldung durch, es kommt aber zu keinem DatenbankUpdate.

Ich nahm als nächstes die Hochkomma bei der Wertzuweisung vom Feld Selmon heraus. Das Ergebnis ist wie gehabt:
Bildschirmfoto vom 2019-07-05 08-29-09.png
Bildschirmfoto vom 2019-07-05 08-29-09.png (223.52 KiB) 2553 mal betrachtet
Bei der Enfernung der Anführungsstriche um den Tabellennamen gab es wieder einen Laufzeitfehler.
Der Tabellenname muss definitiv in Anführungszeichen gesetzt werden, weil es sonst zu einem Laufzeitfehler kommt.:
Bildschirmfoto vom 2019-07-05 08-37-17.png
Bildschirmfoto vom 2019-07-05 08-37-17.png (230.8 KiB) 2553 mal betrachtet
Ich probierte also weiter: Entfernung der Hochkomma um den Feldnamen des zu verändernden Feldes. Das brachte eine Fehlermeldung, dass dass Feld nicht erkannt wurde: Text:
BASIC-Laufzeitfehler.
Es ist eine Ausnahme aufgetreten
Type: com.sun.star.sdbc.SQLException
Message: Column not found: SELMON in statement [Update "Defaults" set Selmon].

Was mich verwundert ist, dass ein Code,der mit einem Interface (HSQLDB) funktioniert, mit dem nächsten Interface nicht funktioniert.
Da ich jahrelang als Programmierer tätig war, denke ich, dass es hier ein Problem des Interfaces ist, welches ich mit Änderung des BASIC-Codes nicht lösen kann.
Die Methode executeUpdate, die ich ja nicht debuggen kann geht ja wahlweise entsprechend der DB an unterschiedliche Interfaces. Hier müsste ein Entwickler von Libre Base mal in das Eingemachte schauen.
Ich kenne die aber nicht.
Wenn die Tabelle Defaults über ein Formular geändert wird funktioniert eine Änderung der Anwendungsstandartwerte!, (Eingrenzung des Problems).

Hier noch die Tabellenstruktur der Tabelle Defaults:
Feldname Typ
ID Int Schlüssel
Selmon Dec(2)
Seljahr Dec(4)
Lastjahr Dec(4)
Berichtszeit Dec(2)

eventuell gibt es ja doch noch eine Lösung
Gruß Jürgen

RobertG
Beiträge: 2732
Registriert: Sa 19. Mai 2012, 17:37
Kontaktdaten:

Re: Probleme mit DB-Update aus Makro nach Konvertierung in eine MySQL-DB

Beitrag von RobertG » Fr 5. Jul 2019, 16:53

Hallo Jürgen,

ich gehe davon aus, dass das Problem in Deiner JDBC-Verbindung steckt. Ich kann das Verhalten hier auch mit MySQL-Connector 5.1.40 nicht nachvollziehen. Da funktioniert das Makro ebenso einwandfrei, auch mit einem Tabellennamen mit einem Großbuchstaben am Anfang.

Sobald ich mit einem doppelten Anführungszeichen maskiere kommt eine Errormeldung. Sobald ich mit ` maskiere, wie von mir beschrieben, erfolgt das Update genauso wie ohne jegliche Maskierung.

Ich kann noch einmal nachschauen, ob ich einen Deinem Connector nahe kommenden Connector zum Testen finde.

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

An alle, die das LibreOffice-Forum nutzen:


Bitte beteiligen Sie sich mit 7 Euro pro Monat und helfen uns bei unserem Budget für das Jahr 2024.
Einfach per Kreditkarte oder PayPal.
Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet.

❤️ Vielen lieben Dank für Ihre Unterstützung ❤️

Antworten