Delphi bcd字段中的TDataset后代

时间:2016-03-01 13:17:11

标签: delphi dataset

我正在尝试编写简单的TDataset后代。在重写方法GetFieldData(Field:TField; var Buffer:TValueBuffer)中,我主要使用DataConvert函数填充缓冲区的实际值

case Field.FieldType of  
ftCurrency:begin
           C:=Some_Currency_Value;
         if Buffer<>nil then
           DataConvert(Field,@C,Buffer,True);
       end;

但它不适用于BCD字段。我写的时候

ftBCD:begin
         BC:=StrToBCD(Some_string_from_currency);
         if Buffer<>nil then
           DataConvert(Field,@BC,Buffer,True);
       end;**

它显示奇怪的值。例如,对于值7,缓冲区填充值734.029

GetFieldData就像这样

X:=FData.ExtractRow(ix) as TMQueryData; //this is full record of my mem table 
fix:=FData.FieldIndex(Field.FieldName); 
case FData.FieldTypes[fix] of 
ftFloat,ftCurrency:begin 
C:=X.C[Field.FieldName]; 
if Buffer<>nil then 
DataConvert(Field,@C,Buffer,True{False}); 
end; 
result;=True;

ExtractRow说的是一个简单的数组。没什么复杂的。所以我把字段输入的字符串值作为货币,日期,日期时间,整数或其他,然后用DataConvert函数填充BUFFER。唯一的问题是ftBCD。到目前为止我通过转换bcd作为货币到临时TVaLueBuffer,然后使用DataConvert进行转换。看起来像这样

TDBBitConverter.UnsafeFrom<Currency>(Currency_Value, Temp_Buff);
DataConvert(Field,Temp_Buff,Buffer,True);

0 个答案:

没有答案