2 Stimmen

Delphi XE2 - Umgang mit Blob-Feldern

Wir versuchen, unsere App unicode-kompatibel zu machen, und wir migrieren von Delphi 2007 zu Delphi XE2. Wir sind auf einige Probleme gestoßen und brauchen dazu Vorschläge

1) Eine Änderung besteht darin, Blob-Daten mit Unicode-Strings in der Datenbank zu speichern

Wir speichern große XML-Daten als Blob in der Datenbank, aber in der neuesten Delphi-Version (XE2) wird ein Blob als Array von Bytes behandelt. Was muss also getan werden, um Blob-Daten in der Datenbank zu speichern? Wir haben versucht, Param.AsBlob := WideBytesOf(xml) zu konvertieren, aber das scheint nicht zu funktionieren.

2) Außerdem verwenden wir HyperString von EFD Systems für schnellere Zeichenkettenmanipulationen. Die Unicode-Version dieser Bibliothek ist jedoch nicht verfügbar. Wir haben den Code kompiliert, indem wir ansistring in string geändert und versucht haben, einige Assembleranweisungen zu ändern, aber bisher nur teilweise erfolgreich gewesen. Kann jemand eine Alternative für schnellere Zeichenkettenmanipulationen vorschlagen?

0 Stimmen

HyperString war in den Tagen von Delphi 1.0 viel relevanter. Spätere Versionen von Delphi erzeugten optimierten Code. Ich würde vorschlagen, diesen Code, soweit möglich, durch äquivalenten Pascal-Code zu ersetzen. Es wäre ein riesiges Unterfangen, den gesamten HyperStr-ASM-Code umzuschreiben, um mit Unicode-Zeichenfolgen zu arbeiten, und ich weiß nicht, ob der Aufwand den Ärger wert wäre.

0 Stimmen

Vielen Dank für das Feedback, wir werden prüfen, die Aufrufe von HyperStr durch Delphi-Bibliotheksfunktionen zu ersetzen.

0voto

AirWolf Punkte 597

Ich habe etwa ein halbes Jahr lang im Internet gesucht, wie man richtig ein Blob in einer Datenbank speichert, und ich habe eine Lösung gefunden, die für mich perfekt funktioniert hat. Vielleicht hilft sie dir auch:

Bild - TcxImage Komponente MainQuery - TQuery Komponente MainQueryPicture - ein Blob-Feld in der Datenbank, das in der Query-Komponente über den Field Editor gespeichert ist ImagePath - String-Variable, die den Pfad zur Bilddatei enthält

    MainQuery.Edit;
    if Image.Picture.Graphic <> nil then // wenn ein Bild in die Komponente geladen wurde
    begin
      MainQueryPicture.LoadFromFile(ImagePath); // das Bild in ein Blob-Feld laden
    end;
    MainQuery.Post; // Änderungen in die Tabelle übernehmen 

Hoffe, es hilft.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X