用DataGrid连接数据库时,提示"The current row is not available",有时提示,有时就不提示。

解决方案 »

  1.   

    工程--->引用--->Microsoft ActiveX Data Object 2.x(版本号)    Dim CN   As New ADODB.Connection                '定义数据库的连接
        Dim Rs   As New ADODB.Recordset    CN.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\NWIND.MDB;Persist Security Info=False"
        CN.Open    Rs.CursorLocation = adUseClient
        Rs.Open "select * from employees", CN, adOpenDynamic, adLockBatchOptimistic    Set DataGrid1.DataSource = Rs没问题呀!
      

  2.   

    可能我的问题叙述的不是很详细。If rst.State = 1 Then '暂停处
        rst.Close
    End IfWith rst
         .ActiveConnection = db
         .CursorLocation = adUseClient
         .CursorType = adOpenKeyset
         .LockType = adLockReadOnly
         .Properties("IRowsetIdentity") = True
         .Open tmpSQL, dbEnd With
    以上是一部分代码,运行到第一行“暂停处字样”,让程序停一下,再按F5继续,问题就不出现,直接运行完就出那个提示。注:我用的ADO连接DATAGRID。
      

  3.   

    If rst.State = 1 Then '暂停处
        rst.Close
    End If去掉。写:Set CN  = New ADODB.Connection   
    set Rs = New ADODB.Recordset
      

  4.   

    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
    '添加事件和保存
        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
      

  5.   

    改成:
        Dim Rs   As New ADODB.Recordset
        Rs.CursorLocation = adUseClient
        Rs.Open tmpSQL, db, adOpenDynamic, adLockBatchOptimistic    Set DataGrid1.DataSource = Rs
      

  6.   

    你说的和我做的差不多,但还不是问题的原因所在,我再找找原因吧, thank you anyway.