设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

12下一页
返回列表 发新帖
查看: 7583|回复: 15
打印 上一主题 下一主题

[ADO/DAO] ADO recordset 与窗体的记录集

[复制链接]
跳转到指定楼层
1#
发表于 2004-8-3 21:14:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我创建一个ADO的recordset,然后赋给窗体的记录集,居然报错,是ACCESS的窗体不接受这种recordset吗?

Dim rs As ADODB.Recordset

  Set rs = New Recordset

  DoCmd.OpenForm "UDC"

  rs.CursorLocation = adUseClient

  rs.Fields.Append "ID", adNumeric

  rs.Fields.Append "Option", adBSTR

  rs.Fields.Append "OptionDescription", adBSTR

  rs.Fields.Append "HardCode", adBSTR

  Set Forms("udc").Recordset = rs

在最后一句 set 窗体 .recordset=rs 报错,“输入的对象不是有效的RECORDSET属性”
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
2#
发表于 2004-8-4 01:36:00 | 只看该作者
在LOAD事件中寫到

Private Sub Form_Load()

Dim CNN As New ADODB.Connection

Dim RST As New ADODB.Recordset



Set CNN = CurrentProject.Connection

RST.Open "AA", CNN, adOpenKeyset, adLockOptimistic, adCmdTable

Set Me.Recordset = RST



End Sub

好象记录集没有打开的缘故
3#
发表于 2004-8-4 03:37:00 | 只看该作者
?

[此贴子已经被作者于2004-8-3 19:41:58编辑过]

4#
发表于 2004-8-4 04:57:00 | 只看该作者
请教:如何用ADO的RecordSet对象引用当前窗体的记录集?


请教:如何用ADO的RecordSet对象引用当前窗体的记录集?





以前我一直使用DAO的RecordSet对象引用当前窗体的记录集或记录集副本,例如:


Dim  Rst  As  Recordset


Dim  lngJLS   As   Long





Set Rst = ME.RecordsetClone‘记录集副本


   或 Set Rst = ME.Recordset


lngJLS = Rst.RecordCount '读取窗体中的记录数


Rst.Close





现在,我想把DAO代码转换成ADO,例如:


Dim lngJLS As Long


Dim Rst As New ADODB.Recordset





Rst.CursorType = adOpenDynamic


Rst.LockType = adLockBatchOptimistic





Set Rst = ME.Recordset


lngJLS = Rst.RecordCount '读取子窗体中的记录数


Set Rst = Nothing





可是运行时,总是系统提示:“运行时错误‘13’类型不匹配”。





我用下列代码查看了当前窗体的记录集属性,


Dim  rs  As Object


Set rs = ME.Recordset


If   TypeOf rs Is ADODB.Recordset Then


    MsgBox "ADO Recordset"


Else 'If TypeOf  rs Is DAO.Recordset Then


    MsgBox "DAO Recordset"


End If


则系统返回提示 “DAO Recordset”。也就是说,当前窗体记录集的默认属性是DAO型。


我将DAO 的引用去掉后再试,结果还是一样。





请问高手、同仁,为什么窗体记录集的默认属性总是DAO型?如何才能使用ADO 的RecordSet对象引用当前窗体的记录集或记录集副本,而使它们类型匹配呢?


我已经试了很多方式,就是解决不了问题,只好向大家请教了。拜托,为盼!





----------------------------------------------


缘系ACCECC,感谢ACCESS中国。 2002-8-18 11:59:14    [code]<SCRIPT language=JavaScript>


var actioninfo3='单帖屏蔽';document.write (dvbbs_show_topic('10976','2','tmtony','','','tmtony@21cn.com','Http://www.office-cn.net|||18449932|||||||||||||||','','Images/userface/image37.gif','','站长','screen.width-600)this.style.width=screen.width-600;if(this.height>250)this.style.width=(this.width*250)/this.height;">


天大事总平常事 烦恼心皆贪欲心


','','不是的, me.Recordset是一个通用对象,只是因为你使用了jet的绑定,所以缺省就是DAO了,如果你想用它来存ado,使用下面方法


加载时


   Dim rs As ADODB.Recordset


   Set rs = New ADODB.Recordset


   With rs


       .ActiveConnection = CurrentProject.Connection


       .Source = "SELECT * FROM 你的表"


       .LockType = adLockOptimistic


       .CursorType = adOpenKeyset


       .Open


   End With


   Set Me.Recordset = rs





然后你后面引用的me.recordset me.resordsetclone即为ado


','2002-8-18 12:45:37','face0.gif','*.*.*.*','2143',1,0,75,2,'管理员','32','32','2442','2002-1-7','257855','4265','4271','','1',0,'0','level10.gif',1,'2004-8-3 9:47:44','
5#
发表于 2004-8-4 05:06:00 | 只看该作者
运行代码查看主要是ME.RECORDSET 默认是DAO 不是ADO。要在窗体加载时定义一个RS, ME.ME.RECORDSET =RS这样 窗体的RECORDSET就是ADO 型的了。
6#
 楼主| 发表于 2004-8-4 17:05:00 | 只看该作者
不是这个原因,我用以下代码通过:Set rs = New Recordset

  rs.CursorLocation = adUseClient

  rs.Open "UserDefineCode", CurrentProject.Connection, adOpenDynamic, adLockPessimistic, adCmdTable

  DoCmd.OpenForm "UDC"

  Set Forms("udc").Recordset = rs关键是一定要设CursorLocation = adUseClient,这个在ACCESS帮助中有说明。
7#
发表于 2004-8-4 21:19:00 | 只看该作者
Dim rs As ADODB.Recordset

  Set rs = New Recordset

  DoCmd.OpenForm "UDC"

  rs.CursorLocation = adUseClient

  rs.Fields.Append "ID", adNumeric

  rs.Fields.Append "Option", adBSTR

  rs.Fields.Append "OptionDescription", adBSTR

  rs.Fields.Append "HardCode", adBSTR

  rs.Open Me.Recordset.Name, CurrentProject.Connection



  

   

  Set Forms("udc").Recordset = rs

8#
 楼主| 发表于 2004-8-4 22:20:00 | 只看该作者
原来的窗体没有RECORDSET,应此用ME.RECORDSET.NAME 有问题,提示对象没设置。
9#
发表于 2004-8-4 22:43:00 | 只看该作者
Dim rs As ADODB.Recordset

  Set rs = New Recordset

  DoCmd.OpenForm "UDC"

  rs.CursorLocation = adUseClient

  rs.Fields.Append "ID", adNumeric

  rs.Fields.Append "Option", adBSTR

  rs.Fields.Append "OptionDescription", adBSTR

  rs.Fields.Append "HardCode", adBSTR

  rs.Open

rs.ActiveConnection = CurrentProject.Connection

  Set Forms("udc").Recordset = rs

10#
 楼主| 发表于 2004-8-4 23:09:00 | 只看该作者
多谢suredday, 第一个问题解决了,但接下来又有问题,打开的窗体的记录集不可更新,我设了rs.LockType = adLockOptimistic也没用,不知为何?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-5-10 16:59 , Processed in 0.126099 second(s), 33 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表