AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi aus ms access db im utf-8 format einlesen
Thema durchsuchen
Ansicht
Themen-Optionen

aus ms access db im utf-8 format einlesen

Ein Thema von matei · begonnen am 17. Mai 2005 · letzter Beitrag vom 19. Mai 2005
Antwort Antwort
Seite 1 von 2  1 2      
matei

Registriert seit: 29. Apr 2005
Ort: Regensburg
7 Beiträge
 
Delphi 7 Professional
 
#1

aus ms access db im utf-8 format einlesen

  Alt 17. Mai 2005, 14:47
Datenbank: MS Access • Version: 2003
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?

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

[edit=alcaeus]Infos hinzugefuegt. Mfg, alcaeus[/edit]
  Mit Zitat antworten Zitat
17. Mai 2005, 14:47
Dieses Thema wurde von "alcaeus" von "XML" nach "Datenbanken" verschoben.
Beitraege zu Datenbanken bitte auch in die Datenbanksparte. Danke
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.201 Beiträge
 
Delphi 10.4 Sydney
 
#3

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

  Alt 17. Mai 2005, 14:53
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.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
matei

Registriert seit: 29. Apr 2005
Ort: Regensburg
7 Beiträge
 
Delphi 7 Professional
 
#4

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

  Alt 17. Mai 2005, 16:22
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?
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.201 Beiträge
 
Delphi 10.4 Sydney
 
#5

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

  Alt 17. Mai 2005, 16:36
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.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#6

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

  Alt 17. Mai 2005, 17:01
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;
Andreas
  Mit Zitat antworten Zitat
matei

Registriert seit: 29. Apr 2005
Ort: Regensburg
7 Beiträge
 
Delphi 7 Professional
 
#7

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

  Alt 18. Mai 2005, 09:22
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.
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#8

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

  Alt 18. Mai 2005, 10:36
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
  Mit Zitat antworten Zitat
matei

Registriert seit: 29. Apr 2005
Ort: Regensburg
7 Beiträge
 
Delphi 7 Professional
 
#9

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

  Alt 18. Mai 2005, 12:49
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?
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#10

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

  Alt 18. Mai 2005, 13:35
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
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:45 Uhr.
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