设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 3598|回复: 9
打印 上一主题 下一主题

[帮助] 求助ADODB.recordset不会用

[复制链接]

点击这里给我发消息

跳转到指定楼层
1#
发表于 2008-10-18 09:43:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我照着一本书《ACCESS 2003公司数据库管理范例与应用》写一个 考勤管理 的MDB,最初是用Access 2007写的,第一个按扭就不会用,后来转换成Access 2003仍是不会用,

显示的错误信息为:用户定义类型未定义 (Dim Rs As ADODB.Recordset)

请高手帮忙指出一下,哪里错了。(附RAR原档)

非常感谢



Private Sub 删除职员_Click()
On Error GoTo err_删除职员_click
'定义字符型变量
Dim STemp As String
'定义用于循环的整型变量
Dim i As Integer
'定义数据集变量
Dim Rs As ADODB.Recordset
Set Rs = New ADODB.Recordset
'为打开数据表“查询语句”字符变量赋值
STemp = "Select * from 员工资料"
Rs.Open STemp, CurrentProject.Connection, adopenkeyset, adlockoptmistic
    Rs.MoveFirst
    For i = 1 To Rs.RecordCount
    If Rs("职员ID") = Me![员工资料 子窗体]![职员ID] Then
    Rs.Delete 1
    i = Rs.RecordCount + 1
    Else
    Rs.MoveNext
    End If
Next i
MsgBox "职员档案记录已经删除完成!", vbOKOnly, "删除完成"
Me![员工资料 子窗体].Requery
Set Rs = Nothing
exit_删除职员_click:
Exit Sub
err_删除职员_click:
MsgBox Err.descritpion
Resume exit_删除职员_click
End Sub
Private Sub 添加职员_Click()
On Error GoTo Err_添加职员_Click
'定义保存"查询语句"的字符型变量
Dim STemp As String
'定义数据集变量
Dim Rs As ADODB.Recordset
Set Rs = New ADODB.Recordset
STemp = "Select * From 员工资料"
'打开"员工资料"数据表
Rs.Open STemp, CruuentProject.Connection, adopenkeyset, adLockOptimistic
'判断窗体中必填或文本框组合框是否为空
    If Me![职员ID] <> "" And Me![部门ID] <> "" And Me![姓名] <> "" And Me![身份证ID] <> "" Then
    '如果必填文本框和组合框不为空
    '使用记录集的Addnew方法填加记录
    Rs.AddNew
    '把窗体中文本框和组合框内的值赋予记录集中对应的字段
    Rs("职员ID") = Me![职员ID]
    Rs("部门ID") = Me![部门ID]
    Rs("姓名") = Me![姓名]
    Rs("性别") = Me![性别]
    Rs("籍贯") = Me![籍贯]
    Rs("年龄") = Me![年龄]
    Rs("民族") = Me![民族]
    Rs("身份证ID") = Me![身份证ID]
    Rs("家庭电话") = Me![家庭电话]
    Rs("手机号码") = Me![手机号码]
    Rs("电子邮箱") = Me![电子邮箱]
    Rs("备注") = Me![备注]
   '使用记录集中的update方法来刷新记录集
   Rs.Update
   '弹出信息"添加完成"的提示信息
   MsgBox "员工档案记录已经成功添加", vbOKOnly, "添加完成"
   Else
   '如果必填文本框和组合框为空,则弹出“警告信息”
   MsgBox "窗体中必填文本或组合框不能为空!", vbOKOnly, "警告"
   Me![职员ID].SetFocus
   End If
   Me![员工资料 子窗体].requrey
   '释放系统为RS数据集分配的空间
   Set Rs = Nothing
Exit_添加职员_click:
    Exit Sub
Err_添加职员_Click:
    MsgBox Err.Description
    Resume Exit_添加职员_click
End Sub

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
2#
发表于 2008-10-18 11:43:21 | 只看该作者
把这个:
'定义数据集变量
Dim Rs As ADODB.Recordset
Set Rs = New ADODB.Recordset
改为:
Dim Rs As object
set rs = createobject("adodb.recordset")
试试看.
3#
发表于 2008-10-18 12:15:49 | 只看该作者
需要引用ado3.6

点击这里给我发消息

4#
 楼主| 发表于 2008-10-18 13:38:50 | 只看该作者
以下是Access 2007里的帮助,但我太菜,还是修改不了,按上面sgrshh29的,也不会做。

返回或设置一个 ADO Recordset 或 DAO Recordset 对象,该对象表示指定窗体、报表、列表框控件或组合框控件的记录源 (记录源:窗体、报表或数据访问页的基础数据源。在 Access 数据库中,它可以是表、查询,也可以是 SQL 语句。在 Access 项目中,它可以是表、视图、SQL 语句,也可以是存储过程。)。可读/写。

expression.Recordset

expression 必选。一个表达式,返回“适用于”列表中的某个对象。

注解
对于 DAO 中 ODBCDirect 类型的记录集不能使用此属性。

