- Beiträge: 10
Syntax error in string in query expression
- Jens Hetze
- Autor
- Offline
- Benutzer
wir haben bei einem Kunden den ODBC-Adapter auf der Read-Seite und einen OleDBAdapter auf der Write-Seite. Die Read-Seite ist eine Ingres-DB. Die Write-Seite ist ein SharePoint 2016.
Es erscheint bei einigen Datensätzen folgende Fehlermeldung "Syntax error in string in query expression "...'.".
Wir konnten den Fehler schon etwas eingrenzen. Es liegt an bestimmte Zeichen, bspw. wenn ß, °, oder " als Spalteninhalt vergeben sind.
Übergibt man die gleiche Zeichenfolge in einem X-Value an die WRITE-Seite funktioniert es.
Woran könnte dies liegen? Hat jemand Erfahrungen dazu? Die Codierung der READ-Datenbank ist ISO88591.
Die Flowheater-Version ist die 4.1.4 (32 Bit).
Viele Grüße
Jens
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- FlowHeater-Team
- Offline
- Administrator
bin mir nicht sicher woran das liegen könnte. Bitte versuchen Sie mal auf der WRITE Seite lediglich die SQL Skripte zu erzeugen, Optionen siehe Screenshot. Ideal wäre wenn Sie die READ Seite soweit eingrenzen können, dass nur ein Datensatz vorhanden ist der genau so eine Fehlermeldung verursacht.
Anschließend posten Sie bitte mal das geneierte SQL Skript zur weiteren Analyse.
gruß
Robert Stark
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- Jens Hetze
- Autor
- Offline
- Benutzer
- Beiträge: 10
anbei das SQL-Skript dreier Datensätze, die auf Fehler laufen. Die SQL-Abfrage auf der READ-Seite wurde darauf eingrenzt.
update LIST set Titel = '1', Lieferantenname = 'Ga¨rtner & Schwer GbR Hygienefachgroßhandel '
update LIST set Titel = '2', Lieferantenname = 'Q-DAS° Gesellschaft fu¨r Datenverarbeitung und Systemtechnik mbH '
update LIST set Titel = '3', Straße = 'R?ntgenstr. 10 '
Bei 1 liegt es am Zeichen "ß". Bei 2 am Zeichen "°". Bei 3 am Zeichen "?".
Wird ein Import nur mit der Spalte "Titel" ausgeführt, wird der Import komplett durchlaufen.
Für Rückfragen stehe ich gern zur Verfügung.
Viele Grüße
Jens
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- FlowHeater-Team
- Offline
- Administrator
ich vermute, dass hier der ODBC Treiber für die Ingres Datenbank die Text Daten im ROH Format zurückliefert. Im Normal sollte das automatisch richtig codiert ankommen. Beim anschließenden Import über den OleDB Adapter in die Sharepoint Liste kommen so falsche "Binärdaten" an, die mit einer Fehlermeldung quittiert werden.
Bitte versuchen Sie mal folgendes) Ziehen Sie jeweils einen .NET Script Heater in die betroffenen Verbindungen. Über einen Doppelklick öffnen Sie den Konfigurationsdialog. Hier kopieren Sie, untenstehenden C# Skript Code hinein. Anschließend den Import noch einmal durchführen.
Das Skript konvertiert/interpretiert den Tex als Codepage 28591 (=ISO88591) und gibt die Zeichenfolge als Unicode (das erwartet der FlowHeater) zurück.
C# Skript Code
gruß
Robert Stark
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- Jens Hetze
- Autor
- Offline
- Benutzer
- Beiträge: 10
leider hat der NET-Heater noch nicht zum Ziel geführt. Die SQL-Query sieht nun wie folgt aus:
update LIST set Titel = '1', Lieferantenname = 'Ga?rtner & Schwer GbR Hygienefachgroßhandel ' where Lieferantennummer = '1'
Was bewirken die CodePage-Einstellungen im Bereich "Common" auf der READ- und WRITE-Seite (siehe Anhang "2019-03-22 10_17_26-INGRES-ADAPTER.png")?
Ich führe noch etwas weiter aus:
1. Auf dem Computer, welcher die Ingres-DB hält, sind folgende Adapter-Einstellungen hinterlegt (siehe Anhang "2019-03-22 10_21_09-READ.png").
2. Auf dem Computer, auf dem Flowheater läuft, ist ein Ingres-ODBC-Treiber installiert. Dieser bietet noch weitere Einstellungsmöglichkeiten (siehe Anhang "2019-03-22 10_26_38-INGRES_ODBC.png"). Könnte hier eine Einstellung die Daten evtl. besser liefern?
3. Mittels FlowHeater wird die ODBC-Verbindung angesprochen.
Viele Grüße
Jens
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- FlowHeater-Team
- Offline
- Administrator
ich denke wir sind auf den richtigen Weg. Bricht der Import in die SharePoint Tabelle immer noch ab oder werden jetzt nur die Umlaute und Sonderzeichen mit einem „?“ gekennzeichnet?
Zu Ihrer Frage) Die Einstellungen für die Codepage hier sind nur für das Schreiben des SQL Skriptes vorgesehen. Im Normalfall konvertieren die Datenbank Treiber den Inhalt so, dass diese im abrufenden Programm verwendet werden können, hat zumindest bisher so funktioniert
Im Anhang finden Sie ein kleines Testprogramm „ODBC-Query“. Bitte geben Sie hier mal die gleichen Verbindungsparameter (Connectionstring) sowie SQL an wie in der FlowHeater Definition auf der READ Seite für die Ingres Datenbank.
Hinweis: Es steht eine 32 Bit sowie 64 Bit Variante zur Verfügung, Sie müssen die 32 Bit Variante verwenden.
Rufen Sie zuerst mal die Daten mit den Standardeinstellungen ab. Werden hier bei der Ausgabe ebenfalls falsche Daten angezeigt?
Wenn ja versuchen Sie hier mal folgende Codepages nacheinander aus.
65000 = UTF-7
65001 = UTF-8
12000 = UTF-32 (Unicode)
gruß
Robert Stark
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- Jens Hetze
- Autor
- Offline
- Benutzer
- Beiträge: 10
zu Ihrer ersten Frage: Der Import in SharePoint bricht noch mit gleicher Fehlermeldung ab.
Das Testprogramm "ODBC-Query" liefert bei der Verwendung der Standard-Codepage ebenso falsche Daten. Bei der Verwendung der Codepages "65000", "65001" und "12000" jedoch saubere Werte. (Bspw. Gärtner & Schwer GbR Hygienefachgroßhandel)
Wie gehen wir weiter vor?
Viele Grüße
Jens
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- FlowHeater-Team
- Offline
- Administrator
dann ist das Problem nicht der ODBC Treiber für die Ingres Datenbank sondern der SharePoint import. Die Ingres DB liefert die Werte noch so wie sie der FlowHeater erwartet.
Bitte versuchen Sie dann das hier beigefügte C# Skript für den .Net Script Heater wie weiter oben beschrieben.
Hier wird nun der Wert als Unicode interpretiert und anschließend in Windows ANSI Codepage (default) umgewandelt.
C# Skript Code um das Encoding von Unicode auf Windows ANSI zu ändern
gruß
Robert Stark
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- Jens Hetze
- Autor
- Offline
- Benutzer
- Beiträge: 10
leider noch derselbe Fehler (siehe Anhang "2019-03-26_Fehler.PNG").
Viele Grüße
Jens
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- FlowHeater-Team
- Offline
- Administrator
jetzt habe ich die Vermutung, dass im Feldinhalt der (ODBC) Ingres Datenbank korrupte Zeichen abgespeichert sind, die bei der Konvertierung in Unicode vorhanden bleiben, hier aber nicht weiter stören. Bei der weiteren Konvertierung für die SharePoint Liste aber Probleme verursachen, die zum Abbruch des Import Vorgangs führen.
Bitte versuchen Sie mal den Inhalt eines betroffenen Datensatz in der Ingres Datenbank manuell entweder mit Hilfe des FlowHeater oder aber eines geeigneten Datenbanktool mit dem gleichen Wert (allerdings nicht per Copy&Paste) zu aktualisieren und anschließend diesen Datensatz in die SharePoint Liste zu importieren.
gruß
Robert Stark
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- FlowHeater-Team
- Offline
- Administrator
durch die per Email zur Verfügung gestellten und analysierten Export Dateien fällt auf, dass hier bei den beschrieben Sonderzeichen immer ein HEX 0 bzw. 0x00 vorhanden ist.
Ich habe die Vermutung, dass der Ingres ODBC Treiber bei Unicode 3 Byte bzw. 4 Byte Unicode Zeichen hier eine falsche länge liefert und das ungültige Steuerzeichen „\0“ am Ende liefert was dann die Fehler beim Import in die SharePoint liste verursacht.
Bitte versuchen Sie mal beigefügtes C# Skript, das diese Zeichen aus dem Feldinhalt entfernt.
C# Skript um Hex 0 aus String zu entfernen bzw. den String ab dieser Position abzuschneiden
gruß
Robert Stark
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- Jens Hetze
- Autor
- Offline
- Benutzer
- Beiträge: 10
der Import funktioniert mit dem oben genannten Skript. Vielen Dank für Ihre Unterstützung.
Viele Grüße
Jens Hetze
Bitte Anmelden oder Registrieren um der Konversation beizutreten.