2017-06-25 19 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被调用。 –