Recordset 属性返回的记录集对象提供在窗体、报表、列表框控件或组合框控件中正在预览的数据。例如,如果窗体基于查询,那么引用 Recordset 属性与使用同一个查询克隆 Recordset 对象等效。但是,与使用 RecordsetClone 属性不同的是,如果将某条记录更改为窗体的 Recordset 属性所返回的记录集中的当前记录,同时也会设置该窗体的当前记录。

只能通过 Visual Basic for Applications (VBA) (Visual Basic for Applications (VBA):Microsoft Visual Basic 的宏语言版本,用于编写基于 Microsoft Windows 的应用程序,内置于多个 Microsoft 程序中。) 代码来使用此属性。

Recordset 属性的读/写行为是由记录集的类型(ADO 或 DAO)以及在该属性所标识的记录集中包含数据类型(Access 或 SQL)决定的。

记录集的类型 基于 SQL 数据 基于 Access 数据
ADO 可读/写 可读/写
DAO 无 可读/写

以下示例依次打开一个窗体和一个记录集,然后将窗体的 Recordset 属性设置为新创建的 Recordset 对象,从而将该窗体绑定到此记录集。

Global rstSuppliers As ADODB.Recordset
Sub MakeRW()
DoCmd.OpenForm "Suppliers"
Set rstSuppliers = New ADODB.Recordset
rstSuppliers.CursorLocation = adUseClient
rstSuppliers.Open "Select * From Suppliers", _
CurrentProject.Connection, adOpenKeyset, adLockOptimistic
Set Forms("Suppliers").Recordset = rstSuppliers
End Sub

使用 Recordset 属性:

将多个窗体绑定到一个公用数据集。这允许对多个窗体进行同步。例如,
   Set Me.Recordset = Forms!Form1.Recordset
                针对窗体上不直接支持的 Recordset 对象使用多种方法。例如,在自定义对话框中,可以将 Recordset 属性与 ADO Find 或 DAO Find 方法结合使用来查找记录。
在影响多个窗体的一组编辑操作周围包装一个事务(可以回滚)。
更改窗体的 Recordset 属性还可能会更改 RecordSource、RecordsetType 和 RecordLocks 属性。同样,某些与数据相关的属性(例如,Filter、FilterOn、OrderBy 和 OrderByOn 属性)可能会被替代。

调用窗体记录集的 Requery 方法(例如,Forms(0).Recordset.Requery)可能会导致窗体取消绑定。若要刷新绑定到记录集的窗体中的数据,请将窗体的 RecordSource 属性设置为其自身 (Forms(0).RecordSource = Forms(0).RecordSource)。

当窗体绑定到记录集时,使用“按窗体筛选”命令时会出现错误。

示例
以下示例使用 Recordset 属性从当前的窗体创建 Recordset 对象的新副本,并将字段的名称显示在“调试”窗口中。

Sub Print_Field_Names()
    Dim rst As DAO.Recordset, intI As Integer
    Dim fld As Field

    Set rst = Me.Recordset
    For Each fld in rst.Fields
        ' Print field names.
        Debug.Print fld.Name
    Next
End Sub
                下一个示例使用 Recordset 属性和 Recordset 对象,将记录集与窗体的当前记录同步。当从组合框中选择公司名称时,将使用 FindFirst 方法来查找该公司的记录,从而在该窗体上显示找到的记录。

Sub SupplierID_AfterUpdate()
    Dim rst As DAO.Recordset
    Dim strSearchName As String

    Set rst = Me.Recordset
    strSearchName = CStr(Me!SupplierID)
    rst.FindFirst "SupplierID = " & strSearchName
    If rst.NoMatch Then
        MsgBox "Record not found"
    End If
    rst.Close
End Sub
                以下代码有助于确定在不同情况下 Recordset 属性所返回的记录集的类型。

Sub CheckRSType()
    Dim rs as Object

    Set rs=Forms(0).Recordset
    If TypeOf rs Is DAO.Recordset Then
        MsgBox "DAO Recordset"
    ElseIf TypeOf rs is ADODB.Recordset Then
        MsgBox "ADO Recordset"
    End If
End Sub
5#
发表于 2008-10-18 19:31:06 | 只看该作者

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
6#
发表于 2008-10-18 20:39:42 | 只看该作者
仅仅是引用的问题。

没有必要将ADO改为DAO。

点击这里给我发消息

7#
 楼主| 发表于 2008-10-20 08:12:37 | 只看该作者
谢谢楼上的帮助,特别是sgrshh

[ 本帖最后由 雪野情匆 于 2008-10-21 16:30 编辑 ]
8#
发表于 2008-10-22 20:06:09 | 只看该作者
坚决回复帖
9#
发表于 2009-9-1 14:43:30 | 只看该作者
正好学习一下
10#
发表于 2009-9-1 23:29:02 | 只看该作者
得到满意的答复是最好的
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-29 10:33 , Processed in 0.105563 second(s), 34 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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