最近在做一个小的工具使用中,使用adoquery插入数据到数据库中时候,如果字段的值超过4位小数,则会被截断。
假设SqlServer数据库中存在如下表
materialInfo (pno,vendor,description,price)
其中price字段在数据库中的定义类型为 numeric (18,6),即有6位小数精度。 但我在前台窗口中使用adoquery进行插入时候,则始终截断为4位小数,原代码如下:
...
var
adoquery1:Tadoquery;
begin
adoquery1:=Tadoquery.create(nil);
try
if not DM.adonconnection1.connected then
DM.adoconnection1.connected:=true;
adoquery1.adoconnection:=DM.adoconnection1;
with adoquery1 do
begin
close;
sql.clear;
sql.add('insert into materialInfo values(:tmppno,:tmpvendor,:tmpdesc,:tmpprice)');
parameters.parambyname('tmppno').value:=trim(edit1.text);
parameters.parambyname('tmpvendor').value:=trim(edit2.text);
parameters.parambyname('tmpdesc').value:=trim(edit3.text);
parameters.parambyname('tmpprice').value:=trim(edit4.text);
execsql;
end;
finally
adoquery1.free;
end;
end;
使用如上代码插入后,如果字段price 值为 0.005589,但插入到数据库中显示的值为0.0055,最后四位被截断。
在网上搜索下,查看了delphi帮助,需要将adoquery1的enableBCD设置为false,
即 adoquery1.enableBCD:=Fase;
delphi帮助是这样说的:T
his is because TBCDField uses the currency datatype that has a fixed scale of 4 decimal places.
BCD字段类型使用了货币类型,这种类型是小数点后是4位数。
但改成false后,仍然出现插入的数据还是4位,以上设置能解决使用adoquery查询显示时显示6位,但不能保证插入时候也是6位,插入时候仍是4位。
最后解决方法是将参数中的tmpprice的数据类型设置为ftFloat,即可。完整代码如下:
...
var
adoquery1:Tadoquery;
begin
adoquery1:=Tadoquery.create(nil);
try
if not DM.adonconnection1.connected then
DM.adoconnection1.connected:=true;
adoquery1.connection:=DM.adoconnection1;
adoquery1.enableBCD:=False; //禁用bcd类型
with adoquery1 do
begin
close;
sql.clear;
sql.add('insert into materialInfo values(:tmppno,:tmpvendor,:tmpdesc,:tmpprice)');
parameters.parambyname('tmppno').value:=trim(edit1.text);
parameters.parambyname('tmpvendor').value:=trim(edit2.text);
parameters.parambyname('tmpdesc').value:=trim(edit3.text);
parameters.parambyname('tmpprice').datatype:=ftFloat; //设置下数据类型
parameters.parambyname('tmpprice').value:=trim(edit4.text);
execsql;
end;
finally
adoquery1.free;
end;
end;
这样一来,可以插入4位以上的小数的值了。
分享到:
相关推荐
Delphi中的ADOquery 用法Delphi中的ADOquery 用法Delphi中的ADOquery 用法
在Delphi环境下,将ADOQUERY的Parameters存储到流中可能不太实用,但在基于TCP/IP 套接字模式开发的类三层架构中,如虫虫的远程数据对象,若能采用此法,必将大幅度提高此类对象的使用范围及查询效率。 本演示...
Delphi批量插入数据库数据..rar
Delphi中ADOQuery使用了lookup字段后出现未知错误 解决办法
ADOQuery添加了lookup字段后使用Append,再为字段赋值时会报错“EOleException 未知错误”,很困扰啊,终于能解决了。
Delphi_ADOQuery连接数据库的查询、插入、删除、修改
ADOQuery连接数据库的查询、插入、删除、修改 右下角还有Delphi资料
Delphi 将ADOQUERY的Parameters存储到流中,再从流中载入保存到数据表,本模块改编于 New Midas VCL Library(1.00)的JxStream.pas,procedure Write7BitEncodedInt(value: LongInt);写入shortstring. 适用于写入...
Delphi adoquery处理多条SQL语句
在Delphi中使用ADO连接Excel
delphi ADOQuery的用发和操作
Delphi7.0读入数据到DBGrid并向Word中插入表格,其实就是Delphi向Word中插入表格,测试数据由Delphi从SQLSERVER中读取,然后放入DBGrid中,再将DBGrid网格中的数据通过Word转换成表格。 begin if TStringGrid...
在Delphi中使用日期选择器用于数据库查询,用户搜索满足选定日期条件中的数据,使用日期选择器可很好的提高日期格式的准确性,避免数据库出错和查询不到数据的情况,本例的运行效果请参见测试截图。相关代码如下: ...
delphi+SQL数据库中ADOQuery的使用方法
Delph演示将ADOQUERY的Parameters存储到流中 Delph演示将ADOQUERY的Parameters存储到流中
C++ Builder中使用ADOConnection 和 ADOQuery的使用.txt
delphi Adoquery Oracle Blob格式的文档上传与下载,个人写的一段代码
delphi query oncalcfields使用demo delphi query oncalcfields使用demo
Delphi ADO查询示例 DBGrid显示数据.rar-
Delphi7下开发WebService如何使用数据库人操作介绍.