SQL Server 数据问题(BDE连接)

ghui 2003-09-20 08:58:50
有一个表(有主关键字),里面有614条数据,其中有4条数据无法在BDE连接方式下修改。

1.测试1
用 SQL Explorer 打开数据库,打开表,尝试修改同表中的其它数据,修改成功,没有问题;移到那几条数据上,试图修改,提示:Couldn't perform the edit because another user changed the record.

2.测试2
用 TADOConnection连接数据库,用ADOQuery打开该表,修改任何数据都没有出错。

3.测试3
用 TDatabase 连接,用Query打开该表(RequestList=true),修改其它数据没有错误;移到那几条数据上,仅仅执行 Query->Edit(); 语句,提示:Couldn't perform the edit because another user changed the record. (任何事件都没有编写代码)

所有的修改都是对同一个字段数据进行修改。
有谁知道这是怎么回事?
...全文
56 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
ghui 2003-10-11
  • 打赏
  • 举报
回复
问题已经解决!

原因是:
在SQL Server中表中浮点字段使用的是 Real 类型,它是单精度;而BDE连接的数据认为是双精度,精度不一致,导致小数点位数出现问题。

举一个简单的例子:

将一个单精度的数据 1.2 赋给一个双精度的变量上,它可能变成 1.199999999..,与 1=0.9999999... 一样。从数学角度看,两个数据值相同,但从计算机的存储看,两个数据不同。

通过SQL Monitor跟踪到BDE修改数据时,对SQL Server发出的sql语句,发现语句如下:

SQL Prepare: MSSQL - UPDATE dbo.ICONSECTION SET FROMNAME=:1 WHERE STREETID=:2 AND SECTIONID=:3 AND FROMNAME=:4 AND TONAME=:5 AND SURFACETYPEID=:6 AND CLASSID=:7 AND INSPECMETHODID=:8 AND LENGTH=:9 AND WIDTH=:10 AND DIAMETER=:11 AND OTHERAREA=:12 AND SECTIONAREA=:13 AND SLABLENGTH=:14 AND SLABWIDTH=:15 AND TOTALSLABS=:16 AND LASTINSPE IS NULL AND CONDINDEX IS NULL AND TXDOTCS IS NULL AND DISPLAYORDER=:17 AND MEASUREID=:18 AND ISCHECK=:19 AND BEGIN_STA=:20 AND END_STA=:21 AND SR IS NULL AND MODSR IS NULL AND PSR IS NULL AND MODPSR IS NULL AND PQI IS NULL AND MODPQI IS NULL AND ADDEDDATE IS NULL

SQL Data In: MSSQL - Param = 1, Name = FROMNAME, Type = fldZSTRING, Precision = 50, Scale = 0, Data = xc1

...

SQL Data In: MSSQL - Param = 21, Name = END_STA, Type = fldFLOAT, Precision = 0, Scale = 0, Data = 78.000000

SQL Execute: MSSQL - UPDATE dbo.ICONSECTION SET FROMNAME=:1 WHERE STREETID=:2 AND SECTIONID=:3 AND FROMNAME=:4 AND TONAME=:5 AND SURFACETYPEID=:6 AND CLASSID=:7 AND INSPECMETHODID=:8 AND LENGTH=:9 AND WIDTH=:10 AND DIAMETER=:11 AND OTHERAREA=:12 AND SECTIONAREA=:13 AND SLABLENGTH=:14 AND SLABWIDTH=:15 AND TOTALSLABS=:16 AND LASTINSPE IS NULL AND CONDINDEX IS NULL AND TXDOTCS IS NULL AND DISPLAYORDER=:17 AND MEASUREID=:18 AND ISCHECK=:19 AND BEGIN_STA=:20 AND END_STA=:21 AND SR IS NULL AND MODSR IS NULL AND PSR IS NULL AND MODPSR IS NULL AND PQI IS NULL AND MODPQI IS NULL AND ADDEDDATE IS NULL

SQL Data In: MSSQL - Rows affected = 0

修改数据失败!

将Real 类型改为 Numeric(28,16) 后,问题解决!
xizhouhawk 2003-10-01
  • 打赏
  • 举报
回复
怪哉,等待结果
bullHEcow 2003-09-30
  • 打赏
  • 举报
回复
就是
出现
记录错误
好象比楼主
bullHEcow 2003-09-30
  • 打赏
  • 举报
回复

真的见识了次等怪事,出现的错误和搂主一样
bullHEcow 2003-09-29
  • 打赏
  • 举报
回复
jsnhlr5907@sina.com
还有你的sqlServer
的备份文件,以保真你的
程序能运行
ghui 2003-09-29
  • 打赏
  • 举报
回复
to bullHEcow(牛) :
已发送至 jsnhlr5907@sina.com
ghui 2003-09-27
  • 打赏
  • 举报
回复
问题还没有解决。
已经将数据库中其他表都删除了,还是和原来一样。

我已经将数据库Backup下来(SQL Server 7服务器),用winrar 3.1压缩,338KB

谁愿意看看数据问题在那?(留下E-mail地址,我发给你)
huangjuliang 2003-09-22
  • 打赏
  • 举报
回复
把这些关掉,再打开试试!
CACACACACA 2003-09-22
  • 打赏
  • 举报
回复
sqlserver的一些功能BDE页的组件不支持的原因吧。
另外这四条记录是不是和别的表中的数据有关连
ljianq 2003-09-22
  • 打赏
  • 举报
回复
那几条记录有什么特别之处。
Robin 2003-09-21
  • 打赏
  • 举报
回复
There must be some problem!
Close the table which you are using!
then try again!
BDE is database engineer which will be out of the history!
you should use ADO and so on
Robin 2003-09-21
  • 打赏
  • 举报
回复
:>
thp 2003-09-20
  • 打赏
  • 举报
回复
把那几条记录删掉,重新输入,看有没有问题,如果仍有问题,会不会有触发子禁止了某些记录值的修改呢。

1,178

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 数据库及相关技术
社区管理员
  • 数据库及相关技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