Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
Delphi 12 Athens
|
AW: TIdBytes in Datenbankfeld speichern
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)
|