Zum Hauptinhalt springen
Weil einfach - produktiver ist

Der Daten Spezialist

Konvertieren Sie die Daten mühelos zwischen verschiedenen Formaten ohne Programmierkenntnisse dank Visual Designer. Effizient und super einfach.
Mit der Freeware Version können bis zu 100.000 Datensätze verarbeitet werden!
Flowheater Chart

Syntax error in string in query expression

Mehr
5 Jahre 9 Monate her - 5 Jahre 9 Monate her #3679 von Jens Hetze
Hallo liebe Community,
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
Letzte Änderung: 5 Jahre 9 Monate her von Jens Hetze.

Bitte Anmelden oder Registrieren um der Konversation beizutreten.

Mehr
5 Jahre 9 Monate her - 5 Jahre 9 Monate her #3680 von FlowHeater-Team
Hallo Herr Hetze,

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
Letzte Änderung: 5 Jahre 9 Monate her von FlowHeater-Team.

Bitte Anmelden oder Registrieren um der Konversation beizutreten.

Mehr
5 Jahre 9 Monate her - 5 Jahre 9 Monate her #3684 von Jens Hetze
Guten Morgen,

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
Letzte Änderung: 5 Jahre 9 Monate her von Jens Hetze.

Bitte Anmelden oder Registrieren um der Konversation beizutreten.

Mehr
5 Jahre 9 Monate her - 5 Jahre 9 Monate her #3686 von FlowHeater-Team
Hallo Herr Hetze,

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
 
Code:
public object DoWork() {  if (InValues.Length != 1)  throw new Exception("1 Eingangsparameter erwartet!");    string s = (string)InValues[0].GetString();  // Codepage 28591 = ISO88591  byte [] src = Encoding.GetEncoding(28591).GetBytes(s);  byte [] dst = Encoding.Convert(Encoding.GetEncoding(28591), Encoding.Unicode, src);  return Encoding.Unicode.GetString(dst); }


gruß
Robert Stark
Letzte Änderung: 5 Jahre 9 Monate her von FlowHeater-Team.

Bitte Anmelden oder Registrieren um der Konversation beizutreten.

Mehr
5 Jahre 9 Monate her #3687 von Jens Hetze
Hallo Herr Stark,

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.

Mehr
5 Jahre 8 Monate her #3688 von FlowHeater-Team
Hallo Herr Hetze,

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)

Dateianhang:

Dateiname: odbc-query.zip
Dateigröße:24 KB

gruß
Robert Stark

Bitte Anmelden oder Registrieren um der Konversation beizutreten.

Mehr
5 Jahre 8 Monate her #3690 von Jens Hetze
Hallo Herr Stark,

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.

Mehr
5 Jahre 8 Monate her #3695 von FlowHeater-Team
Hallo Herr Hetze,

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
Code:
public object DoWork() {  if (InValues.Length != 1)  throw new Exception("1 Eingangsparameter erwartet!");    string s = (string)InValues[0].GetString();  byte [] src = Encoding.Unicode.GetBytes(s);  byte [] dst = Encoding.Convert(Encoding.Unicode, Encoding.Default, src);  return Encoding.Default.GetString(dst); }



gruß
Robert Stark

Bitte Anmelden oder Registrieren um der Konversation beizutreten.

Mehr
5 Jahre 8 Monate her #3696 von Jens Hetze
Hallo Herr Stark,

leider noch derselbe Fehler (siehe Anhang "2019-03-26_Fehler.PNG").

Viele Grüße
Jens

Bitte Anmelden oder Registrieren um der Konversation beizutreten.

Mehr
5 Jahre 8 Monate her #3697 von FlowHeater-Team
Hallo Herr Hetze,

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.

Mehr
5 Jahre 8 Monate her #3710 von FlowHeater-Team
Hallo Herr Hetze,

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
Code:
public object DoWork() {     if (InValues.Length != 1)         throw new Exception("1 Eingangsparameter erwartet!");         string s = (string)InValues[0].GetString();     int pos = s.IndexOf("\0");     if (pos >= 0)     {         // Falls HEX 0 bzw. 0x00 im String gefunden wurde dann ab da abschneiden         s = s.Substring(0, pos);     }     return s; }

gruß
Robert Stark

Bitte Anmelden oder Registrieren um der Konversation beizutreten.

Mehr
5 Jahre 8 Monate her #3716 von Jens Hetze
Hallo Herr Stark,

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.

Ladezeit der Seite: 0.336 Sekunden
FlowHeater Logo

FlowHeater - Der Daten Spezialist

Effiziente Datenintegration und Transformation mit FlowHeater - Ihre Lösung für nahtlosen Datentransfer.

Rechtliches

Support & Kontakt

Kontaktinformation

Telefon:
0951 / 99339792

E-Mail:
Diese E-Mail-Adresse ist vor Spambots geschützt! Zur Anzeige muss JavaScript eingeschaltet sein.


Copyright © 2009-2024 by FlowHeater GmbH. Alle Rechte vorbehalten.