一个数据库错误提示?(100分)

  • 主题发起人 主题发起人 crystal
  • 开始时间 开始时间
C

crystal

Unregistered / Unconfirmed
GUEST, unregistred user!
在Dll中使用DataModule,然后在Timer里面调用数据库控件,用ADO+Access2000,
对ADOQuery做如下操作时:
with ADOQuery do begin
Edit;
FieldByName('Field1').AsInteger := FieldByName('Field1').AsInteger + Vaule1;
FieldByName('Field2').AsInteger := FieldByName('Field2').AsInteger + Vaule2;
Post;
end;

有时候会提示出错:
Insufficient or incorrect Key column information : too many rows affected by
update.

错误不定期的出现,加上是Dll里面,我无计可施,恳请大家帮忙看看。
 
这样Ado的毛病,要打一下补丁,下载以下两个补丁:
ftp://ftpc.borland.com/pub/delphi/devsupport/updates/delphi5/D5EntUpdate.exe
ftp://ftpc.inprise.com/pub/delphi/devsupport/updates/adoexpress/d5adoupdate2.exe
序列号在以下两个中找:
555-555-5555 9ex0-91x0
SKI-HD3-C139 92x0-92x1
 
这应该是数据表未设主键的缘故。
 
>>这应该是数据表未设主键的缘故。
没错,就是因为没有主键,同时插入了两条以上完全相同的记录,导致了修改的时候不知道修改那一个。因此就出了这个问题。
 
to svw0506:我试试看

to HunterTeam, yzhshi : 我设了主键的,而且没有相同的纪录,是在Edit时候出的
问题阿
 
>>我设了主键的,而且没有相同的纪录,
但主关键字段的信息却不在ADO控件中。看这个:TField.ProviderFlags
看看你的pfInKey在不在关键字的字段中?!
我觉得这个值一定没有的。。。
或者是用下面的代码:
procedure TrdmPcAppSvr.setAdoWhereKeyOnly(ADODataSet:TADODataSet);
var
rs_ : _RecordSet;
pty : Property_;
pties : Properties;
begin
rs_ := ADODataSet.Recordset;
pties := rs_.Properties;
pty := pties. Get_Item('Update Criteria');
pty.Value:=0;//值的范围 0~3
end;
{adCriteriaKey = $00000000;
adCriteriaAllCols = $00000001;
adCriteriaUpdCols = $00000002;
adCriteriaTimeStamp = $00000003;}
 
to all:问题解决了,我换用SQL就一切正常了,昏...

to wumeng:我去试试看你的办法

另外我还想顺便问一下:
1.ADO系统自带吗?
2.如果自带,那么版本是什么?
3.我的Provider用Jet 4.0,发布的时候需不需要发布ADO安装包?
4.如果Jet 4.0不行,那么可以换成什么?(系统自带的Provider)
 
1.ADO系统自带吗?
Ado是系统自带的。
2.如果自带,那么版本是什么?
大概随98在一起的是2.5版本,最好升级为2.6的。
3.我的Provider用Jet 4.0,发布的时候需不需要发布ADO安装包?
你可以将那个mdac_type.exe 还有 Jet40 SP5 (9x/NT)
4.如果Jet 4.0不行,那么可以换成什么?(系统自带的Provider)
Jet4.0就可以。
 
我的那段代码的意思是你告诉程序怎么生成SQL的WHERE语句,改变用SQL语句能解决问题就
行了。。。再追踪DELPHI的原因也不会追踪出什么来了,本来DELPHI的错误就不少。。。
 
to wumeng : 酱子啊,谢谢

to yzhshi : 抱歉我还不太明白,ADO2.5和Jet之间怎么对应的?ADO2.5就支持Jet4.0吗?

呵呵,我才开始用数据库,N菜啊..
 
Ado是微软的驱动引擎,用来连接Access、SQL Server、Oracle等数据库的。
而Jet就是Ado的“下级”,同样道理SQl Server也存在一部分驱动配合Ado的,Oracle也是一样
所以说Ado和Jet实际上是“上下级”的关系。在低版本的时候,Ado和Jet捆绑在一个安装包里面,但是在Ado2.6以后,
Ado中就不包含Jet驱动了,需要另外下载。

http://202.96.70.229/cakk/delphi/dbengine/dbengine.htm
 
>>to wumeng : 酱子啊,谢谢
什么意思?我没看明白。。。
 
to yzhshi:再次谢谢,最后一个问题:你的意思是98 or later自带了ADO和Jet4.0吗?

to wumeng:酱子=这样子,呵呵
 
真所谓实践出真知啊。
我也学习来着。
 
好象是2K后的都是ADO2.6,似乎Jet也不带了。
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
974
import
I
I
回复
0
查看
948
import
I
S
回复
0
查看
928
SUNSTONE的Delphi笔记
S
后退
顶部