Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 6912|回复: 5

[已解决]vba access数据库中.RecordCount =-1的问题

[复制链接]
发表于 2014-10-31 16:11 | 显示全部楼层 |阅读模式
Private Sub srch()
    If TextBox1.Text <> "" Then
        Application.ScreenUpdating = False
        Dim myData As String, myTable As String, SQL As String
        Dim cnn As ADODB.Connection
        Dim rs As ADODB.Recordset
        Dim rs2 As ADODB.Recordset
        Dim i As Integer
    '清除工作表的全部数据
        On Error Resume Next
        Range("A2:k" & [a65536].End(3).Row & "").AutoFilter Field:=2
        On Error GoTo errhandle
        ActiveSheet.Cells.Clear
        sername = "\\" & readInfo("IP_Address")
        myData = sername & "\share\Desktop\Database61.accdb"      '指定数据库
        myTable = "gzmdb"        '指定数据表
    '建立与数据库的连接
        Set cnn = New ADODB.Connection
        With cnn
            .Provider = "microsoft.ACE.oledb.12.0"
            .Open myData
        End With
    '查询数据表
        SQL = "Select rq As 日期,bm As 工号,zw As 职位,xm As 姓名,"
        SQL = SQL & "dq as 大区,qy as 区域,ybm As 原部门,xbm As 现部门,rzmx As 入职明细,"
        SQL = SQL & "lzmx As 离职明细,zwsjmx As 职位升降 from " & myTable & " where xm like'" & TextBox1.Value & "%' order by xm,rq"
        SQL2 = "select distinct bm from gzmdb where xm like'" & TextBox1.Value & "%'"
        'MsgBox SQL
        Set rs = New ADODB.Recordset
        Set rs2 = New ADODB.Recordset
        rs.Open SQL, cnn, adOpenKeyset, adLockOptimistic
        rs2.Open SQL2, cnn, adOpenKeyset, adLockOptimistic
        '显示查询结果
        MsgBox "数据库中的记录数为:" & rs.RecordCount
        '复制记录数据
        If rs.RecordCount > 0 Then
每次运行到这里,都是rs.RecordCount =-1,但命名中数据库中是有数据的啊,不能进行数据的读取,求教大神,我已经无法了。。。。
最佳答案
2014-10-31 16:20
        With cnn
            .Provider = "microsoft.ACE.oledb.12.0"
            .Open myData
        End With
改为
        With cnn
            .Provider = "microsoft.ACE.oledb.12.0"
            .CursorLocation = adUseClient
            .Open myData
        End With
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2014-10-31 16:14 | 显示全部楼层
需要设置一个属性
在adodb.connection打开前设置CursorLocation = adUseClient
否则recordcount返回的始终是-1
回复

使用道具 举报

 楼主| 发表于 2014-10-31 16:17 | 显示全部楼层
hwc2ycy 发表于 2014-10-31 16:14
需要设置一个属性
在adodb.connection打开前设置CursorLocation = adUseClient
否则recordcount返回的始终 ...

关于数据库,菜鸟一枚,求教大神,这个加在哪个地方?
回复

使用道具 举报

发表于 2014-10-31 16:17 | 显示全部楼层
如果不设置的话,你就只有不停的读了,通过eof来判断是否结束。
回复

使用道具 举报

发表于 2014-10-31 16:20 | 显示全部楼层    本楼为最佳答案   
        With cnn
            .Provider = "microsoft.ACE.oledb.12.0"
            .Open myData
        End With
改为
        With cnn
            .Provider = "microsoft.ACE.oledb.12.0"
            .CursorLocation = adUseClient
            .Open myData
        End With
回复

使用道具 举报

 楼主| 发表于 2014-10-31 16:28 | 显示全部楼层
hwc2ycy 发表于 2014-10-31 16:20
With cnn
            .Provider = "microsoft.ACE.oledb.12.0"
            .Open myData

真乃大神。。小生在此谢过。。。{:011:}
回复

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-4-26 22:31 , Processed in 0.277365 second(s), 8 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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