AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Inhalt Blobfield als Ansistring

Ein Thema von dataspider · begonnen am 11. Dez 2019 · letzter Beitrag vom 11. Dez 2019
Antwort Antwort
Benutzerbild von dataspider
dataspider

Registriert seit: 9. Nov 2003
Ort: 04539 Groitzsch
1.280 Beiträge
 
Delphi 10.3 Rio
 
#1

Inhalt Blobfield als Ansistring

  Alt 11. Dez 2019, 07:29
Hallo

Ich habe ein kleines Tool neu compiliert (bisher XE 6, jetzt 10.3.2).

Bisher halle ich folgenden Code:

Delphi-Quellcode:
procedure TfrmMain.ReadXMLData;
Var
  ABlobStream: TMemoryStream;
  AStream: TMemoryStream;
  Q: TMSQuery;
  ABlobField: TField;
  P: Integer;
begin
  Q := DMMain.qryXML;
  if Q.IsEmpty then
    Exit;
  ABlobField := Q.FindField('XML_AUSKUNFT');
  assert(ABlobField <> nil);
  if ABlobField.IsNull then
    Exit;
  ABlobStream := TMemoryStream.Create;
  AStream := TMemoryStream.Create;
  try
    ABlobStream := TMemoryStream(Q.CreateBlobStream(Q.FieldByName('XML_AUSKUNFT'), bmRead));
    {$IFDEF DEBUG}
      ABlobStream.Position := 0;
      ABlobStream.SaveToFile('d:\auskunft.xml');
    {$ENDIF}

    if ABlobStream.Size > 0 then
    begin
      p := GetStreamPos(ABlobStream, '>');
      AStream.WriteBuffer(SXMLHeader[1], Length(SXMLHeader));
      ABlobStream.Position := P;
      AStream.CopyFrom(ABlobStream, ABlobStream.Size - P);
    end;
    AStream.Position := 0;
    CR5XML.AssignFromStream(AStream);
  finally
    ABlobStream.Free;
    AStream.Free;
  end;
end;
In der mit XE 6 compilierten Version war der Inhalt in ABlobStream (XML) als Ansistring verfügbar.
Mit Rio liefert das nun UniCode.

Wie kann ich den Feldinhalt wieder als Ansistring bekommen?

Das Feld kommt aus den Devart SDAC Komponenten.

Frank
Frank Reim
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.655 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Inhalt Blobfield als Ansistring

  Alt 11. Dez 2019, 07:46
Guten Morgen,

XE6 war doch auch schon UniCode.
Was spricht gegen UniCode - oder anders warum willst Du unbedingt AnsiString Daten?

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Benutzerbild von dataspider
dataspider

Registriert seit: 9. Nov 2003
Ort: 04539 Groitzsch
1.280 Beiträge
 
Delphi 10.3 Rio
 
#3

AW: Inhalt Blobfield als Ansistring

  Alt 11. Dez 2019, 07:52
Guten Morgen,

XE6 war doch auch schon UniCode.
Was spricht gegen UniCode - oder anders warum willst Du unbedingt AnsiString Daten?

Grüße
Klaus

Ich muß noch etwas vorn anfügen, bevor ich es in ein TXMLDocument lade.
Ich müsste zu jetzt zu viel anpassen. Es ist ein simpler Import und der soll so schlell als möglich wieder laufen...

Frank
Frank Reim
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.106 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: Inhalt Blobfield als Ansistring

  Alt 11. Dez 2019, 07:57
Hallo,
UTF8Decode?
Heiko
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.655 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: Inhalt Blobfield als Ansistring

  Alt 11. Dez 2019, 08:15
.. ich finde nirgends wie SXMLHeader definiert ist?

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.820 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: Inhalt Blobfield als Ansistring

  Alt 11. Dez 2019, 08:18
Welches Format(Kodierung) haben die Daten in der Tabelle?
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von dataspider
dataspider

Registriert seit: 9. Nov 2003
Ort: 04539 Groitzsch
1.280 Beiträge
 
Delphi 10.3 Rio
 
#7

AW: Inhalt Blobfield als Ansistring

  Alt 11. Dez 2019, 08:40
Welches Format(Kodierung) haben die Daten in der Tabelle?
Das Feld ist ein nvarchar.
Wenn ich blobfield.SaverToFile aufrufe, erhalte ich Daten wie im Anhang.
Also jeder Zeichen hat jetzt noch ein 00 bekommen und das muss weg.

Der Feldinhalt kann sehr groß sein, da es auch eine PDF in Base64 enthält.


Frank
Miniaturansicht angehängter Grafiken
blobdaten.jpg  
Frank Reim
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.655 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: Inhalt Blobfield als Ansistring

  Alt 11. Dez 2019, 10:38
.. welches RDBMS wird verwendet?

Zitat:
Geht einer Zeichenfolgenkonstante der Buchstabe „N“ voraus, gibt die implizite Konvertierung eine UCS-2- oder UTF-16-Zeichenfolge zurück, wenn die Konstante, die konvertiert werden soll, die maximale Länge für den Datentyp für „nvarchar“-Zeichenfolgen (4.000) nicht überschreitet. Andernfalls hat die implizite Konvertierung einen hohen „nvarchar(max)“-Wert zur Folge.
Von hier: SQL Server

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Benutzerbild von dataspider
dataspider

Registriert seit: 9. Nov 2003
Ort: 04539 Groitzsch
1.280 Beiträge
 
Delphi 10.3 Rio
 
#9

AW: Inhalt Blobfield als Ansistring

  Alt 11. Dez 2019, 12:49
.. welches RDBMS wird verwendet?

Zitat:
Geht einer Zeichenfolgenkonstante der Buchstabe „N“ voraus, gibt die implizite Konvertierung eine UCS-2- oder UTF-16-Zeichenfolge zurück, wenn die Konstante, die konvertiert werden soll, die maximale Länge für den Datentyp für „nvarchar“-Zeichenfolgen (4.000) nicht überschreitet. Andernfalls hat die implizite Konvertierung einen hohen „nvarchar(max)“-Wert zur Folge.
Von hier: SQL Server

Grüße
Klaus
Danke

Datenbank ist MS-SQL

Ich habe - damit es erst mal weiter geht - jades 2. Zeichen im Stream gelöscht.
Damit funktioniert es erst mal.
Ich versuche jetzt noch, die Devart SDAC Komponenten dazu zu bringen, den Inhalt des Feldes nicht als Unicode zu liefern.
Aber UseUnicode wie in IBDac gibt es bei SDac leider nicht.

Frank
Frank Reim
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 08:42 Uhr.
Powered by vBulletin® Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf