2017-06-25 2 views
2

In einer Tabelle habe ich ein TBytesField mit der Größe 60. Wenn ein Datensatz mit diesem Feld auf Null erstellt wird, möchte ich seinen Wert auf ein Array von Bytes wie [0,0,0.....0] setzen. Ich verwende diesen Code:Delphi TBytesField SetData

var 
    ar : array of byte; 
begin 
    if ByteField.AsBytes = nil then 
    begin 
    SetLength(ar, ByteField.Size); 
    ByteField.SetData(ar, True); 
    end; 
end; 

Obwohl ar hat alle Bytes Null, ich sehe, dass das Feld diese Werte nimmt statt:

[17,32,0,0,0,0,0,0,48,192,182,1,0...0] 

Was mache ich falsch?

Antwort

3

Sie SetData() nicht direkt verwenden. Verwenden Sie die AsBytes Eigenschaft:

var 
    ar : TBytes; 
begin 
    if ByteField.IsNull then 
    begin 
    SetLength(ar, ByteField.Size); 
    ByteField.AsBytes := ar; 
    end; 
end; 
+0

Dies war mein erster Ansatz, aber ich erhielt die Meldung "ungültig Argument" bei bytesFiled.asBytes: = ar (an der Varianten Einheit Ausführung des Verfahrens TranslateResult (AResult: HRESULT)) – JimPapas

+0

I don 'ich verstehe nicht. [Die 'AsBytes' Eigenschaft] (http://docwiki.embarcadero.com/Libraries/Tokyo/en/Data.DB.TField.AsBytes) wird Lese-/Schreibzugriff und arbeitet auf' TBytes' Werte. Das Zuweisen einer 'TBytes' -Variable zu einer' TBytes' -Eigenschaft sollte überhaupt nichts in der 'Variants'-Einheit enthalten. –

+0

@JimPapas Bitte geben Sie einen Callstack für den Zeitpunkt des Fehlers an, damit festgestellt werden kann, warum TranslateResult aufgerufen wird. –

Verwandte Themen