如何从AS400 DB2数据库读取十进制数据?

时间:2019-09-12 09:38:52

标签: delphi db2 ibm-midrange db2-400

我使用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”读取时,它是真的。 有没有人可以帮助我

1 个答案:

答案 0 :(得分:1)

看起来像Delphi将Numeric(15,#)数字默认为ftFloat,但是它的精度不足以容纳整个数字。这是一篇博客文章,建议将默认值重新映射为ftFMTBCD。 Devart Blog