我使用Delphi ADODB连接到AS400 DB2数据库,但是当我读取十进制类型的数据时,它失去了十进制精度。 enter image description here
其真实值为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更改为“选择Char(data)作为表单testtable”并由“ QryCom.FieldByName('a')。AsString”读取时,它是真的。 有没有人可以帮助我
答案 0 :(得分:1)
看起来像Delphi将Numeric(15,#)数字默认为ftFloat,但是它的精度不足以容纳整个数字。这是一篇博客文章,建议将默认值重新映射为ftFMTBCD。 Devart Blog