Du bist nicht angemeldet.

1

Donnerstag, 11. Oktober 2012, 07:53

4D Datenbank

Hallo zusammen,
ein Kunde von mir hat eine 4D-Applikation mit entsprechender Datenbank.
Habe einen 4D-ODBC-Treiber installiert.
Mit FoxPro kann ich die Daten auch lesen.
Leider habe ich 2 Probleme:
1. Einige der Tabellen haben mehr als 400 Felder, das mag der Fuchs nicht.
2. Es gibt Feldtypen die der Fuchs auch nicht mag/kennt.

Ich habe nun mit Dateniomport mit dem erwähnten ODBC-Treiber in Excel experiementiert.
Hier können die Tabellen problemlos gelesen werden.

Was muß ich in Servoy anstellen, damit ich die 4D-Datenbank-Tabellen verarbeiten kann?

Danke für Info.

Harro

PS: Kennt jemand 4D? Ist das ein Exot oder eine (weit) verbreitete Entwicklungsoberfläche?

2

Donnerstag, 11. Oktober 2012, 18:39

Hallo,

Du kannst die Datei im Debug (Smart) Client über Ablage/Import Export importieren oder als csv-Datei speichern und diese über Code einlesen. Beispiele dafür gibt es im Forum reichlich. Auf ServoyForge hat jemand auch eine eigene Anwendung für den Zweck geschrieben (kenne ich nicht): https://www.servoyforge.net/projects/csvimporter

zu 4D: ich würde sagen, 4D ist etwa so exotisch wie FileMaker oder FoxPro. 4D gibt es schon seit 20 Jahren und ist schon recht weit verbreitet.

3

Dienstag, 16. Oktober 2012, 09:43

Hallo Patrick,
ich glaube, ich habe mich nicht verständlich ausgedrückt.
Oder ich habe Dich nicht verstanden.

Ich will ein Interface zu meiner Anwendung "basteln", welches jede Nacht über den ODBC-Treiber die 4D-Datenbank liest und einen Datenabgleich vornimmt.

Meine Frage ist, wie kann ich die 4D Datenbank ( über den ODBC-Treiber ) so einbinden, daß ich die Tabellen in Servoy lesen kann.

Gruß Harro

EWI

Anfänger

Beiträge: 80

Wohnort: Feldkirch, Vorarlberg, Österreich

  • Private Nachricht senden

4

Donnerstag, 18. Oktober 2012, 16:50

Hallo Harro,

ich kenne 4D indirekt über die Anwendung ArchiPHYSIK (http://www.archiphysik.at). Es kommt darauf an ob der Entwickler eine SQL-Datenbank oder die Programmeigene *.4DD Datenbank verwendet hat. Ahnlich wie bei FoxPro dort kann man auch wahlweise mit SQL oder *.dbf (bzw. *.dbc) arbeiten. Im Falle von *.4DD kanns mühsam werden, weil da nicht nur die Tabellen drinstecken.

Sg Roland

woody

Trottel vom Dienst :)

Beiträge: 69

Wohnort: 83119 Obing

  • Private Nachricht senden

5

Freitag, 19. Oktober 2012, 10:21

Hallo Harro,

Von Servoy zu 4D kommst zu wie mit jeder anderen Datenbank-Anbindung: du schmeisst nen JDBC-Treiber in den Servoy\application_server\drivers\ Ordner, und startest Servoy danach neu.

Bleibt blos die Frage, wo man den JDBC für 4D herbekommt. Ein kurzes Guggeln zeigt, dass es anno 2004 mal ne OpenSource-Version gab, die dann aber durch einen echten 4D-Treiber abgelöst wurde. Wenn man bei 4D sucht, so findet man keinerlei Referenz auf JDBC (!), egal ob bei den Downloads, oder in deren KB. In den Supportforen kann man lesen, dass wohl bis zur Version 10 ein JDBC dabei war, aber ab Version 11 der nicht mehr seitens 4D existiert, und man auf ODBC setzt. D.h. Du musst von seiten Servoy zuerst ne JDBC2ODBC Bridge verwenden, damit kann man dann die ODBC-Treiber ansprechen.

