![]() |
Datenbank: firebird 1.5 • Zugriff über: ibx, ibexpert
unicode_fss-konvertierung
hallo,
ich habe folgendes problem: ich lese daten mit tstringfield - komponenten aus einer paradox-tabelle und will diese in einer firebird-datenbank speichern. die char-felder in der paradox-tabelle sind 1-byte-chars, die in der firebird-tabelle sind in unicode_fss. habe zuerst probiert, für die firebird-tabelle twidestringfield - komponenten zu nehmen. das geht aber nicht, da firebird scheinbar die felder selbst als 1-byte-chars versendet (scheinbar spaltet der die 2-byte-zeichen auf)..jedenfalls bekomm ich immer eine exception, schon wenn ich nur die firebird-datenbank öffne, dass das feld vom typ string ist, aber widestring erwartet wird. wenn ich stattdessen tibstringfield - komponenten verwende, klappt zwar das übertragen der daten von der einen tabelle in die andere, aber umlaute und sonderzeichen werden falsch 'konvertiert' zumindest bei einem bloßen:
Delphi-Quellcode:
Wie bekomme ich es hin, dass der in ibsf das widestring-äquivalent von sf speichert?
var
ibsf: TIBStringField; sf: TStringField; ibsf.AsString := sf.AsString; wenn firebird diesen unicode_fss - zeichensatz hat, muss es doch auch möglich sein, da widestrings zu speichern, oder? danke, martin |
Re: unicode_fss-konvertierung
IBX ist nicht wirklich unicode-fähig.
Aber versuch mal
Delphi-Quellcode:
Aber wahrscheinlich mußt du wohl auf andere Komponenten umsteigen.
Table.FieldByName(<filedname>).AsWideString
|
Re: unicode_fss-konvertierung
Zitat:
ja die eigenschaft gibt es leider nicht :-( weißt du von irgendwelchen komponenten, mit denen ich das 100% gebacken krieg? danke, martin |
Re: unicode_fss-konvertierung
Also bei Zeos gibte es diese Eigenchaft. Wenn du mir ne datenbank mit daten schickst kann ich es Testen.
Funktionieren müßte es auch mit IBObjects, fibplus, IBDac. |
Re: unicode_fss-konvertierung
Liste der Anhänge anzeigen (Anzahl: 1)
klar
hier ist so ne datenbank bei den feldern kannst du dir ja unter vielen paar aussuchen, asterm, zster, etc...alles strings danke, martin ps: fib-plus hab ich auch installiert, aber davon versteh ich nix und zeos hatte ich bei mir nie installiert bekommen; hatte es irgendwann aufgegeben... ..wenns klappt sag mir bitte auch wie du's anstellst! |
Re: unicode_fss-konvertierung
Hallo Martin, könntest du mir die weiteren Teile der Paradox-tabelle noch nachliefern?
|
Re: unicode_fss-konvertierung
Liste der Anhänge anzeigen (Anzahl: 1)
oh ja, sorry, da gehört ja noch mehr dazu...
danke, martin |
Re: unicode_fss-konvertierung
Liste der Anhänge anzeigen (Anzahl: 1)
Mit Zeos gehts
|
Re: unicode_fss-konvertierung
|
Re: unicode_fss-konvertierung
hey,
ihr kennt euch doch bestimmt mit sowas aus: habe rausgefunden, dass ich die umwandlung auch mit den ibx-komponenten hinbekomme, vorausgesetzt ich wandle die strings vor speicherung in widestrings um; eine passende funktion dafür hab ich schon gefunden:
Delphi-Quellcode:
Mein Problem ist folgendes: ich muss der funktion ja eine codepage in form eines numerischne werts übergeben und ich find leider nicht wo steht, welcher wert welcher codepage entspricht...hab durch ausprobieren schon mal rausgefunden, dass der wert für win1252 = 1 ist aber wie ist er bei anderen codepages...irgendwo muss das doch dokumentiert sein...
{:Converts Ansi string to Unicode string using specified code page.
@param s Ansi string. @param codePage Code page to be used in conversion. @returns Converted wide string. } function StringToWideString(const s: AnsiString; codePage: Word): WideString; var l: integer; begin if s = '' then Result := '' else begin l := MultiByteToWideChar(codePage, MB_PRECOMPOSED, PChar(@s[1]), - 1, nil, 0); SetLength(Result, l - 1); if l > 1 then MultiByteToWideChar(CodePage, MB_PRECOMPOSED, PChar(@s[1]), - 1, PWideChar(@Result[1]), l - 1); end; end; { StringToWideString } danke, martin |
Re: unicode_fss-konvertierung
Du kannst ja als CodePage auch die 0 übergeben, dann würd die aktuell verwendete CodePage (des Systems) für die umwandlung verwendet.
|
Re: unicode_fss-konvertierung
Zitat:
was ich mache ist folgendes: ich wandle eine paradox-datenbank in eine firebird-datenbank um wenn ich die paradox-tabelle öffne (nicht unicode-enabled) werden sämtliche sonderzeichen korrekt dargestellt...also geh ich mal davon aus, dass bei mir die richtige codepage für die datenbank eingestellt ist wenn ich das ganze jetzt aber umwandle in eine (unicode)-datenbank, dann müsste bei verwendung von cp_acp (= 0) ja alles so umgewandelt werden, wie es vorher (ohne unicode) zu sehen war, schließlich verwendet er ja die selbe codepage als referenz für die umwandlung trotzdem wird das ergebnis falsch wenn ich aber statt cp_acp, den wert 1 übergebe wird es richtig umgewandelt... verstehst du was ich meine? |
Re: unicode_fss-konvertierung
Ich weiß jetzt nicht welche Konstante welchen Wert hat ... vielleicht sind sie ja auch schon irgendwo in Delphi implementiert ... schau einfach mal im MSDN nach was bei dir verwendet/nötig ist.
![]() Wenn du keine Delphi-Pro+-Version hast (also keine Delphi-QuellCodes), dann einfach mal die Konstanden CP_xxx aus'm MSDN in ein Programm kopieren und schauen welchen Wert diese haben. |
Re: unicode_fss-konvertierung
hab ich schon geprüft
cp_acp = 0 und eben das funzt net :-( |
Re: unicode_fss-konvertierung
mal ne ganz blöde frage, nur um sicher zu gehen, dass ich alles richtig verstehe..
wo müsst ich denn deiner auffassung nach die codepage in windows einsehen/ändern können? |
Re: unicode_fss-konvertierung
und was ist die 1?
|
Re: unicode_fss-konvertierung
Zitat:
eigentlich müsst ich bei 0 ja automatisch die richtige codepage kriegen... |
Re: unicode_fss-konvertierung
Hast du mal nachgesehn, was die anderen Konstanten (aus'm MSDN) haben?
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:25 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