Seite 1 von 1

Abfrage mit Parametereingabe funktioniert mit MySql-Datenbank nicht

Verfasst: Do 18. Feb 2021, 09:56
von schneiderherbie
Ich verwende Base als Frontend für meine MySql-Datenbank. Als Betriebssystem habe ich Ubuntu. Mit der Ubuntu-Aktualisierung auf die Version 20.04 funktionieren die Abfragen mit einer Parametereingabe nicht mehr. Es erscheint folgende Fehlermeldung:

Code: Alles auswählen

Fehlercode: 1064

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ':Beitragsjahr ORDER BY "jahr" ASC, "name" ASC, "vorname" ASC' at line 1
Als SQL-Statement wird ausgegeben:

Code: Alles auswählen

Das SQL-Kommando, welches zu diesem Fehler führte, ist:

SELECT "jahr", "name", "vorname", "alter", "beitrag", "zahlung", "differenz" FROM "mec"."v_beitrag_differenz" AS "v_beitrag_differenz" WHERE "jahr" = :Beitragsjahr ORDER BY "jahr" ASC, "name" ASC, "vorname" ASC
Mit der Ubuntu-Version funktionierten die Abfragen noch einwandfrei.
Vermutlich wurde
:Beitragsjahr
nicht durch den eingegeben Wert ersetzt. Mit diesem dargestellten SQL-Statement kann der MySql-Server nun wirklich nichts anfangen!
Als Folge dieses Fehlers funktionieren auch alle Formulare nicht mehr, die Unterformulare enthalten.
Gibt es eine Möglichkeit, diesen Fehler zu beheben?

Re: Abfrage mit Parametereingabe funktioniert mit MySql-Datenbank nicht

Verfasst: Do 18. Feb 2021, 15:16
von gogo
Wenn der Treiber die Base-Syntax nicht (mehr) übersetzt, bleibt Dir nur einen anderen Treiber zu verwenden, der's kann. MySQL kann man verschieden anbinden.
Ansonsten musst Du irgendwie den Wert ":Beitragsjahr" für die Abfrage bereitstellen - also Parameterabfrage selbst programmieren (ist vermutlich das Einfachste), temporäre Variablen setzen oder mit einer Referenztabelle. Was da am praktischsten ist, musst Du da selbst rausfinden - kommt dann auf die Benutzbarkeit an.

Re: Abfrage mit Parametereingabe funktioniert mit MySql-Datenbank nicht

Verfasst: Fr 19. Feb 2021, 08:00
von RobertG
Vielleicht die gleiche Ursache wie für die Unterformulare. Da hat sich in der Umstellung von LO 6.0 und 6.1 ein Fehler eingeschlichen, der Durch Editieren der context.xml behoben werden kann. Aus dem Handbuch:
Der nicht funktionierende Code:

Code: Alles auswählen

<db:driver-settings db:system-driver-settings="" db:base-dn=""
db:parameter-name-substitution="false"/>
Wird dieser Code geändert auf

Code: Alles auswählen

<db:driver-settings db:system-driver-settings="" db:base-dn=""/>
so funktionieren die Unterformulare wieder mit der *.odb-Datei.
Alternativ kann auch das folgende Makro von der migrierten Base-Datei aus gestartet werden:

Code: Alles auswählen

SUB FB_Parameter
DIM oSettings AS OBJECT
oSettings = ThisComponent.DataSource.Settings
oSettings.ParameterNameSubstitution = True
END SUB
Nach einmaligem Start des Makros ist der Eintrag in der Base-Datei komplett verschwunden, sofern die Base-Datei einmal abgespeichert wurde.
Gruß

Robert

Re: Abfrage mit Parametereingabe funktioniert mit MySql-Datenbank nicht

Verfasst: Fr 19. Feb 2021, 09:25
von schneiderherbie
Hallo Robert, danke für den Hinweis. Kannst Du mir bitte noch mitteilen, wo ich die "context.xml" finde. Kann man in dieser auch "false" durch "true" ersetzen?

Re: Abfrage mit Parametereingabe funktioniert mit MySql-Datenbank nicht

Verfasst: Fr 19. Feb 2021, 09:43
von schneiderherbie
Ich hab die Datei gefunden. Es handelt sich um die
content.xml
die sich in der Base-Datei befindet.
Ich habe die Base-Datei mit der Archiv-Verwaltung geöffnet, die content.xml extrahiert. Anschließend habe ich mit einem Editor nach
"parameter-name-substitution" gesucht und hier "false" durch "true" ersetzt
Die geänderte Datei habe ich anschließend in das noch geöffnete Archiv übertragen. Nun funktionieren die Abfragen mit Parameter-Abfrage.
Vielen Dank für die Unterstützung.

Re: Abfrage mit Parametereingabe funktioniert mit MySql-Datenbank nicht

Verfasst: Fr 19. Feb 2021, 09:44
von Wanderer
Die .odb-Dateien sind spezielle .zip-Archive in denen xml-Dateien und anderes stecken.

Wenn Du die Datei (bitte backup vorher erstellen) auf .zip umbenennst kann man den Inhalt wie einen Ordner betreten und findet darin auch die content.xml

Mfg, Jörn

PS: Gilt analog auch für die anderen Dateitypen von Open-Office.