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

问题描述 投票:0回答:1

我使用Delphi ADODB连接AS400 DB2数据库,但是当我读取小数类型数据时,它丢失了小数精度。

Delphi Programming

其真实值为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 db2 ibm-midrange db2-400
1个回答
1
投票

看起来 Delphi 默认将 Numeric(15,#) 数字设置为 ftFloat,但这没有足够的精度来容纳整个数字。这是一篇博客文章,建议将默认值重新映射为 ftFMTBCD。 德瓦特博客

© www.soinside.com 2019 - 2024. All rights reserved.