Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Umlaute aus dBase-Datei (https://www.delphipraxis.net/146868-umlaute-aus-dbase-datei.html)

gpl 28. Jan 2010 12:02

Datenbank: dbase • Version: 5.0 • Zugriff über: ADO

Umlaute aus dBase-Datei
 
Hallo,
eigentlich sollte mein Projekt eine Kleinigkeit sein, aber machmal kommt es anders...

Also:
Gegeben ist eine dBase-Datei aus einem Fremdsystem mit Kundendaten. Mein Programm soll auf diese DB zugreifen, eine Kundenadresse aufgrund der Kundennummer heraussuchen und diese auf ein Dokument drucken. Die DB liegt übrigens im Netzwerk.
Die BDE sollte nach möglichkeit nicht benötigt werden.

Ich greife also per ADO auf die Dbase-Datei zu und kann problemlos den gewünschten Datensatz lesen und damit auch ausdrucken.

Allerdings verzweifele ich langsam an folgender Kleinigkeit:

Entwickelt wurde die App unter D2007 auf einem Vista-Rechner. Hier klappt das Programm hervorragend, inklusive dem Ausdruck auf dem Drucker, also genau so wie es sein sollte.
Beim Kunden soll die App allerdings auf einem XP-Rechner laufen. Teste ich nun mein Programm unter XP, dann läuft es ganz normal, allerdings werden hier die deutschen Umlaute nicht korrekt angezeigt. (Aus dem ü wird z.B. eine hochgestellte 3)

Seit Tagen suche ich nun eine Lösung dafür. Vermutlich liegt es an den Datenbanktreibern, die unter Vista eine andere Version haben, als unter XP.
Trotzdem muss es doch eine Möglichkeit geben, einen anderen Zeichensatz anzugeben.

In der dBase-Datei finde ich als Sprachtreiber: dBase ENU cp437

Weiß jemand, wie ich der ADOConnection den richtigen Sprachtreiber beigringen kann?

Ich habe schon mit "Locale Identifier" im ConnectionString rumprobiert, hat aber nichts gebracht. Auch andere Tipps, die ich im Internet gefunden habe, haben keine Änderung bewirkt.
Ich habe es mit dem "Microsoft OLE DB Provider for ODBC Drivers" als auch mit dem "Microsoft Jet 4.0 OLE DB Provider" probiert. Hat alles nichts gebracht.

Wie gesagt, langsam verzweifele ich. Ich habe jetzt schon mehr Zeit in das Problem gesteckt, als ich für die eigentliche Entwicklung des Programm benötigt habe.

Also: Für Vorschläge bin ich sehr dankbar!

p80286 28. Jan 2010 12:32

Re: Umlaute aus dBase-Datei
 
Hallo GPL,

ähnliches ist mir mit anderen Datebanken passiert. Da ich die Herumhampelei mit den CodePages satt war habe ich mir einfach eine eigene Übersetzungstabelle dazwischen geschaltet und dann war Ruhe.

ungefähr so:
Delphi-Quellcode:
var
  Transtab : array [0..255] of char;

....
  Transtab[byte('³']:='ü';
....

  if pos('³',inString)>0 then
    for i:=1 to length(inString) do
      inString[i]:=Trabstab[byte(inString[i])]
  else
    // mach nix
sollte bei AnsiStrings klappen.

Gruß
K-H

gpl 28. Jan 2010 12:38

Re: Umlaute aus dBase-Datei
 
Hallo K-H,

sowas habe ich mir auch schon überlegt, aber da ich den Ausdruck über die Rave-Komponenten mache und diese direkt auf die SQL-Kompo zeigen, bringt mir das nichts.
Ich müsste große Teile des Projekts neu schreiben und mit irgendwelchen Zwischentabellen arbeiten.

Es muss doch irgendwie möglich sein, der ADOConnection einen korrekten Zeichensatz mitzugeben. Dann wäre mein Problem schon gelöst.

Trotzdem Danke für den Tip.

Gerd

p80286 28. Jan 2010 12:51

Re: Umlaute aus dBase-Datei
 
Eine andere Möglichkeit wäre der Font bzw. sein Zeichensatz, der für die Ausgabe genutzt wird.
Im Zweifelsfalle sollte man die Zeichen die durch einen Computer gehen immer als Zahlen betrachten. Die Buchstaben, die wir dann sehen, sind letztlich von der darstellenden Font/Zeichensatzkombination abhängig.

Was passiert denn wenn Du daran drehst?

Gruß
K-H

Edit:
Wenn Du einen ODBC-Treiber dazwischen hast, dann könnte man auch da den benötigten Zeichensatz(Codepage einstellen

gpl 28. Jan 2010 13:19

Re: Umlaute aus dBase-Datei
 
Danke für die schnelle Antwort!

Mit den Font-Einstellungen hat das wohl nichts zu tun, zumal es unter Vista ja läuft.

Die ADO-Komponente greift über ODBC auf die DBase-Datei zu. Ich habe in den Datenquellen ein DSN eingerichtet. Leider kann man dort keine weiteren Parameter einstellen. Also auch Sackgasse!

Auf meinem XP-Testrechner ist u.a. auch die BDE installiert. Selbst wenn ich hier die korrekten Spracheinstellungen vornehme, bringt das nichts. Allerdings musste ich, damit die ADO-Verbindung überhaupt läuft, in der Registry einstellen, dass ADO nicht die BDE benutzt:

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engi nes\Xbase]
"BDE"=dword:00000002

Damit funktionierte auf den Rechnern ohne BDE der Zugriff per ADO, allerdings wie gesagt, ohne Sonderzeichen.

Ich habe auf dem Testrechner die alte Paradox7-Software installiert. Damit kann ich auf die dBase-Datei zugreifen und er zeigt mir hier auch die Sonderzeichen korrekt an. Also muss es grundsätzlich funktionieren, nur wie ???

Gerd

PS: Ich habe gerade die Datei mal in Excel importiert. Auch hier werden die Sonderzeichen nicht korrekt angezeigt. Ich vermute, das ist ein grundsätzlichen Problem mit dem Treiber.

p80286 28. Jan 2010 13:38

Re: Umlaute aus dBase-Datei
 
Zitat:

Zitat von gpl
Mit den Font-Einstellungen hat das wohl nichts zu tun, zumal es unter Vista ja läuft.

a) Dann spiel mal in einer stillen stunde mit den vorhandenen Fonts herum.
b) Es funktioniert auf einem Rechner auf dem Vista als Betriebssystem installiert ist. Jetzt müssen nur noch die anderen Einstellungen und Treiber auf die Reihe gebracht werden.

