Seite 1 von 1

Kyrillisch in Datenbank speichern

Verfasst: 18. Mai 2008 01:19
von Treo83
Hallo Leute.

Seid einiger zeit beschäftige ich mich mit QT ( Speziel QSql und co ).

Ich möchte ganz einfach einen kyrillischen text, den ich in ein Edit Control (MFC) kopiert habe in eine Oracle ( XE ) Datenbank speichern. Die Variable für das Edit Control ist ein CString und diese wird korrekt angezeigt. Nun ja einen CString kann man ja nicht einfach so in eine Tabelle inserten. Wenn ich diesen CString nun in einen QString umwandle kommt nur Müll bei raus.

Ich füge Daten mit dem Qquery ein.

Ich stehe da im Moment auf dem Schlauch und hoffe mir kann jemand behilflich sein.

MFG Simon

Verfasst: 18. Mai 2008 08:06
von Christian81
Schau Dir mal QTextCodec an und beschäftige dich asllg. mit Codecs bzw. Unicode.

Verfasst: 18. Mai 2008 23:26
von Treo83
Hallo Christian81,

danke für deine Antwort. Ich habe mich mal damit befasst. Damit habe ich dann folgendes gebaut:

Code: Alles auswählen

QString valL = queryL.value(0).toString();
QTextCodec *codec = QTextCodec::codecForName("KOI8-R");
QByteArray encodedString = codec->fromUnicode(valL);
QMessageBox::information(0,"Anzeige",encodedString);
So beschreibt es ja auch die Doku. Jedoch kommt trotzdem nur Müll bei raus.

Ich sitze schon seid Tagen an diesem Problem und find keine Lösung. Hast du noch nen Tip für mich.

Danke

Verfasst: 19. Mai 2008 06:30
von Christian81
Die Doku beschreibt es so auf keinen Fall!

Code: Alles auswählen

QMessageBox::information(0,"Anzeige",encodedString); 
Was soll das denn? QMessageBox möchte einen QString, kein QByteArray mit Daten in irgend einer Kodierung.

Verfasst: 19. Mai 2008 09:02
von Treo83
selbst wenn ich das QByteArray in einen QString packe kommt genau das gleiche raus.

Was mache ich falsch?

Verfasst: 19. Mai 2008 09:12
von Christian81
Treo83 hat geschrieben: Was mache ich falsch?
Du hast Dich nicht korrekt informiert.

Ein QString ist Unicode, ein QByteArray ein (mehr oder weniger) char* mit Text der in irgend einer Kodierung kodiert ist.
Von queryL.value(0).toString() bekommst Du einen QString - er ist also schon in Unicode. Falls da nur Müll drin steht ist entweder in der DB Müll oder die Kodierung der DB passt nicht (was ich nicht glaube da, soweit ich den Code vom oracle-sqlplugin lesen kann, die oracle-db - Funktionen Unicode reden).