我的窗体上有一个DATA GRID,我想让DATA GRID 从指定的数据库(WENSHU.MDB)读取数据,我用了如下代码:
Option Explicit
    Dim WithEvents adoRS As Recordset
    Dim db As Connection
    Dim strU As String       '数据库相对路径Private Sub Form_Load()
    '###  定义strU为打开本文件夹数据库的相对路径  ###
    
    strU = App.Path
    If Right(strU, 1) <> "\" Then strU = strU + "\"
    strU = "Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False;Data Source=" & strU & "\Wenshu.mdb;"
          
    Set db = New Connection
    db.CursorLocation = adUseClient
    db.Open strU
    Set adoRS = New Recordset
    adoRS.Open "SELECT * FROM b1", db, adOpenStatic, adLockOptimistic
    Set DataGrid1.DataSource = adoRS
  
End Sub    可是无法运行,总是Dim WithEvents adoRS As Recordset中的WithEvents有问题,提示“非源自动事件”    以上程序是我在别人的小程序上截取的,原来的小程序只有一个窗口,很简单,为什么我复制下来后却不能用?请帮忙解答!谢谢!

解决方案 »

  1.   

    用adodc控件和datagrid组合,很方便啊。
      

  2.   

    这个窗体上还有一个查询操作,设计让查询结果在DATA GRID上列出来。如果用ADODC控件和DATAGRID组合,如何实现数据源更新。
      

  3.   

    “这个窗体上还有一个查询操作,设计让查询结果在DATA GRID上列出来。如果用ADODC控件和DATAGRID组合,如何实现数据源更新。”adodc的recordsource设为1-adcmdtext,这样就可以根据需要在程序中把adodc的recordsource改为想要的sql查询语句,然后adodc1.refresh,再datagrid1.refresh。这样就可以更新数据显示了。
      

  4.   

    Dim WithEvents adoRS As Recordset
    ==>
    Dim adoRs as adodb.Recordset
      

  5.   

    Dim WithEvents adoRS As Recordset
     Dim db As Connection       
     把着两条改为Dim adors As New ADODB.Recordset
    Dim db As New ADODB.Connection还有
    strU = App.Path
        If Right(strU, 1) <> "\" Then strU = strU + "\"
        strU = "Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False;Data Source=" & strU & "\Wenshu.mdb;"
    改为
    strU = "Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False;Data Source=" & App.Path & "\Wenshu.mdb;"
    去掉
    Set db = New Connection
    Set adoRS = New Recordset
    还必须引用
    Microsoft ActiveX Data Objects 2.0 Library
    或Microsoft ActiveX Data Objects 2.1 Library
      

  6.   

    如果我用了一条查询:
        Adodc1.RecordSource = "SELECT * FROM 传真表 WHERE 文件名称 LIKE '%" & 文件名称 & "%' "    我如何用程序判断共找出有多少条满足的记录?
      

  7.   

    全面解决 楼主第 1 个 问题:
    Option Explicit
        Dim WithEvents_adoRS As new adodb.Recordset
        Dim db As new adodb.Connection
        Dim strU As String       '数据库相对路径Private Sub Form_Load()
        '###  定义strU为打开本文件夹数据库的相对路径  ###
        
        strU = "Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False;Data Source=" & iif(right(app.path,1)="\",app.path & "Wenshu.mdb",app.path & "\Wenshu.mdb")
              
        db.CursorLocation = adUseClient
        db.Open strU
        adoRS.Open "SELECT * FROM b1", db, adOpenStatic, adLockOptimistic
        Set DataGrid1.DataSource = adoRS  
    End Sub第 2 个 问题(我如何用程序判断共找出有多少条满足的记录?)的解决方法:
     if adoRS.recordcount > 0 then
          Set DataGrid1.DataSource = adoRS  
     else
          msgbox "没有符合条件的记录!"
     end if这里面 adoRS.recordcount 为记录数~~~ 问题解决了~~~应该结分了~~~~
      

  8.   

    稍等片刻!
      asors.recordcount 返回的数好象是“查询过多少条记录”吧,并不是“查询到多少条记录”呀!
      

  9.   

    还有,请问如何让DATAGRID显示的内容不可修改。
      

  10.   

    先回答第2个问题 : (请问如何让DATAGRID显示的内容不可修改)这个你可以查看DATAGRID的属性,在DATAGRID上单击鼠标右键,找属性,里面可以把更新的复选框取消回答第1个问题:(“查询到多少条记录”)你想具体实现什么问题? 如果你只想查询前 N条记录的话,你可以在SQL语句里面就定义啊~ 用Top 这个关键字来决定你想查询多少条~~~~你这 20 分 可真不好赚啊~~~~说了这么多,还不一定能不能获得20分,哎~~~~
      

  11.   

    这是我写的。应用前要先引用:
    工程--->引用--->Microsoft ActiveX Data Object 2.x(版本号)
      

  12.   

    "如果我用了一条查询:
        Adodc1.RecordSource = "SELECT * FROM 传真表 WHERE 文件名称 LIKE '%" & 文件名称 & "%' "    我如何用程序判断共找出有多少条满足的记录?"print adodc1.recordset.recordcount"还有,请问如何让DATAGRID显示的内容不可修改。"不能增加记录:datagrid1.allowaddnew=false
    不能修改记录:datagrid1.allowupdate=false
    不能删除记录:datagrid1.allowdelete=false
      

  13.   

    这是ADO语句连接,你回他控件有什么用呀?
      

  14.   

    Text1.Text = adoRS.RecordCount   '得到数据集中的记录行目
      

  15.   

    还是csdngoodnight懂我的心8=)
    csdngoodnight是在烟台吗?