我要在程序中使用Adodb+DataGrid打开一个Access2000的表,要是用Adodc+DataGrid是没有问题的,但我现在想用Adodb打开则出现了问题:
代码:
    rs as new adodb.recordset
    conn as new adodb.connection    with conn
        .provider="Microsoft.Jet.OLEDB.4.0"
        .Open "E:\Temp.mdb"
    end with
    
    rs.Open "Select * From table1",conn,adopenstatic,adlockoptimistic
    set datagrid1.datasource=rs
    datagrid1.refresh    问题:执行了这段代码,无显示错误,但DataGrid1什么也不显示,若将OLEDB.4.0改为OLEDB.3.51打开一个Acess97的表则没有问题,但OLEDB.3.51无法打开Access2000的mdb文件.
    请问各位高手应如何解决这个问题呢?

解决方案 »

  1.   

    Public conn As ADODB.Connection
    'Public rs As ADODB.RecordsetPublic Sub Main()
        Set conn = New ADODB.Connection
     conn.ConnectionString = "driver={Microsoft Access Driver (*.mdb)};" & _
         "dbq=" & App.Path & "\..\data\Sing.mdb"
      ' conn.ConnectionTimeout = 30
       ' conn.ConnectionString = "driver={SQL Server};" & _
         "server=server;uid=userer;pwd=12345;database=azyw"
        '  conn.ConnectionString = "driver={SQL Server};" & _
         "server=localhost;uid=sa;pwd=;database=sing"
        conn.Open
    rs.Open "Select * From table1",conn,adopenstatic,adlockoptimistic
        set datagrid1.datasource=rs   bf.Show
    End Sub
      

  2.   

    dim N as long
       Dim strSQL As String
       
       dim conn as New ADODB.Connection
       dim rs as New ADODB.Recordset
       
       strSQL = App.Path & "\Biblio.mdb"
       strSQL = Replace(strSQL, "\\", "\")
       
       With conn
           If .State = adStateOpen Then
              .Close
           End If
           .CursorLocation = adUseClient
           .ConnectionString = "Provider=Microsoft.Jet.OLEDB.3.51;Persist Security Info=False;Data Source=" & strSQL
           .Open
       End With
         
       With rs
           .Open "Select * from Authors;", conn, adOpenStatic, adLockOptimistic
           If .BOF And .EOF Then
              msgbox "没有任何记录"
              Exit Sub
           End If
           .MoveFirst
           .movelast
           msgbox "有" & .recordcount & "条记录!"
           N = .recordcount
       End With
      

  3.   

    检查rs.recordcount的值是多少,如果等于表中的实际记录数,但DataGrid就是不显示,估计与你在设计阶段打开DataGrid的属性页,编辑过DataGrid的字段有关。
        在对象窗口右键单击DataGrid控件,在弹出的菜单中选择“清除字段”,以上故障即消失。
        我遇到过同样问题。但为什么会这样,恳求各位高手给予解答。
      

  4.   

    在ADO + Datagrid时,必须使用CursorLocation=adUseClient ,不能用CursorLocation=adUseServer,DataGrid错误。
    (微软有公布)
      

  5.   

    ADO连接:
    工程--->引用--->Microsoft ActiveX Data Object 2.x(版本号)Option ExplicitDim WithEvents adoRS As Recordset
    Dim db As Connection
    '提数据事件
        Set db = New Connection
        db.CursorLocation = adUseClient
        db.Open"Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False;Data Source=" & App.Path & "\db1.mdb;Jet OLEDB:Database Password=1234;"
    '                           ##########################################
    '打开密码是1234的Access2000数据库db1.mdb
    '不需要密码,就把Jet OLEDB:Database Password=1234;这段去掉    Set adoRS = New Recordset
        
        adoRS.Open "SELECT * FROM 表", db, adOpenStatic, adLockOptimistic
        '赋值给 DataGrid 表
        Set DataGrid1.DataSource = adoRS
        '表刷新
        DataGrid1.Refresh    '如果要绑定TextBox(数组):
        'Text1(0).DataField = 字段1
        'Text1(1).DataField = 字段2
        '.........
        Dim oText As TextBox 'TextBox
        For Each oText In Me.Text1
            Set oText.DataSource = adoRS
        Next
    '添加事件和保存
        adoRS.AddNew
        '保存
        adoRS![字段a] = text1.Text
        adoRS![字段b] = text2.Text
        adoRS.UpdateBatch adAffectAll'删除
        adoRS.Delete
        '重新赋值给表
        adoRS.Requery
        Set DataGrid1.DataSource = adoRS
        DataGrid1.Refresh    '其他相关操作:
        '上一条
        If Not adoRS.BOF Then adoRS.MovePrevious
        If adoRS.BOF And adoRS.RecordCount > 0 Then
             '已到最后返回
             adoRS.MoveFirst
        End If
        '下一条
        If Not adoRS.EOF Then adoRS.MoveNext    '下一条
        If adoRS.EOF And adoRS.RecordCount > 0 Then
              '已到最后返回
              adoRS.MoveLast
        End If
        '第一条
        If Not adoRS.BOF Then adoRS.MoveFirst
        '最末
        If Not adoRS.EOF Then adoRS.MoveLast
      

  6.   

    OK了!果然如michealsong2003(micheal)所说,只要加上一句"conn.CursorLocation=adUseClient"即解决了问题.多谢各位!