Einzelnen Beitrag anzeigen

UntoterGeist

Registriert seit: 18. Sep 2019
25 Beiträge
 
#3

AW: Paradox spezielle Datentypen laden

  Alt 18. Feb 2021, 21:17
Ja Danke, das war so der Schubs in die richtige Richtung. Hab das aber ein bisschen anders gelöst.
Code:
SetLength(Bytes,ParadoxTable.FieldByName(ParadoxTable.Fields[i].FullName).Size);
ParadoxTable.FieldByName(ParadoxTable.Fields[i].FullName).GetData(Bytes);
Stream := TMemoryStream.Create();
if Assigned(Stream) then
  begin
    Stream.Write(Bytes,Length(Bytes));
    Stream.Position := 0;
    StrVar := Base64Encode(Stream)+';';
    FileWrite(ExportFile,PByte(StrVar)^,Length(StrVar));
    FreeAndNil(Stream);
  end
Mir ist aber so beim Testen was aufgefallen. Wenn das Feld jetzt ein String ist und ich mir die Raw Bytes ausgeben lasse, bin ich nicht in der Lage aus den Bytes wieder den Original String zu generieren. Das hab ich probiert, aber glaube ich hab was falsch gemacht. Oder das geht so grundsätzlich nicht. Zumindest hab ich gelesen, dass das fehlerhafte Ausgaben produziert. Hab es mit PChar, WideChar und AnsiChar ausprobiert. Aber es kam immer nur Datensalat bei raus. Hab mir auch mal die FieldByName.AsString Methode angeschaut. War aber auch nicht sehr erhellend.
Code:
SetLength(Bytes,ParadoxTable.FieldByName(ParadoxTable.Fields[i].FullName).Size);
ParadoxTable.FieldByName(ParadoxTable.Fields[i].FullName).GetData(Bytes);
Stream := TMemoryStream.Create();
if Assigned(Stream) then
  begin
    Stream.Write(Bytes,Length(Bytes));
    Stream.Position := 0;

    SetString(StrVar,PChar(Stream.Memory),Stream.Size div SizeOf(Char));
    StrVar := StrVar + ';';

    FileWrite(ExportFile,PByte(StrVar)^,Length(StrVar));
    FreeAndNil(Stream);
  end
  Mit Zitat antworten Zitat