Announcement

Collapse
No announcement yet.

Paradoxe Umlaute über ADODB mit BDE

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Paradoxe Umlaute über ADODB mit BDE

    Hallo Entwickler,

    <b>Problem</b>

    <font color="#880000">- Umlaute werden falsch dargestellt/übergeben.</font>

    <b>Hintergrund</b>

    - Eine (Fremd-)Anwendung verwendet eine Paradox-Datenbank.

    - Es soll eine (externe) Verbindung zu dieser Datenbank über ADODB (ADO/DAO) realisiert werden.

    - Installiert sind: BDE 5.01, MSDAC 2.6, Jet 4.0 SP 8

    - Die (Fremd-) Anwendung ist in der Registry unter
    [...]\Borland\Locales\{Pfad-und-Name-der-Anwendung}
    als REG_SZ (Zeichenkette) eingetragen und hat den Wert "DEU".

    <b>Details</b>

    - Der Zugriff geschieht derzeit über VBScript und soll nur eine einfache HTML-Ausgabe produzieren (lokal, nicht auf einen Webserver!).

    - Der Zugriff auf die Datenbanktabellen funktioniert soweit einwandfrei (lesen), bis auf die fehlerhafte Wiedergabe von Umlauten.

    - Beim Schreiben kommen manchmal Fehlermeldungen, die aber aufgrund der "Längenbegrenzung auf 65 Zeichen" beruhen (dies stellt kein Problem dar).

    - Verschiedene Versuche über den BDE-Administrator für "Paradox-Treiber (*.db )" die Sprache umzustellen (LANGDRIVER) schlugen fehl.

    - Egal ob als OLEDB (Jet/ISAM), oder direkt über ADODB (Driver= ... Paradox-Treiber (.db )) verwendet wurden, war allen Ausgaben eines gemeinsam: <b>Umlaute wurden als andere Zeichen angezeigt</b>.

    - Der einfachste Weg eine "ASCII-Übersetzungtabelle" zu verwenden konnte nicht umgesetzt werden, da einige Umlaute als "-" geliefert werden und "-" eben auch einfach nur "-" sein kann.

    <b>Frage</b>

    <font color="#880000"><b>- Wie {kann ich|muss ich} die Codepage/Ladessprache/Charset oder was auch immer einstellen um die Umlaute (a) korrekt lesen und (b) korrekt schreiben zu können.</b></font>

    <i>Und immer daran denken:
    Auch wenn das Rad zweimal erfunden wird, hat man noch lange kein Zweirad.</i>

  • #2
    Hallo,

    das Problem besteht darin, dass beim Zugriff auf eine Paradox-Datenbank durch die BDE immer gleich 2 verschiedene Stellen (Erbe des DOS-Ursprungs) die Interpretation des Zeichensatzes bestimmen:

    1. Tabellen-Eigenschaft <I>Sprachtreiber</i> (siehe <i>Datenbankoberfläche | Tools | Tabellenoperation | Strukturinfo | Sprachtreiber</i>) wird im Header der DB-Datei gespeichert und legt die binäre Speicherung der Zeichen in der Datei fest.

    2. BDE-Alias-Eigenschaft <i>LANGDRIVER</i> legt die Anzeige in der Benutzeroberfläche fest.

    Nur dann, wenn <b>beide</b> Einstellungen zusammenpassen, stellt die BDE den Zeichensatz korrekt dar.

    Beim Zugriff über ADO gilt das Gleiche, solange die DB-Datei <b>keinen</b> Windows-konformen Zeichensatz (Eigenschaft <I>Sprachtreiber</i>) nutzt, wird es diese Darstellungsprobleme geben. Beim Sprachtreiber-Wert <b>WEurope ANSI</b> gibt es zum Beispiel keine Problem bei Umlauten, wenn das Programm über ADO (OLE DB Provider der MS Jet Engine 4.0) auf die Paradox-Datenbank zugreift. Bei der folgenden Konfiguration bleiben sowohl beim Lesen als auch beim Einfügen von neuen Datensätzen die Umlaute erhalten, wenn die Paradox-Tabelle <i>Umlaut.db</i> den Sprachtreiber <i>WEurope ANSI</i> nutzt:
    <pre>
    <b>object</b> ADOConnection1: TADOConnection
    Connected = True
    ConnectionString =
    <font color="#9933CC">'Provider=Microsoft.Jet.OLEDB.4.0; Data Source=C:\Database;Extende'</font> +
    <font color="#9933CC">'d Properties=Paradox 5.x;Persist Security Info=False'</font>
    LoginPrompt = False
    Mode = cmShareDenyNone
    Provider = <font color="#9933CC">'Microsoft.Jet.OLEDB.4.0'</font>
    Left = 64
    Top = 48
    <b>end</b>
    <b>object</b> ADODataSet1: TADODataSet
    Active = True
    Connection = ADOConnection1
    CursorType = ctStatic
    CommandText = <font color="#9933CC">'Umlaut'</font>
    CommandType = cmdTableDirect
    Parameters = &lt;&gt;
    Left = 112
    Top = 48
    <b>end</b>
    </pre&gt

    Comment


    • #3
      Das ist doch schon einmal ein Anfang ...

      <small>Bezug: Antwort von Andreas Kosch vom 02.08.2004, 06:58</small>

      Vielen Dank für die schnelle Antwort und den Programmcode der
      offensichtlich in Delphi vorliegt. Doch Delphi kommt hier leider
      nicht zum Einsatz (<b>VBScript, VBA, VB</b>).

      Das Vorgehen wie unter 1. beschrieben kann nicht ausgeführt werden.
      Eine <i>Datenbankoberfläche</i> existiert in der beschriebenen
      Umgebung nicht.

      Die <i>Fremdanwendung</i> benutzt zwar eine Paradox-Datenbanken,
      bietet aber keine Menüfunktionen zum direkt Einstellen von Sprachtreibern
      oder ähnlichen.

      Folglich bleibt die <i>Sprach-Synchronisation</i> über BDE mittels
      Einstellung von <i>LANGDRIVER</i>.

      Daraus folgt die Frage:

      <b>Wie kann man die Spracheinstellung eine Paradox-Tabelle bestimmen?</b>

      Zu 2. frage ich mich ob man über den Connection-String den LANGDRIVER angeben könnte.
      An verschiedenen Stellen heißt es ja das ADO gerade BDE benutzt.

      Oder kann ich ADO <i>überzeugen</i> einen anderen Sprachtreiber zu verwenden?

      Ich habe bisher auch keine Textstellen gefunden die beschreibt wie man <i>BDE</i>
      anstelle von ADO verwenden kann, bzw, ob dies überhaupt grundsätzlich möglich ist.

      <small>Tja, wie man sieht verhält es sich hier wie beim Tapezieren.
      Erst will man nur Tapezieren, meint dann man könne ja gleich die Deckenleisten autauschen,
      die Steckdosen evtl. modernisieren, und ....</small&gt

      Comment


      • #4
        Hallo,

        &gt;..der offensichtlich in Delphi vorliegt.

        beim Zugriff auf die COM-Objekte von ADO spielt die tatsächlich verwendete Sprache keine Rolle. Es gibt somit im Detail keinen Unterschied zwischen VBScript und Delphi.

        &gt;..das ADO gerade BDE benutzt...

        Dies ist in der Tat der Fall, siehe die folgenden Einträge in der Microsoft Knowlegde Base:

        a) http://support.microsoft.com/default.aspx?scid=kb;en-us;307455

        b) http://support.microsoft.com/default.aspx?scid=kb;en-us;286246

        c) http://support.microsoft.com/default.aspx?scid=kb;en-us;263561

        &gt;Wie kann man die Spracheinstellung eine Paradox-Tabelle bestimmen?

        In VBScript ist das nicht möglich (es wird eine Sprache benötigt, die mit den IDAPI-Funktionen der BDE und mit Zeigern umgehen kann).

        &gt;Oder kann ich ADO überzeugen einen anderen Sprachtreiber zu verwenden?

        Über die <i>Locale</i>-Eigenschaft der Verbindungszeichenfolge gibt es einen theoretischen Weg, wobei der Treiber allerdings darauf reagieren muss (in der MDAC-Hilfedatei steht, dass dieser Eintrag "freiwillig" ausgewertet werden sollte, aber nicht muss). Ich glaube aber nicht, dass dieser Eintrag bei dem Sprachtreiber-Problem weiterhilft. Denn das eigentliche Problem liegt darin, dass die Fremddatenbank (Paradox-Tabelle) anscheindend noch einen DOS-Zeichensatz verwendet. Und das ist in der Windows-Welt eher unüblich

        Comment

        Working...
        X