Zitat:

Zitat von gpl
...
eingerichtet. Leider kann man dort keine weiteren Parameter einstellen. Also auch Sackgasse!

nicht ganz. Unter Optionen kann die Sortierreihenfolge eingestellt werden. Versuch's mal damit.

Zu der BDE sag ich jetzt mal nichts,da mir zu viel vom Hintergrund fehlt.

Gruß
K-H

gpl 28. Jan 2010 14:09

Re: Umlaute aus dBase-Datei
 
ja, die Sortierreihenfolge hatte ich schon gefunden, leider gehts damit auch nicht.

hoika 28. Jan 2010 14:19

Re: Umlaute aus dBase-Datei
 
Hallo,

Zitat:

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engi nes\Xbase]
Wo doch dort eh schon drin bist

DataCodePage müßte der Eintrag sein.

Probier mal ANSI.


Für ODBC gibt es auch einen ODBC CodePage Translator

Ob das auch für DBase gilt, weiss ich nicht.


Heiko

gpl 28. Jan 2010 14:38

Re: Umlaute aus dBase-Datei
 
100 Punkte gehen an .... HEIKO!

Klasse, das war's! Jetzt funktioniert es.

Ich hatte mir ja gedacht, dass es nur eine kleinigkeit sein konnte, aber DARAUF wäre ich im Leben nicht gekommen.

Herzlichen Dank nochmal an alle.

hoika 28. Jan 2010 15:13

Re: Umlaute aus dBase-Datei
 
Hallo,

was war es denn ?

ANSI

?


Heiko


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:20 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz