Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi aus ms access db im utf-8 format einlesen (https://www.delphipraxis.net/46045-aus-ms-access-db-im-utf-8-format-einlesen.html)

shmia 18. Mai 2005 12:52

Re: aus ms access db im utf-8 format einlesen
 
Man muss richtig casten, dann klappt es mit den WideStrings.
Delphi-Quellcode:
var
   f : TField;
....
while not ADOTable1.eof do
    begin

      child:= doc.createElement('Records');
      root.appendchild(child);
      for i:=0 to ADOTable1.FieldCount-1 do
      begin
        // erst mal das aktuelle Feld in Variable merken
        f := ADOTable1.Fields[i];

        child1:=doc.createElement(f.FieldName);
        child.appendchild(child1);

        // prüfe, ob der Inhalt (NULL) ist
        if f.IsNull then
            temp := '(NULL)'

        // Sonderbehandlung für WideStringfelder
        // nur mit dem Cast kommt man an das Property Value vom Typ WideString ran
        // (evtl. ginge es auch über .AsVariant)
        // .AsString geht definitiv nicht, da .AsString immer einen Ansistring liefert
        else if f is TWideStringField then
            temp := TWideStringField(f).Value   // property Value: WideString
        else
            temp := f.AsString;  // für numerische Felder, usw.
       
       child1.appendChild(doc.createTextNode(UTF8encode(temp)));
      end;
    ADOTable1.Next;
    end;

matei 19. Mai 2005 13:33

Re: aus ms access db im utf-8 format einlesen
 
danke für die zahlreichen tipps, aber delphi7 reicht für das problem leider nicht aus :cry:

da nützen auch die vielen gut gemeinten casts nix!

it's time for a change ... >delphi7 :thumb:

Bernhard Geyer 19. Mai 2005 13:54

Re: aus ms access db im utf-8 format einlesen
 
Zitat:

Zitat von matei
danke für die zahlreichen tipps, aber delphi7 reicht für das problem leider nicht aus :cry:

Ich hab D6 und ich kann 100% Unicode :???:

Evtl. noch folgende Patches in der adodb.pas nötig (jedenfalls bei D6 nötig).

Zeile 1060:

adLongVarBinary, adLongVarBinary, adEmpty, adChar, adChar, adBigInt,
nach
adLongVarBinary, adLongVarBinary, adEmpty, adChar, adVarWChar, adBigInt,

Zeile 1178:

ftString, ftWideString: Result := adVarChar;
nach
ftString: Result := adVarChar;
ftWideString: Result := adVarWChar;


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:04 Uhr.
Seite 2 von 2     12   

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