2017-06-25 33 views
2

在一個表中,我有一個大小爲60的TBytesField。當這個字段設置爲nil時創建一條記錄,我想將它的值設置爲像[0,0,0.....0]這樣的字節數組。我使用此代碼: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; 

雖然ar已全部字節零,我看到現場了這些價值觀,而不是:

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

我在做什麼錯?

回答

3

請勿直接使用SetData()。使用AsBytes屬性:

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

這是我第一次的做法,但我收到的消息「不爭論」的bytesFiled.asBytes:(執行過程TranslateResult在變異單元(AResult:HRESULT))= AR – JimPapas

+0

我不不明白。 [AsBytes'屬性](http://docwiki.embarcadero.com/Libraries/Tokyo/en/Data.DB.TField.AsBytes)是可讀/寫的,並以'TBytes'值操作。分配'TBytes'變量爲'TBytes'屬性不應該是涉及在'Variants'單元的任何東西。 –

+0

@JimPapas請提供錯誤發生時的調用堆棧,使其能夠確定爲什麼TranslateResult被調用。 –