Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#3

AW: TIdBytes in Datenbankfeld speichern

  Alt 10. Aug 2022, 01:07
ftBytes oder nicht doch ftBlob?

Rufe doch einfach mal über ein SELECT dieses Feld ab und schau, welchen TField-ClassType und FieldType/DataType das Field hat.



TIdBytes ist sowas wie ein TBytes, bzw. TArray<Byte>

und das könntest du in einen RawByteString (oder AnsiString) kopieren
oder in einen Stream kopieren
oder in ein Variant-Array kopieren
oder als Pointer übergeben.



Bis vor einer Weile war ein dynamisches Array noch bis zu 2GB-2*4B-1 groß ... inzwischen aber bis 8 Exabyte - 16 Byte - 1 (wenn 64 Bit).
Ein String/AnsiString ist aber weiterhin nur bis maximal 2GB-3*4B (und -4*4B wenn 64Bit) groß ... früher waren mal String und DynArray intern halbwegs kompatibel, aber das hat man seit Win64 kaputt gemacht, weil man NUR die DynArrays erweitert hat.


LoadFromStream / SaveToStream = als Stream
GetBlobRawData / SetBlobRawData = als Byte-Block, bzw. Pointer (PByte)

AsVarByteStrs[] / AsByteStrs[] = als mehrere AnsiString

AsVarByteStr / AsByteStr = als EIN AnsiString (aber ich würde stattdessen besser einen RawByteString nutzen)

AsBytes[] = jedes Byte einzeln

AsVariant = dürfte wohl als Variant-Array sein -> VarArrayCreate/VarArrayHighBound/VarArrayLock oder DynArrayToVariant/DynArrayFromVariant usw.



k.A. was der Unterschied zwischen AsVarByte*** und AsByte*** sein soll.
$2B or not $2B

Geändert von himitsu (10. Aug 2022 um 01:19 Uhr)
  Mit Zitat antworten Zitat