最近在做一个小的工具使用中,使用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 可以通过 sql 的存储过程来实现数据的添加、修改和删除操作。下面是通过 sql 的存储过程来实现的示例代码: 添加: With ADOQuery1 do begin Close; SQL.Clear; SQL.Add(' Insert Into ...
在使用Delphi编程时,ADOQuery是访问数据库的重要组件,它允许开发者执行SQL查询并处理结果。本篇文章将深入探讨如何使用Delphi的ADOQuery组件进行数据库的查询、插入、删除和修改操作。 首先,我们需要了解...
本压缩包“Delphi批量插入数据库数据”可能包含了一个或多个示例代码,用于演示如何在Delphi中高效地向数据库批量插入数据。 批量插入数据是数据库操作中的常见需求,尤其是在处理大量数据时,为了提高效率和减少...
ADOQuery 是 Delphi 中用于操作数据库的一个重要组件,它基于 ADO (ActiveX Data Objects) 技术,允许开发者高效地执行 SQL 语句来实现对数据库的查询、插入、删除和修改等操作。在 Delphi 环境中,ADOQuery 组件是...
综上所述,在Delphi中使用ADOQuery处理lookup字段时,关键在于正确配置lookupCache属性,并确保lookup字段的正确设置。此外,还需要注意处理特殊数据类型以及进行必要的性能优化。遵循这些指导原则,可以有效地避免...
在 Delphi 开发环境中,ADOQuery 是一种常用的数据库查询组件,它支持多种数据库操作,包括执行 SQL 语句、查询数据等。本文将详细解释如何使用 Delphi 的 ADOQuery 组件来处理多条 SQL 语句。 #### 一、基本概念 ...
在Delphi环境下,将ADOQUERY的Parameters存储到流中可能不太实用,但在基于TCP/IP 套接字模式开发的类三层架构中,如虫虫的远程数据对象,若能采用此法,必将大幅度提高此类对象的使用范围及查询效率。 本演示...
ADOQuery 组件是 Delphi 中用于执行 SQL 命令的对象,它提供了方便的方法来处理数据库查询、插入、更新和删除操作。 #### 二、ADOQuery组件的基本使用方法 1. **查询记录** ```delphi procedure TForm1.Button1...
Delphi 将ADOQUERY的Parameters存储到流中,再从流中载入保存到数据表,本模块改编于 New Midas VCL Library(1.00)的JxStream.pas,procedure Write7BitEncodedInt(value: LongInt);写入shortstring. 适用于写入...
ADOQuery添加了lookup字段后使用Append,再为字段赋值时会报错“EOleException 未知错误”,很困扰啊,终于能解决了。
在这个场景下,我们关注的是如何利用Delphi配合ADO(ActiveX Data Objects)查询组件来处理Oracle数据库中的Blob(Binary Large Object)类型字段,这通常用于存储大容量的二进制数据,如图片、文档或视频。...
在这篇文章中,我们将介绍如何使用 Delphi 高效率地将数据导出到 Excel 中。 Delphi 中的 Excel 操作 在 Delphi 中,我们可以使用多种方式来操作 Excel,例如使用 OLE 自动化、ADO、DBGridEh 等。其中,使用 OLE ...
在 Delphi 中,ADOQuery 是一个强大的工具,能够执行各种数据库操作,如查询、插入、删除、修改等 oggi,我们将详细介绍 ADOQuery 的使用方法。 一、查询操作 在 Delphi 中,使用 ADOQuery 查询数据可以使用以下...
在Delphi中使用SQL语句是与数据库进行交互的重要手段之一。本文将详细介绍如何在Delphi环境中构造和执行SQL查询,并给出具体的示例来帮助理解。 #### 一、基本SQL查询的构建 在Delphi中,通过`TADOQuery`组件来...
例如,为了提高性能,我们可能需要在ADOQuery中使用只读模式,或者对SQL查询进行优化。同时,如果数据量大,可能需要考虑在FastReport中实现分页显示,避免一次性加载所有数据导致内存占用过高。 总之,结合Delphi7...
### 在Delphi中使用ADO连接Excel #### 一、引言 随着软件开发技术的不断发展,数据处理成为了软件开发中的一个重要组成部分。Delphi作为一种广泛使用的编程语言,支持多种数据库访问方式,其中ADO(ActiveX Data ...
本教程将深入探讨如何使用Delphi与SQL Server 2000配合,实现向特定表插入数据的功能。以下是对这一主题的详细说明: 1. **建立数据库连接** - 在Delphi中,我们通常使用ADO(ActiveX Data Objects)组件库来连接...
本教程将详细解释如何在Delphi中使用ADO来判断SQL Server数据表中字段的类型。首先,我们需要了解ADO的核心组件,包括Connection、Command、Recordset等。 1. ADO Connection对象: ADO Connection对象是连接到...
本话题将详细探讨如何使用AdoQuery将数据库中的数据导出到Excel格式,以及DBGrid和DBGridEh控件在这一过程中的作用。 首先,让我们理解AdoQuery组件。AdoQuery是TDataSet的子类,它提供了一个接口来与多种数据源...
为了获取Excel文件中的特定单元格内容,代码中使用了一个循环来逐行读取数据: ```pascal for i := 1 to ExcelApplication1.ActiveCell.Row do begin ``` #### 5.2 读取单元格值 ```pascal s0 := excelworksheet1....