Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Konvertieren von OEM-Zeichensatz zu Char (https://www.delphipraxis.net/5653-konvertieren-von-oem-zeichensatz-zu-char.html)

DBman 14. Jun 2003 17:42


Konvertieren von OEM-Zeichensatz zu Char
 
Hallo Delphifreunde!
Ich habe folgendes Problem:
Ich möchte eine Feld einer Datenbank , dessen Inhalt noch im OEM-Zeichensatz ist Konvertieren , so dass die ü's und ö's und ä's auch ü's und ö's und ä's sind.
Da gibts ja die schöne Funktion OEMtoChar...

Ich habe jetzt also diese Schleife hier , die vom Feld MAT1 den Inhalt konvertiert und dann dem Datensatz zuweist , also den Inhalt austauscht.
Delphi-Quellcode:
  while not Table1.Eof do
  begin
    sZellenInhalt:=Table1.FieldByName('MAT1').AsString;
    OEMtoChar(PChar(sZellenInhalt), PChar(sZellenInhalt));
    Table1.Edit;
    Table1.FieldByName('MAT1').AsString:=sZellenInhalt;
    Table1.Next;
  end;
 Table1.Post;
 Table1.First
Ich dachte ich nehme table1.eof als Abbruchbedingung , und ansonsten gehe ich mit Table1.Next immer einen Datensatz weiter.
Ich bekomme aber ganz am Ende des Konvertierungsvorgangs eine Exception
EAccesViolation.
Das muss irgendwie an dem eof liegen...
(Konvertiert worden ist alles ansonsten korrekt , bis auf die Exception)
Hm , kann mir da jemand meinen Fehler nennen , ich seh ihn absolut nicht.
Danke schonmal :spin:

eddy 14. Jun 2003 17:49

Hallo DBman,

wenn Du Haltepunkte einsetzt und Dich mit F7 durch Dein Programm hangelst, wirst Du feststellen, daß die Fehlermeldung bei Table.Post kommt.

Lösche diese Zeile oder setzte noch ein Table.Edit davor, weil Next vom EditModus auf den BrowserModus umschaltet.

mfg
eddy

DBman 14. Jun 2003 18:00

Hm...nein.

Mein Code sieht jetzt so aus:
Delphi-Quellcode:
 while not Table1.Eof do
  begin
    sZellenInhalt:=Table1.FieldByName('MAT1').AsString;
    OEMtoChar(PChar(sZellenInhalt), PChar(sZellenInhalt));
    Table1.Edit;
    Table1.FieldByName('MAT1').AsString:=sZellenInhalt;
    Table1.Next;
  end;
 Table1.First
end;
Und funktioniert nicht. Immer noch die Exception.

eddy 14. Jun 2003 18:52

Hallo DBman,

böse Falle, es sieht so aus, als ob OEMtoChar leere Strings nicht verkraftet. Habe Deine Fehler nachvollziehen können. Nachfolgender Code lief bei mir ohne Fehler.

Code:
begin
  Tab1.First;
  while not Tab1.Eof do begin
    sZellenInhalt:=Tab1.FieldByName('Ort').AsString;
    if trim(sZellenInhalt) <> '' then begin
      OEMtoChar(PChar(sZellenInhalt), PChar(sZellenInhalt));
      Tab1.Edit;
      Tab1.FieldByName('Ort').AsString:=sZellenInhalt;
    end;
    Tab1.Next;
  end;
  Tab1.First;
end;
mfg
eddy

Daniel B 14. Jun 2003 19:03

Hallo,

vielleicht bringt Dir das was.
http://www.delphipraxis.net/viewtopic.php?t=848

Grüsse, Daniel :hi:

Hansa 14. Jun 2003 19:12

Der Link ist echt gut, ich hab das so gemacht mit alten Daten, die nach Interbase mußten. Waren zwar nur ca. 30 MB reine Daten, ohne Bilder, aber das ging einwandfrei. Der vorgefertigte Kram ist schön und gut, aber hausgemacht ist meist besser. :mrgreen:

eddy 14. Jun 2003 19:29

Hallo Leute,

ich gebe zu, ich habe bei der Übernahme meiner "alten" dBase-Datenbanken nach Paradox auch noch nichts von OEMtoChar gewußt, aber ich denke, der lange Weg war nicht DBman's Problem.

mfg
eddy

DBman 14. Jun 2003 19:31

Oh dankesehr!!!
Da wäre ich sicherlich alleine nicht so schnell oder gar nicht drauf gekommen. :P

Hansa 15. Jun 2003 17:36

wo lag jetzt eigentlich das Problem ?

eddy 15. Jun 2003 19:15

Hallo Hansa,

1. Fehler: Tab.Post
2. Fehler: Leere Zeichenketten

Offensichtlich verkraftet OEMtoChar keine leere Zeichenketten. Ich hatte in meiner Testdatei zwei Einträge, bei denen "Ort" (= das von mir verwendete Feld) keinen Text enthielt. Genau bei diesen beiden Zeilen gab's die Fehlermeldung.

mfg
eddy


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