设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 2950|回复: 6
打印 上一主题 下一主题

[ADO/DAO] Recordset的骚操作——再谈不绑定数据源操作记录

[复制链接]
跳转到指定楼层
1#
发表于 2020-12-18 16:11:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
       早在几年前写过一个帖子《【新手进阶】之九:浅谈不绑定数据源操作记录》,关于在窗体上不绑定数据源时,如何处理数据的事情。       对于已经入门的版友,我的建议是:不推荐在窗体上绑定数据源。原因如下:
       比如,有些数据发现有错,想修改好才保存,如果窗体绑定了数据源,按下回车键可能一不小心就保存了。而在不绑定窗体的情况下,需要点击“保存”才会保存数据。这样,更加便于检查数据。

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

      增删改都属于操作查询,实现方式大同小异。比如,新增记录,无非就是将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
复制代码

有什么问题欢迎回复本帖~~~



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

评分

参与人数 2经验 +35 收起 理由
ly + 15 (其它)优秀教程、原创内容、以资鼓励、其.
5988143 + 20 (其它)优秀教程、原创内容、以资鼓励、其.

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
2#
发表于 2020-12-18 16:37:26 | 只看该作者
先學了再說,謝謝大佬
3#
发表于 2020-12-18 16:41:22 | 只看该作者
繼續學習中。。。。。。

点击这里给我发消息

4#
发表于 2020-12-19 11:05:50 | 只看该作者
不错!!赞
回复

使用道具 举报

点击这里给我发消息

5#
发表于 2020-12-19 12:06:00 来自手机 | 只看该作者
不错,赞
回复

使用道具 举报

6#
发表于 2020-12-21 15:41:57 | 只看该作者
不错!!赞
回复

使用道具 举报

7#
发表于 2020-12-23 08:24:08 | 只看该作者
大佬的课程怎么能少了我!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-11-29 03:14 , Processed in 0.136116 second(s), 36 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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