![]() |
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
Dieses Thema wurde von "alcaeus" von "XML" nach "Datenbanken" verschoben.
Beitraege zu Datenbanken bitte auch in die Datenbanksparte. Danke |
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. |
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? |
Re: aus ms access db im utf-8 format einlesen
Zitat:
Evtl. verwendest Du ja irgendwo statt WideString nur (Ansi)-String. |
Re: aus ms access db im utf-8 format einlesen
Zitat:
Deshalb geht's nur so:
Delphi-Quellcode:
var
feldinhalt : WideString; begin feldinhalt := (dataset.FieldByName('Feldname') as TWideStringField).Value; end; |
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. |
Re: aus ms access db im utf-8 format einlesen
Müsste der Quellcode an der fraglichen Stelle nicht eher so aussehen?
Delphi-Quellcode:
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.
with ADOTable1.Fields[i] do
if IsNull then temp := 'null' else temp := AsString; 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 |
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: |
Re: aus ms access db im utf-8 format einlesen
Zitat:
![]() marabu |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:33 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz