Delphi-PRAXiS
Seite 1 von 2  1 2      

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)

matei 17. Mai 2005 13:47

Datenbank: MS Access • Version: 2003

aus ms access db im utf-8 format einlesen
 
hallo zusammen,
wie kann man aus einer ms access db im utf-8 format einlesen, d.h. den Inhalt der Fields direkt als UTF8String speichern? :gruebel:

Ich verwende Delphi7 und MS Access 2003.
vielen dank für gute ratschläge...

[edit=alcaeus]Infos hinzugefuegt. Mfg, alcaeus[/edit]

DP-Maintenance 17. Mai 2005 13:47

DP-Maintenance
 
Dieses Thema wurde von "alcaeus" von "XML" nach "Datenbanken" verschoben.
Beitraege zu Datenbanken bitte auch in die Datenbanksparte. Danke

Bernhard Geyer 17. Mai 2005 13:53

Re: aus ms access db im utf-8 format einlesen
 
Eigentlich gar nicht - Und wieso UTF8? Access kann doch Unicode (Jedenfalls bei verwendung von ADO über JET-Provider)!
Und für die Wandlung nach UTF8 gibt es die Funktion UTF8Encode.

matei 17. Mai 2005 15:22

Re: aus ms access db im utf-8 format einlesen
 
hab grad mit ado 2.6 und den richtigen treibern die felder aus der access db eingelesen, aber ich erhalte bei den chinesischen zeichen trotzdem nur viele fragezeichen. es ist auch kein darstellungsproblem, sondern er schreibt tatsächlich fragezeichen ins XML file.

brauch ich eine aktuellere delphi version?

Bernhard Geyer 17. Mai 2005 15:36

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

Zitat von matei
hab grad mit ado 2.6 und den richtigen treibern die felder aus der access db eingelesen, aber ich erhalte bei den chinesischen zeichen trotzdem nur viele fragezeichen. es ist auch kein darstellungsproblem, sondern er schreibt tatsächlich fragezeichen ins XML file.

brauch ich eine aktuellere delphi version?

Über welche Komponente schreibst Du in XML-File? Könntest Du etwas Beispielcode posten.
Evtl. verwendest Du ja irgendwo statt WideString nur (Ansi)-String.

shmia 17. Mai 2005 16:01

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

Zitat von matei
hab grad mit ado 2.6 und den richtigen treibern die felder aus der access db eingelesen, aber ich erhalte bei den chinesischen zeichen trotzdem nur viele fragezeichen. es ist auch kein darstellungsproblem, sondern er schreibt tatsächlich fragezeichen ins XML file.

brauch ich eine aktuellere delphi version?

ADO Express ist schlecht auf WideStrings vorbereitet :-(
Deshalb geht's nur so:
Delphi-Quellcode:
var
   feldinhalt : WideString;
begin
   feldinhalt := (dataset.FieldByName('Feldname') as TWideStringField).Value;
end;

matei 18. Mai 2005 08:22

Re: aus ms access db im utf-8 format einlesen
 
ich glaub ich bin kurz vorm Ziel, aber der EDatabaseError will einfach nicht weg. diesmal poste ich den Code mit dazu.

Delphi-Quellcode:
unit xmlunit;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, Db,MSXML_TLB,ComObj,DBTables, ADODB;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Memo1: TMemo;
    ADOConnection1: TADOConnection;
    ADOTable1: TADOTable;
    ADODataSet1: TADODataSet;
    procedure Button1Click(Sender: TObject);

  private
    function makeXml(table:TADOTable):Integer;
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  DataList:TWideStringField;
  doc:IXMLDOMDocument;
  root,child,child1:IXMLDomElement;
  text1,text2:IXMLDOMText;
  nlist:IXMLDOMNodelist;
  dataRecord:String;

implementation

{$R *.DFM}
function TForm1.makeXml(table:TADOTable):Integer;

var
  i  : Integer;
  xml : String;
  temp,temp2 : WideString;
begin
  try
    ADOTable1.close;
    ADOTable1.open;
    xml := ADOTable1.TableName;
    doc := CreateOleObject('Microsoft.XMLDOM') as IXMLDomDocument;
    //root name of the xml file = table name
    root := doc.createElement(xml);
    doc.appendchild(root);

    while not ADOTable1.eof do
    begin

      child:= doc.createElement('Records');
      root.appendchild(child);
      for i:=0 to ADOTable1.FieldCount-1 do
      begin

        child1:=doc.createElement(ADOTable1.Fields[i].FieldName);
        child.appendchild(child1);

        //*******************************************************************
        //EDatabaseError!!!!!!!
        //im FieldByName steht der richtige Wert
        //beim Debugging steht bei Value: Ungültiger Ausdruck im Evaluator
        temp2 := ((AdoDataset1.FieldByName(ADOTable1.Fields[i].AsVariant)) as TWideStringField).Value;
        //*******************************************************************

        if temp2 ='' then
              temp :='null' //a default string
             else
          temp := temp2;

       child1.appendChild(doc.createTextNode(UTF8encode(temp)));
      end;
    ADOTable1.Next;
    end;
    doc.save(xml+'.xml');
    //just for test
    memo1.lines.Append(doc.xml);
    Result:=1;
  except
    on e:Exception do
      Result:=-1;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);

begin

if makeXml(ADOTable1)=1 then
    showmessage('XML wurde erstellt')
  else
    showmessage('Fehler beim Erstellen des XML-Files');

end;


end.

marabu 18. Mai 2005 09:36

Re: aus ms access db im utf-8 format einlesen
 
Müsste der Quellcode an der fraglichen Stelle nicht eher so aussehen?

Delphi-Quellcode:
with ADOTable1.Fields[i] do
  if IsNull
    then temp := 'null'
    else temp := AsString;
Seit Access 2000 werden Textfelder als 2-Byte Unicode gespeichert. Der Typecast TWideStringField ist unnütz, das Feld ist selbst von diesem Typ. Schreiben und Lesen kannst du mit der property AsString - und zwar ganz normalen Ansi-Text, wie du ihn von Windows gewohnt bist.

Die UTF-8 Kodierung ist zwar beim MSXML Standard, aber du kannst dein Dokument leicht auf ISO-8859-1 umstellen und brauchst dich dann auch um diese Konvertierung nicht zu kümmern.

Grüße vom marabu

matei 18. Mai 2005 11:49

Re: aus ms access db im utf-8 format einlesen
 
das Problem bleibt dennoch bestehen.
Ich will chinesische Zeichen einlesen und diese dann wieder in einem XML-File ausgeben. Die chinesischen Zeichen werden in der Datenbank richtig angezeigt und wenn ich eine Tabelle nach XML exportiere dann werden die Zeichen auch richtig angezeigt.

-> es muss doch irgendwie möglich sein, die Daten im Programm richtig(als Unicode String) einzulesen, notfalls über nen ByteStream.

oder? :gruebel:

marabu 18. Mai 2005 12:35

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

Zitat von matei
Ich will chinesische Zeichen einlesen und diese dann wieder in einem XML-File ausgeben.

Chinesisch habe ich völlig übersehen. Sieht schlecht aus mit Chinesisch und D7 - fürchte ich. Du wirst dich nach Unicode-Komponenten umsehen müssen. D7 macht Windows Ansi-Text aus dem schönen Unicode in der Access Datenbank und da nützt ein späterer TypeCast nicht wirklich. Die Datenbank mit dem chinesischen Text scheint nicht mit D7 erstellt worden zu sein, sonst wärst du bestimmt schon beim Befüllen verzweifelt.

marabu


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:37 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