Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   TParam Blob/Memo in Stream ohne Unicodeumwandlung (https://www.delphipraxis.net/189942-tparam-blob-memo-stream-ohne-unicodeumwandlung.html)

dataspider 10. Aug 2016 11:12

TParam Blob/Memo in Stream ohne Unicodeumwandlung
 
Hi

Da TParam.GetData veraltet ist, wollte ich es ersetzen.
Dazu habe ich eine helper class TparamHelper:

Delphi-Quellcode:
procedure TParamHelper.SaveToStream(AStream: TStream);
begin
  if not IsNull and (GetDataSize > 0) then
  begin
    AStream.Position := 0;
    AStream.WriteBuffer(AsBlob[0], Length(AsBlob));
    {
    case DataType of
      ftMemo: AStream.WriteData(AsString[1], Length(AsString));
      ftBlob: AStream.WriteBuffer(AsBlob[0], Length(AsBlob));

    end;
    }
    AStream.Position := 0;
  end;
end;
Wenn DataType des Parameters ftBlob ist, ist alles OK.
Wenn DataType des Parameters ftMemo ist, werden meine Strings zu Unicode mit jeweils 2 Zeichen, also ein a ist dann 61 00.

Was muss ich tun, dass im Memorystream die Strings wie in der DB gespeichert als ANSI ankommen.

Danke

Frank

Uwe Raabe 10. Aug 2016 12:01

AW: TParam Blob/Memo in Stream ohne Unicodeumwandlung
 
Zitat:

Zitat von dataspider (Beitrag 1344570)
Da TParam.GetData veraltet ist,

GetData ist nicht veraltet. Lediglich das overload mit Pointer ist veraltet. Das mit TValueBuffer ist up-to-date.

dataspider 10. Aug 2016 12:26

AW: TParam Blob/Memo in Stream ohne Unicodeumwandlung
 
Ja - richtig.

Bisher habe ich diesen Code verwendet.
Delphi-Quellcode:

AStream.SetSize(AParam.GetDataSize);
AParam.GetData(AStream.Memory);
Kannst du mir evtl. noch sagen, wie ich die 2. Zeile ändern muss?

Danke, Frank

[EDIT]

ich habe es jetzt so:

Delphi-Quellcode:

procedure TParamHelper.SaveToStream(AStream: TMemoryStream);
Var
  Buffer: PByte;
begin
  if not IsNull and (GetDataSize > 0) then
  begin
    AStream.Position := 0;
    GetMem(Buffer, GetDataSize);
    try
      GetData(Buffer);
      AStream.WriteBuffer(Pointer(Buffer)^, GetDataSize);
    finally
      FreeMem(buffer);
    end;
    AStream.Position := 0;
  end;
end;
Das scheint erst mal zu funktionieren.


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:22 Uhr.

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