ADO错误'缺少更新或刷新的键列信息'怎样解决?(50分)

  • 主题发起人 主题发起人 jzx
  • 开始时间 开始时间
J

jzx

Unregistered / Unconfirmed
GUEST, unregistred user!
各位大虾,小弟写了个Dll,其中有一个通过ADO把Excel文档写回数据库的函数,
该函数在我的机器上调试、运行都没有问题,但到了客户的机器上却出现'缺少更新或刷新
的键列信息'的错误,我查阅了之前的帖子,知道刷新没有主键的表会出现这种错误,但我
的表是有主键的,而且记录不会重复,部分代码如下

ADOQuery1.sql.add('select f_img from template where f_id =''001''');//肯定有记录
ADOQuery1.Edit;
TBlobField(ADOQuery1.Fields[0]).LoadFromStream(Ms);//Ms是内存流
ADOQuery1.Post//出错
我的代码也应该是没问题的,问题出在哪呢?
是ADO的Bug吗?那里有补丁可以下载?
这个Bug在我发布的时候应该如何处理,(和补丁一块发布?!!)
希望各位大虾多多帮忙,多谢
 
为该表设置主键
 
我的表有主键!
 
设定LockType为:ltBatchOptimistic试试!
 
试过了,不行,奇怪的是在我的机器和别的机器上行,98,NT都没问题,在客户的98机器上
调试怎么都出错,d5的升级包,和两个ADO的补丁都装了也不管用,我的数据库是sql7,他的
数据库是sybase 11。5,我想应该不是数据库的问题,到底是怎么回事?我快急死了。
 
这种现象太多了
1.delphi安装adoupdate2
2.安装madc2.6

解决你的烦恼,已经解决我的烦恼
 
//在客户的98机器上,调试怎么都出错
mdac 2.6中不含jet,
他的98可能是第一版.到我的主页上下jet引擎,安装一下
aerobull.delphibbs.com
 
to aerobull:
我没用jet ,我用的是sql7和sybase 11.5

to yobdrow,
补丁都装了,还是不行
 
ADOQuery1.sql.add('select f_img from template where f_id =''001''');//肯定有记录
ADOQuery1.Edit;
TBlobField(ADOQuery1.Fields[0]).LoadFromStream(Ms);//Ms是内存流
ADOQuery1.Post//出错


呵呵,你笔误还是.........


好象缺了adoquery1.open
 
to yobdrow:
哈哈,确实笔误,不过不是这个原因。

最后我的问题解决了,改用SQL语句的方法实现的,'update template set f_img =:excelsheet where f_tmpbh =''001'''
我总结出两点
1.尽量不装mdac 2.6,因为高版本不一定向下兼容,否则有可能到用户的机器上出问题。
2.对数据库操作还是用SQL语句比较好,又快又安全。

好了,多谢各位帮忙,分钱了。
 
多人接受答案了。
 
后退
顶部