Office中国论坛/Access中国论坛

标题: Recordset的骚操作——再谈不绑定数据源操作记录 [打印本页]

作者: roych    时间: 2020-12-18 16:11
标题: Recordset的骚操作——再谈不绑定数据源操作记录
       早在几年前写过一个帖子《【新手进阶】之九:浅谈不绑定数据源操作记录》,关于在窗体上不绑定数据源时,如何处理数据的事情。       对于已经入门的版友,我的建议是:不推荐在窗体上绑定数据源。原因如下:
       比如,有些数据发现有错,想修改好才保存,如果窗体绑定了数据源,按下回车键可能一不小心就保存了。而在不绑定窗体的情况下,需要点击“保存”才会保存数据。这样,更加便于检查数据。

       今天有人在群里问到在没有表,——也就是只使用记录集的情况下,如何处理数据的问题。比如,排序,查询什么的。
       窗体绑定的数据源,其实是一个记录集。至于它的形式是表,链接表,查询,或者传递查询,还是本色出演的记录集,这并不重要。重要的是,如何去设计和操作。
      为了阐明这个原理,我决定做个简单的例子供大家去理解和体会。这里大致做了三个功能,查询,排序和删除记录。

      增删改都属于操作查询,实现方式大同小异。比如,新增记录,无非就是将rst.Delete改成rst.AddNew,然后给各个字段赋值,rst(字段)=xxx;而更新查询连rst.AddNew都不需要了,直接删掉rst.Delete,后面也是赋值。所以这里就不再加这几个按钮了。如果大家确实有需要,请回帖,我到时候重新设置一些子窗体来录入或者修改数据。

       按惯例,还是继续上代码,供有(没)需(注)要(册)的版友使用。
  1. '模块:
  2. Function get_rst(Optional ByVal strFilter As String = "") As ADODB.Recordset
  3.     Dim strSQL As String
  4.     Dim rst As New ADODB.Recordset
  5.     Dim cnn As New ADODB.Connection
  6.     cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & CurrentProject.Path & "\db2.mdb"
  7.     rst.CursorLocation = adUseClient
  8.     If strFilter = "" Then
  9.         strSQL = "select * from TbCarnet"
  10.     Else
  11.         strSQL = "select * from TbCarnet where 工单编号='" & strFilter & "'"
  12.     End If
  13.     rst.Open strSQL, cnn, adOpenKeyset, adLockOptimistic
  14.     Set get_rst = rst
  15. End Function
  16. '数据表子窗体
  17. Private Sub Form_Load()
  18.     Dim rst As New ADODB.Recordset
  19.     Set rst = get_rst()
  20.     Set Me.Form.Recordset = rst
  21.     rst.Close
  22. End Sub
  23. '主窗体
  24. Private Sub cmdDel_Click()
  25.     If Not IsNull(Me.comb_NO) Then
  26.         If MsgBox("确定删除这条记录?", vbOKCancel + vbInformation, "提醒") = vbOK Then
  27.             get_rst(Me.comb_NO.Value).Delete
  28.             Set Me.frm_Carnet_sub.Form.Recordset = get_rst("")
  29.         End If
  30.     End If
  31.     Me.frm_Carnet_sub.Requery
  32. End Sub


  33. Private Sub cmdQry_Click()
  34.     If IsNull(Me.comb_NO) Then
  35.         Set Me.frm_Carnet_sub.Form.Recordset = get_rst("")
  36.     Else
  37.         Set Me.frm_Carnet_sub.Form.Recordset = get_rst(Me.comb_NO.Value)
  38.     End If
  39.     Me.frm_Carnet_sub.Requery
  40. End Sub


  41. Private Sub cmdSort_Click()
  42.     Dim rst As New ADODB.Recordset
  43.    
  44.     If IsNull(Me.comb_NO) Then
  45.         Set rst = get_rst("")
  46.     Else
  47.         Set rst = get_rst(Me.comb_NO.Value)
  48.     End If
  49.     rst.Sort = "款号"
  50.     Set Me.frm_Carnet_sub.Form.Recordset = rst
  51.     Me.frm_Carnet_sub.Requery
  52. End Sub
复制代码
[attach]63931[/attach]
有什么问题欢迎回复本帖~~~




作者: iico    时间: 2020-12-18 16:37
先學了再說,謝謝大佬
作者: 5988143    时间: 2020-12-18 16:41
繼續學習中。。。。。。
作者: admin    时间: 2020-12-19 11:05
不错!!赞
作者: zpy2    时间: 2020-12-19 12:06
不错,赞
作者: yanwei82123300    时间: 2020-12-21 15:41
不错!!赞
作者: ly    时间: 2020-12-23 08:24
大佬的课程怎么能少了我!




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3