- Beiträge: 23
Probleme mit ODBC Treibern
- Flo
- Autor
- Offline
- Benutzer
Weniger
Mehr
7 Jahre 11 Monate her #2986
von Flo
Probleme mit ODBC Treibern - Beitrag(2986) wurde erstellt von Flo
Hallo zusammen,
ich versuche eine uralte 4D Datenbank (v6.5.9) in MySQL zu transferieren. Um auf 4D zu kommen nutze ich den zugehörigen ODBC Treiber [Simba ODBC Driver]. Bei einigen Tabellen bekomme ich auch deutlich >10.000 Datensätze problemlos übertagen. Leider gibt es jedoch auch Tabellen bei denen nach ca. 2 - 30 Datensätzen ein Abbruch mittel ODBC ERROR erfolgt. Hier bestehlt leider auch keine Möglichkeit herauszufinden was nun der Auslöser war. (Warnungen, Debug ist beides 0).
Mittels bspw. ODBC Query Tool v1.39 bekomme ich jedoch alle Tabellen per SQL query problemlos geladen und angezeigt. (viele andere ODBC Tools lassen den ODBC Treiber leider auch abstürzen, daher die expliziten Benennung des Programms!)
Da ich eigentlich per Batch arbeiten wollte, wäre eine Manuelle Zwischenlösung über eine TXT Datei, allein schon aufgrund der Menge an Tabellen hier nicht zielführend.
Gibt es hier vielleicht eine Lösung oder hat jemand eine Idee? (DSN User/System Wechsel bewirkt schon mal nichts)
Danke schon mal für Infos und Hilfe
ich versuche eine uralte 4D Datenbank (v6.5.9) in MySQL zu transferieren. Um auf 4D zu kommen nutze ich den zugehörigen ODBC Treiber [Simba ODBC Driver]. Bei einigen Tabellen bekomme ich auch deutlich >10.000 Datensätze problemlos übertagen. Leider gibt es jedoch auch Tabellen bei denen nach ca. 2 - 30 Datensätzen ein Abbruch mittel ODBC ERROR erfolgt. Hier bestehlt leider auch keine Möglichkeit herauszufinden was nun der Auslöser war. (Warnungen, Debug ist beides 0).
Mittels bspw. ODBC Query Tool v1.39 bekomme ich jedoch alle Tabellen per SQL query problemlos geladen und angezeigt. (viele andere ODBC Tools lassen den ODBC Treiber leider auch abstürzen, daher die expliziten Benennung des Programms!)
Da ich eigentlich per Batch arbeiten wollte, wäre eine Manuelle Zwischenlösung über eine TXT Datei, allein schon aufgrund der Menge an Tabellen hier nicht zielführend.
Gibt es hier vielleicht eine Lösung oder hat jemand eine Idee? (DSN User/System Wechsel bewirkt schon mal nichts)
Danke schon mal für Infos und Hilfe
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- FlowHeater-Team
- Offline
- Administrator
7 Jahre 11 Monate her - 7 Jahre 11 Monate her #2987
von FlowHeater-Team
gruß
Robert Stark
FlowHeater-Team antwortete auf Probleme mit ODBC Treibern - Beitrag(2987)
Hallo Flo,
mit 4D Datenbanken haben ich leider noch keine Erfahrungen sammeln können, ich kenne auch hier niemanden der das bisher damit versuch hat. Aber so leicht geben wir nicht auf Bitte versuchen Sie mal folgendes.
Unter https://flowheater.net/files/tools/ODBC-Query.zip finden Sie kleines ODBC Query Tool das die Daten nativ abruft ohne den Overhead vom FlowHeater ODBC Adapter . Falls ein Fehler auftritt wird hier auch die technische Fehlermeldung angezeigt. Im ZIP Archiv ist sowohl eine 32 Bit wie auch eine 64 Bit Variante. Sie benötigen die Version in der auch der 4D ODBC Treiber vorliegt.
Nachdem Sie das FlowHetaer ODBC Query Tool gestartet haben geben Sie hier Ihre ODBC Verbindungszeichenfolge zur 4D Datenbank ein. Im darunterliegenden Textfeld tragen Sie den SQL Query ein den Sie auf der 4D Datenbank absetzen möchten. Falls alles klappt werden die Daten dann im Grid angezeigt.
Bitte exportieren davon jeweils die Daten sowie das Schema davon. Zur weiteren Analyse bräuchte ich das jeweils einmal von einer Tabelle mit der es aus dem FlowHeater heraus funktioniert sowie einmal wobei ein Fehler auftritt. Bitte auch den verwendeten SQL Query mit anfügen.
PS: Falls Sie die Daten hier im Forum nicht posten möchten können Sie diese auch gerne per Email zuschicken.
mit 4D Datenbanken haben ich leider noch keine Erfahrungen sammeln können, ich kenne auch hier niemanden der das bisher damit versuch hat. Aber so leicht geben wir nicht auf Bitte versuchen Sie mal folgendes.
Unter https://flowheater.net/files/tools/ODBC-Query.zip finden Sie kleines ODBC Query Tool das die Daten nativ abruft ohne den Overhead vom FlowHeater ODBC Adapter . Falls ein Fehler auftritt wird hier auch die technische Fehlermeldung angezeigt. Im ZIP Archiv ist sowohl eine 32 Bit wie auch eine 64 Bit Variante. Sie benötigen die Version in der auch der 4D ODBC Treiber vorliegt.
Nachdem Sie das FlowHetaer ODBC Query Tool gestartet haben geben Sie hier Ihre ODBC Verbindungszeichenfolge zur 4D Datenbank ein. Im darunterliegenden Textfeld tragen Sie den SQL Query ein den Sie auf der 4D Datenbank absetzen möchten. Falls alles klappt werden die Daten dann im Grid angezeigt.
Bitte exportieren davon jeweils die Daten sowie das Schema davon. Zur weiteren Analyse bräuchte ich das jeweils einmal von einer Tabelle mit der es aus dem FlowHeater heraus funktioniert sowie einmal wobei ein Fehler auftritt. Bitte auch den verwendeten SQL Query mit anfügen.
PS: Falls Sie die Daten hier im Forum nicht posten möchten können Sie diese auch gerne per Email zuschicken.
gruß
Robert Stark
Letzte Änderung: 7 Jahre 11 Monate her von FlowHeater-Team.
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- FlowHeater-Team
- Offline
- Administrator
7 Jahre 11 Monate her - 7 Jahre 11 Monate her #2988
von FlowHeater-Team
gruß
Robert Stark
FlowHeater-Team antwortete auf Probleme mit ODBC Treibern - Beitrag(2988)
Hallo Flo,
vielen Dank für die Informationen per Email, die waren sehr hilfreich. Ich vermute das liegt an dem D4 Datenbank Datentyp LONGINT in den betroffenen Tabellen.
Versuchen Sie mal bitte folgendes. Erstellen Sie eine neue Definition und konfigurieren den ODBC Adapter für den Zugriff auf die D4 Datenbank. Auf dem Reiter „Felder / Datentypen“ wählen Sie jedoch keine Tabelle aus sondern tragen im SQL folgendes ein.
Anschließend rufen Sie über den Button „Felder einlesen“ die Tabellen Schemainformationen ab und versuchen nun die Tabelle zu exportieren.
Wenn das funktioniert ist meine Vermutung richtig, dann liegt das am Zusammenspiel des verwendeten Simba ODBC Treiber mit dem .NET Framework wie die Daten von der Datenquelle abgerufen werden. Das Problem ist dass der Datentyp eigentlich INT64 (8 Byte) ist, das Framework versucht jedoch einen INT32 (4 Byte) zu lesen und der Simba ODBC Treiber quittiert das mit einem Fehler. Eigentlich sollte hier nur ein Fehler geworfen werden wenn der Wert nicht mehr in einen INT32 passt! Ich denke nicht, dass Sie für die Felder solch große Zahlenwerte benötigen, mit INT32 können Werte bis ca. 2 Milliarden abgebildet werden.
Sie haben nun zwei Möglichkeiten:
vielen Dank für die Informationen per Email, die waren sehr hilfreich. Ich vermute das liegt an dem D4 Datenbank Datentyp LONGINT in den betroffenen Tabellen.
Versuchen Sie mal bitte folgendes. Erstellen Sie eine neue Definition und konfigurieren den ODBC Adapter für den Zugriff auf die D4 Datenbank. Auf dem Reiter „Felder / Datentypen“ wählen Sie jedoch keine Tabelle aus sondern tragen im SQL folgendes ein.
Select NACHNAME, VORNAME, LAND, PLZ, ORT from PERONEN
Anschließend rufen Sie über den Button „Felder einlesen“ die Tabellen Schemainformationen ab und versuchen nun die Tabelle zu exportieren.
Wenn das funktioniert ist meine Vermutung richtig, dann liegt das am Zusammenspiel des verwendeten Simba ODBC Treiber mit dem .NET Framework wie die Daten von der Datenquelle abgerufen werden. Das Problem ist dass der Datentyp eigentlich INT64 (8 Byte) ist, das Framework versucht jedoch einen INT32 (4 Byte) zu lesen und der Simba ODBC Treiber quittiert das mit einem Fehler. Eigentlich sollte hier nur ein Fehler geworfen werden wenn der Wert nicht mehr in einen INT32 passt! Ich denke nicht, dass Sie für die Felder solch große Zahlenwerte benötigen, mit INT32 können Werte bis ca. 2 Milliarden abgebildet werden.
Sie haben nun zwei Möglichkeiten:
- Sie ignorieren diese Felder in der Feldauflistung im obigen SQL Select und exportieren nur Felder der betroffenen Tabellen ohne diese LONGINT Datentypen. Hat natürlich zur Folge, dass Sie diese Wert im Export nicht zur Verfügung haben und verloren gehen.
- Sie führen beim SELECT einen CAST bzw. einen CONVERT auf den Datentyp durch.
z.B. select NACHNAME, cast(FIRMA_NR as int) from PERSONEN
Da ich jetzt die genaue Syntax der D4 Datenbank nicht kenne ist der CAST für den MS SQL Server ausgerichtet, das müssen Sie ggf. für Ihre D4 Datenbank anpassen!
gruß
Robert Stark
Letzte Änderung: 7 Jahre 11 Monate her von FlowHeater-Team.
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- Flo
- Autor
- Offline
- Benutzer
Weniger
Mehr
- Beiträge: 23
7 Jahre 11 Monate her #2991
von Flo
Flo antwortete auf Probleme mit ODBC Treibern - Beitrag(2991)
Rückmeldung/Lösung
Nach einigem ausprobieren scheint es Probleme bei der Verarbeitung des Variablentype TEXT zu geben. Mittels nativen ODBC Adapter bekommt man (ich) dies auch in der bestehenden Situation nicht gelöst. Auch der Befehlt CAST wird scheinbar nicht von den 4D ODBC Treibern unterstützt (oder ich finde die richtigen Syntax nicht).
FlowHeater scheint hier aber einige Fehler abzufangen, wodurch sich für mich folgende Lösung ergibt:
Die Datenfelder in FlowHeater unter der Verwendung von SELECT einlesen (Scrollleiste, oder flexibles Eingabefeld wäre hier bei vielen Datenfeldern im erweiterten Fenster hilfreich).
TEXT Variablentypen mittels convert(“<<Feld>>“, SQL_LONGVARCHAR) einlesen.
Damit die Feldbezeichnungen noch verständlich angezeigt werden, am besten mit AS noch wie folgt ergänzen.
Die nachfolgende Liste beinhaltet die Umwandlungstabellen der 4D ODBC-Treiber 6.5 mit den zugehörigen 4D Server-Datentypen und ihre entsprechenden ODBC SQL-Datentypen.
Sollte noch jemand einmal eine ähnliche Problemstellung haben, hilft dies ja vielleicht weiter, schöne Grüße
Nach einigem ausprobieren scheint es Probleme bei der Verarbeitung des Variablentype TEXT zu geben. Mittels nativen ODBC Adapter bekommt man (ich) dies auch in der bestehenden Situation nicht gelöst. Auch der Befehlt CAST wird scheinbar nicht von den 4D ODBC Treibern unterstützt (oder ich finde die richtigen Syntax nicht).
FlowHeater scheint hier aber einige Fehler abzufangen, wodurch sich für mich folgende Lösung ergibt:
Die Datenfelder in FlowHeater unter der Verwendung von SELECT einlesen (Scrollleiste, oder flexibles Eingabefeld wäre hier bei vielen Datenfeldern im erweiterten Fenster hilfreich).
TEXT Variablentypen mittels convert(“<<Feld>>“, SQL_LONGVARCHAR) einlesen.
Damit die Feldbezeichnungen noch verständlich angezeigt werden, am besten mit AS noch wie folgt ergänzen.
Code:
SELECT
convert(“text_Datenfeld“, SQL_LONGVARCHAR) as “text_Datenfeld“
FROM tabelle
Die nachfolgende Liste beinhaltet die Umwandlungstabellen der 4D ODBC-Treiber 6.5 mit den zugehörigen 4D Server-Datentypen und ihre entsprechenden ODBC SQL-Datentypen.
4D Server Data Types | ODBC SQL Data Types |
Alpha | SQL_VARCHAR |
Text | SQL_LONGVARCHAR |
Real | SQL_DOUBLE |
Integer | QL_SMALLINT |
Long Integer | SQL_INTEGER |
Date | SQL_DATE |
Time | SQL_TIME |
Boolean | SQL_BIT |
Picture | SQL_LONGVARBINARY |
Subtable | N/A |
BLOB | N/A |
Sollte noch jemand einmal eine ähnliche Problemstellung haben, hilft dies ja vielleicht weiter, schöne Grüße
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
Ladezeit der Seite: 0.274 Sekunden