我使用Delphi ADODB连接AS400 DB2数据库,但是当我读取小数类型数据时,它丢失了小数精度。
其真实值为736657878664.160。 SQL 是一个简单的“从测试表中选择数据”。
Cnn := TADOConnection.Create(nil);
Cnn.LoginPrompt := False;
Cnn.CommandTimeout := CCommandTimeout;
Cnn.ConnectionString := lpDB^.CnnString;QryCom := TADOQuery.Create(nil);
try
QryCom.ParamCheck := False;
QryCom.Connection := Cnn;
QryCom.SQL.Text := sSql;
QryCom.CommandTimeout := CCommandTimeout;
QryCom.Open;
S := 'C:\AS400SQLTest.txt';
QryCom.SaveToFile(S, pfADTG);
S := 'C:\AS400SQLTest.xml';
QryCom.SaveToFile(S, pfXML);
TextToFile('C:\As400SQL.txt', 'True');
QryCom.Close;
finally
QryCom.Free
end;
损失发生在
QryCom.open
之后。当我将SQL更改为select Char(data) as a form testtable
,并通过QryCom.FieldByName('a').AsString
读取时,这是真的。
有谁可以帮助我吗
看起来 Delphi 默认将 Numeric(15,#) 数字设置为 ftFloat,但这没有足够的精度来容纳整个数字。这是一篇博客文章,建议将默认值重新映射为 ftFMTBCD。 德瓦特博客