设为首页收藏本站

SKY外语、计算机论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

楼主: Kill
打印 上一主题 下一主题

Adodc过程声明与过程描述不匹配或者过程重名的错误解决

[复制链接]

150

主题

5

好友

1179

积分

管理员

Rank: 9Rank: 9Rank: 9

性别
保密

最佳新人 活跃会员 推广达人 宣传达人 突出贡献 优秀版主 论坛元老

跳转到指定楼层
楼主
发表于 2013-10-13 12:54:16 |只看该作者 |倒序浏览
作者:Kill 日期:2013-10-13 原文地址:http://www.skywj.com/thread-9189-1-1.html


好几年前的一个自己用VB写的一个记事本程序,今天偶然看到一篇好文章,想把它收藏进去,之前一直运行得好好的程序突然报错:

Procedure declaration does not match description of event or procedure having the same name

意思是“过程声明与过程描述不匹配或者过程重名”,于是到源程序中查看,问题出在事件上:

Private Sub Adodc1_MoveComplete(ByVal adReason As ADODB.EventReasonEnum, ByVal pError As ADODB.Error, adStatus As ADODB.EventStatusEnum, ByVal pRecordset As ADODB.Recordset)

引发错误的是最后一个参数:ByVal pRecordset As ADODB.Recordset

可是这个声明是向导添加的,而且一直运行良好。

不过我们知道,微软件的数据库中存在着不少至今也没能很好解决的问题。网上查了下,有关于这个错误的中文资料基本没有,然后在微软件MSDN上的找到一篇说明:


In versions of Visual Basic 6 prior to Service Pack 4, the ADO Data Control's events were designed to work only with ADO version 2.0. After you set a Reference to ADO later than 2.0 to workaround the Application Wizard problem, you receive the following error message
Compile Error: Procedure declaration does not match description of event or procedure having the same name.

To work around this new compile error, you must change the declaration of the ADO Data Control's events to include ADODB.Recordset20 instead of ADODB.Recordset.

Specifically, change the following event procedure:

Private Sub datPrimaryRS_MoveComplete(ByVal adReason As ADODB.EventReasonEnum, ByVal pError As ADODB.Error, adStatus As ADODB.EventStatusEnum, ByVal pRecordset As ADODB.Recordset)

-to-

Private Sub datPrimaryRS_MoveComplete(ByVal adReason As ADODB.EventReasonEnum, ByVal pError As ADODB.Error, adStatus As ADODB.EventStatusEnum, ByVal pRecordset As ADODB.Recordset20)


这段意思是说:VB6.0 SP4以前的版本,ADODC控件的事件在设计上是和ADO版本2.0匹配的,如果添加的参考是2.0以后的,就会出现这个错误。要解决这个错误可以把声明:

Private Sub datPrimaryRS_MoveComplete(ByVal adReason As ADODB.EventReasonEnum, ByVal pError As ADODB.Error, adStatus As ADODB.EventStatusEnum, ByVal pRecordset As ADODB.Recordset)

改成:

Private Sub datPrimaryRS_MoveComplete(ByVal adReason As ADODB.EventReasonEnum, ByVal pError As ADODB.Error, adStatus As ADODB.EventStatusEnum, ByVal pRecordset As ADODB.Recordset20)

我用2种方法尝试了
1、把参考改成ADO2.0的
2、参考用2.0以后的,声明改成ADODB.Recordset20

仍然不能解决问题,因为我的已经是SP6,而现在Win7里的ADO版本已经到2.8了。继续找资料,找到一个英文贴子:


I found a solution or work around

========================
1- I declared in my form

Option Explicit

Dim WithEvents db As ADODB.Recordset

2- then so that the form reseives event from Adodc I did this

Private Sub Form_Load()
Set db = Adodc1.Recordset
End Sub

Now when i select db in forms object i can see the events and they are generated automatic

Private Sub db_MoveComplete(ByVal adReason As ADODB.EventReasonEnum,
ByVal pError As ADODB.Error, adStatus As ADODB.EventStatusEnum, ByVal pRecordset As ADODB.Recordset)
MsgBox "It works"
End Sub
========================

我把这段主要意思翻译下:
1、先在窗体加上声明:


Option Explicit

Dim WithEvents db As ADODB.Recordset

2、在主窗体Load事件中加上

Private Sub Form_Load()
    Set db = Adodc1.Recordset
End Sub

3、更改ADODC的事件声明为

Private Sub db_MoveComplete(ByVal adReason As ADODB.EventReasonEnum,
ByVal pError As ADODB.Error, adStatus As ADODB.EventStatusEnum, ByVal pRecordset As ADODB.Recordset)

也就是把Adodc1改成了db,按照上面的步骤修改,问题彻底解决,一切恢复正常,我的记事本也可以正常运行了:





分享到: QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
分享淘帖0 收藏收藏0 评分评分

0

主题

0

好友

173

积分

注册会员

Rank: 2

性别
保密
沙发
发表于 2013-10-13 14:36:34 |只看该作者
本帖最后由 sky_yx 于 2015-12-30 14:19 编辑

感觉E文不好对编程是个障碍,如果E文好,看样子很有帮助啊。

我命由我不
回复

使用道具 评分 举报

0

主题

0

好友

173

积分

注册会员

Rank: 2

性别
保密
板凳
发表于 2013-10-13 15:15:39 |只看该作者
本帖最后由 sky_yx 于 2015-12-30 14:19 编辑

写得很好,感谢楼主的分享!

我命由我不
回复

使用道具 评分 举报

0

主题

0

好友

138

积分

注册会员

Rank: 2

性别
保密
地板
发表于 2013-10-13 20:38:54 |只看该作者
本帖最后由 sky_yx 于 2015-12-30 14:19 编辑

虽然暂时没碰到过,以后或许有参考的,谢谢

回复

使用道具 评分 举报

0

主题

0

好友

132

积分

注册会员

Rank: 2

性别
保密
5#
发表于 2013-10-14 01:43:05 |只看该作者
本帖最后由 sky_yx 于 2015-12-30 14:19 编辑

数据库编程很头痛,以后请多多指教

回复

使用道具 评分 举报

0

主题

0

好友

20

积分

新手上路

Rank: 1

性别
保密
6#
发表于 2013-10-14 08:21:33 |只看该作者
本帖最后由 sky_yx 于 2015-12-30 14:19 编辑

谢谢楼主,以后好好学习

回复

使用道具 评分 举报

您需要登录后才可以回帖 登录 | 立即注册


手机版|SKY外语计算机学习 ( 粤ICP备12031577 )    

GMT+8, 2024-12-22 01:09 , Processed in 0.128581 second(s), 32 queries .

回顶部