DBFNTX->FOXCDX per DbExport()

Zugriff, Engines, Konvertierung. Von ADS über DBF bis zu SQL.

Moderator: Moderatoren

Antworten
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

DBFNTX->FOXCDX per DbExport()

Beitrag von Jan »

Ich habe eine eher banale Frage,m die aber weiterreichende Folgen haben könnte.

Inhalte in dbf im Format DBFNTX sind doch normalerweise (wenn ich nichts anderes angebe) als OEM gespeichert. Bei FOXCDX meine ich mich erinnern zu können, das dort immer ANSI gespeichert wird. Stimmt das so weit?

Wenn das soweit stimmt: Ich habe bei meinem Kunden alle vorhandenen dbf nach FOXCDX konvertiert per DbExport(). Ich hätte das natürlich auch mit eigenem Code machen können, aber da ich sonst nichts weiter machen wollte schien mir das der schnellste Weg zu sein. Jetzt stehe ich aber vor dem Problem, das der ADS manche der dbf nicht in das Data Dictionary übernehmen möchte. Da das FOXCDX sind habe ich natürlich eingestellt, das die ANSI sein sollen. Der meckert aber bei manchen dbf was von wegen "Error 7147: The collation name could not be found in the repository". Wenn ich jetzt diese monierten dbf mit der Einstellung OEM übernehme, dann schluckt der die. Warum? Die sind doch alle durch exakt die gleiche Routine gelaufen beim konvertieren.

Gibt es eigentlich irgendeine Möglichkeit festzustellen, ob eine dbf OEM oder ANSI ist? Unabhängig davon ob die nun DBFNTX oder FOXCDX ist?

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: DBFNTX->FOXCDX per DbExport()

Beitrag von Tom »

Hallo, Jan.

DBFNTX ist immer OEM.

Wie das aber in der Fox-Tabelle ankommt, hängt davon ab, welche Einstellung SET CHARSET im Moment des Umkopierens hat. Irgendwo in Deinem Programm, mit dem Du konvertierst, steckt ein SET CHARSET TO OEM.
Herzlich,
Tom
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: DBFNTX->FOXCDX per DbExport()

Beitrag von Jan »

Hallo Tom,

Danke für die Bestätigung. bei der DBFNTX war ich mir sicher. Bei der FOXCDX nicht so wirklich, weil ich in der Onlinehilfe nicht wirklich schlüssiges dazu gefunden habe.

Aber das beutet dann, wenn ich im Code der Konvertierungsroutine SET CHASRSET TO ANSI stehen habe, dann wird die DBFNTX als OEM gelesen, die FOXCDX aber als ANSI? Enschuldige diese Frage, aber da will ich jetzt ganz auf Nummer sicher gehen, bevor da wieder was schief läuft.

Und die Frage, warum manche konvertierte Dateien OEM sind, manche aber ANSI, ist mir noch nicht ganz klar. Ich kann mir nicht wirklich vorstellen, das der ADS da was fehlinterpretieren könnte.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: DBFNTX->FOXCDX per DbExport()

Beitrag von Tom »

Hallo, Jan.

SET CHARSET to hat keine Wirkung darauf, wie die Tabellen betrachtet werden. DBFNTX ist immer in OEM, bei FOX kann es wechseln. SET CHARSET hat darauf aber keinen Einfluss - die Tabellen sind, wie sie eben sind. Du kannst eine Anwendung haben, die in ANSI "programmiert" ist, aber dennoch problemlos mit DBFNTX arbeiten, das ja OEM verwendet. Allerdings muss dann bei allen Tabellenzugriffen konvertiert werden (was automatisch geschieht).

Es hat lediglich darauf Einfluss, mit welchem Zeichensatz z.B. FOX-Tabellen gespeichert werden, wenn z.B. DbExport() verwendet wird oder eine Tabelle sonstwie erzeugt wird. Ist OEM eingeschaltet, entsteht die FOX-Tabelle in OEM, sonst in ANSI.

Siehe Doku, "FOXDBE - Data-Komponenten":

Welcher Zeichensatz zum Speichern von Textdaten verwendet wird, hängt bei der FOXDBE von der SET CHARSET Einstellung ab, die bei der Erzeugung einer DBF Datei gewählt wurde. Diese Information wird im Datei-Header eingetragen und kann nach der Erzeugung der Datei nicht mehr verändert werden.
Herzlich,
Tom
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: DBFNTX->FOXCDX per DbExport()

Beitrag von Jan »

Hallo Tom,

noch einmal Danke. Auch das bestätigt meine Meinung dazu. Daran kann es also nicht mehr liegen.

Jetzt muß ich mich nur noch auf die Suche nach dem Unterschied in den konvertierten dbf machen ...

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: DBFNTX->FOXCDX per DbExport()

Beitrag von Tom »

Hallo, Jan.

Byte 29 im Header der Tabelle verrät die Codemarkierung:

http://msdn.microsoft.com/de-de/library ... 71%29.aspx
Herzlich,
Tom
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15689
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: DBFNTX->FOXCDX per DbExport()

Beitrag von brandelh »

Hi,

set charset spielt natürlich bei der Anzeige eine Rolle ! Allerdings stimmt es meistens ;-)

Wenn die Daten in der DBF (egal welcher) anders gespeichert sind wie die EXE ist, wird für die Anzeige konvertiert, sonst nicht.
Das kann man erkennen wenn man versucht von einer GUI (ANSI) Anwendung einige Zeichen in der DBF (OEM) zu speichern, die nicht eindeutig zurückverwandelt werden können, z.B. das originale (R) Zeichen. Bei allen anderen Zeichen stimmt es automatisch.

Es gibt tatsächlich die Möglichkeit eine DBFNTX zumindest in der DBF selbst in ANSI zu speichern (AmiPro hat das getan !) - dafür gibt es das ANSI Flag in der DBE, aber laut einer früheren Auskunft von Alaska entspricht eine solche DBF nicht mehr dem Standard. Es wäre nur dafür gedacht, daten z.B. von AmiPro richtig auslesen zu können.

Eine FOXCDX Datei ist dann in ANSI, wenn sie unter Xbase++ in ANSI CHARSET erstellt wurde.
Wenn OEM aktiv war, ist sie in OEM ... nachträglich wird dies nicht mehr geändert !

Eigentlich sollte DBExport() damit klar kommen, da dies ja eine Einstellung des Select Bereiches ist, ob aber alle Optionen abgedeckt sind und man das alles richtig eingestellt hat ...
Wie das bei ADS ist weiß ich nicht.
Gruß
Hubert
Antworten