Welche Version ist denn deine 4D-Datenbank? Vielleicht haste ja Glück, und dat Dingens is noch Version 10 :)

Ansonsten kannste ja mal den 4D Installer von http://www.4d.com/downloads/products.html runterladen, testweise alles installieren und schaun, ob da irgendwo ein JDBC Treiber in den Verzeichnissen rumkullert. Oder bei denen direkt nachfragen?

Ansonsten ist das hier auch noch als Lösungsansatz interessant:
http://www.it-hempel.de/content/jdbc-odbc-bridge-als-datasource
Servus

wOOdy

6

Freitag, 19. Oktober 2012, 10:53

Hallo wOOdy,
danke für Deine Ausführungen.

Der Kunde hat eine 4D-Datenbank Version 12.3

Der Softwarelieferant wollte mich dazu "zwingen" SOAP zu benutzen.
Ich hätte alle SOAP-Funktionen beantragen müssen.
Habe damit auch angefangen, aber dann kamen auf einmal Lieferzeiten von Wochen ins Gespräch ( und natürlich auch die entsprechenden Kosten ).
Ich denke, damit wollte man kontrollieren was ich auslese.

Habe mir dann 4D installiert und den ODBC-Treiber installiert.
Nach einigen Anlauf-Schwierigkeiten funktioniert der nun.
Der ODBC-Treiber ist leider überhaupt nicht gesprächig. Bei jedem Fehler kommt: "Failed to parse Statement".
Das war etwas mühselig.

JDBC ist im 4D überhaupt nicht mehr enthalten.

Werde mich also auf die "JDBC2ODBC Bridge" stürzen (müssen).

Da es sich bei meinem Programm um ein Batch-Programm handelt, werde ich den Fuchs noch mal bemühen.
Dann später die Realisation in Servoy.

Gruß Harro

woody

Trottel vom Dienst :)

Beiträge: 69

Wohnort: 83119 Obing

  • Private Nachricht senden

7

Freitag, 19. Oktober 2012, 15:46

Jepp, die haben keinerlei JDBC Treiber mehr, ich hab's nun amtlich. Da ich in naher Zukunft ebenfalls auf ne 4D Datenbank zwecks Datenaustausch zugreifen muss, hat mich dein Thema schon vorab interessiert :)
Der 4D-Support hat mir nun gerade geantwortet:
--------------------------
nein, einen JDBC Treiber von 4D gibt es nicht.
4D unterstützt einen ODBC Treiber. Des Weiteren funktioniert das nicht so einfach mit einem solchen Treiber auf eine 4D Datenbank zuzugreifen. Hier müssen Sie sich mit dem Entwickler der anderen Software in Verbindung setzen das dieser Ihnen eine Schnittstelle freischaltet (z. B. über REST oder ODBC).
--------------------------
Tja...
Servus

wOOdy

8

Donnerstag, 25. Oktober 2012, 09:46

In der Applikation - mit der ich zu tun habe - kann man ODBC-Zugriffe freischalten.
Der USER heißt dann "ODBC".

Gemein ist, daß der ODBC-Treiber keinerlei qualifizierte Meldungen über Fehler abgibt.

Nur die stoische Meldung: "Failed to parse Statement"

Ich habe mir zuerst über SQLCOLUMNS die Feldnamen aller Tabellen geholt und diese mit dem Fuchs in entsprechende Dateien geschrieben, Umlaute konvertiert und Feldnamen in eckige Klammern gesetzt.
Außerdem sind deutsche Umlaute in den Feldnamen in 4D erlaubt, werden aber nicht im ODBC-Treiber unterstützt.

Felder die Namen von Schlüsselworten haben, müssen mit eckicken Klammern benutzt werden.
Ein Feld mit dem Namen "WÄHRUNG" muß im ODBC mit "WAHRUNG" aufgerufen werden.

SELECT [Kundennummer], [START], [WAHRUNG] from Firmen ....

.... aber vielleicht weiß Du ja alles schon :)

Gruß Harro

Social Bookmarks

Thema bewerten