设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 5676|回复: 5

[窗体] 【新手入门】之二十:“书与书签”——bookmark属性答疑

[复制链接]
发表于 2013-2-6 22:49:00 | 显示全部楼层 |阅读模式
      Recordset和Bookmark就像书与书签的关系,是为smilingkiss答疑而提出来的。这只是我的理解,不当之处,欢迎拍砖。不过,话又说回来,这信手拈来的类比,只为了更形象地说明问题,自然不可能无懈可击,如果非要咬文嚼字,——据闻,广东话有个更形象的说法:“捉字虱”,——揪住某一点不放的话,以我的辩才,大概只有甘拜下风了。^_^

       扯远了,现在回到主题。以下面代码为例:
  1. Private Sub 编号_Click()
  2. Dim MyNum As Long
  3. Dim rst As DAO.Recordset, rst2 As DAO.Recordset
  4. Set rst = Me.Form.Recordset
  5. Set rst2 = Me.Form.Parent.Form.frm_Tab_查档资料_sub1.Form.Recordset
  6. MyNum = rst("编号")
  7. rst2.FindFirst "编号=" & MyNum
  8. rst2.Bookmark = Me.Parent.Form.frm_Tab_查档资料_sub1.Form.Recordset.Bookmark
  9. End Sub
复制代码
先说说附件的要求(详见【新手入门】从“书与女友恕不外借”谈起——浅谈“Bookmark”的使用),rst记录集所对应的窗体为数据表子窗体(以下简称“数据表窗体”),rst2所对应的是同一层级别的另一个单个窗体(以下简称“单个窗体”)。现在是希望点击数据表窗体的编号,单个窗体的每个字段即显示该编号所对应的记录信息。

      好。现在开头的比方,我们先来理清楚这是一个怎么样的关系。

       按前面的说法,记录集相当于书。现在的问题是:哪本才是“书”?单个窗体还是数据表窗体?不清楚?没关系。我们再回到一个简单的问题:我们把一本书的目录和正文内容分开(真是读书“破”万卷啊),现在想找到某一节的内容,该肿么办?按常理,只能先从目录找出页码,然后再去正文里翻了,是不是?
       很好。问题来了:记录集rst(数据表窗体)是不是只起到目录的作用呢?显而易见,rst只是用来查找的工具。而我们的目的是在记录集rst2(单个窗体)中根据已有条件找到相关信息。——显然,“书”只能是单个窗体的记录集了。


       通过上面的讲解,相信大家对目录”已经了然,现在的问题只不过是按什么方式进行检索罢了。对于书籍,一般是根据页码来检索。换句话说,拿什么来作为我们的页码呢?在这里,“编号”字段就相当于页码了。——当然,你也可以设置别的字段为检索条件。就好比一些书可以按关键词或者开头字母来进行检索,但需要注意的是,可能检索出来不止一个结果。这个情况对窗体记录集同样适用。

       根据目录给出的页码,最后一步,便是去翻到书的那一页了。对于记录集来说,便是这一句:
       rst2.Bookmark = Me.Parent.Form.frm_Tab_查档资料_sub1.Form.Recordset.Bookmark
       为什么不是反过来呢:Me.Parent.Form.frm_Tab_查档资料_sub1.Form.Recordset.Bookmark= rst2.Bookmark
       我们对照前面“书”和“目录”的说法就会明白这一点了:我们要找的页码是在“书”(rst2)上而不是“目录”上呀。

       接下来解释几个疑问:
       问题1:bookmark是早已存在的了?
       准确点讲,书签依赖于书而存在。有了书,书签才有意义。类似地,只有窗体的记录集打开了,书签才有效。和现实意义的书签不一样的是,bookmark是不会随着窗体而保存的。也就是说,现在你跳转到某个bookmark后,再次打开窗体时不会跳到之前的那个bookmark去,而是在默认记录上。
       问题2:bookmark属性能否显示?
       事实上。这个问题我还真不知道该怎么回答。按smilingkiss的想法,我觉得他可能是想定量地去描述这个属性,就好比一块豆腐是什么形状的,长宽高各是多少。很遗憾,bookmark属性却像豆腐的柔软性一样,我只知道豆腐是软的,但是我无法告诉你它到底有多软。同样地,Msgbox Me.Parent.Form.frm_Tab_查档资料_sub1.Form.Recordset.Bookmark无法弹出正确信息来。

      不厌其烦讲了这么多,不知道大家的理解又是怎样呢?下面附上官方在帮助文档上的解释与说明:

【新手入门】之一:If分支语句
【新手入门】之二:分支语句总结
【新手入门】之三:循环语句For
【新手入门】之四:循环语句Do和死循环
【新手入门】之五:公共变量与传址过程、传值过程
【新手入门】之六:“悲欢离合总无情”——浅谈Split和Join
【新手入门】之七:嵌套与并列——再谈If流程问题
【新手入门】之八:“连就连”——浅谈“&”和“+”连接符的区别

【新手入门】之九:从百钱百鸡谈起——浅谈“规划求解”兼答lingjiang问
【新手入门】之十:书到用时方恨少——自定义菜单(Access 2003)的制作
【新手入门】之十一:浅谈ADO之序言
【新手入门】之十二:浅谈ADO之Connection
【新手入门】之十三:浅谈ADO之Conmmand(上)
【新手入门】之十四:浅谈ADO之Command(下)
【新手入门】之十五:浅谈ADO之Recordset(上)
【新手入门】之十六:浅谈ADO之Recordset(下)
【新手入门】之十七:浅谈列表框的使用
【新手入门】之十八:双击列表框修改数据
【新手入门】之十九:从“书与女友恕不外借”谈起——浅谈“Bookmark”的使用
【新手入门】之二十:“书与书签”——bookmark属性答疑
【新手入门】之二十一:记录集的“凌迟”——逐条导出记录集

【新手进阶】之一:基础算法(一)
【新手进阶】之二:基础算法(二)
【新手进阶】之三:基础算法(三)
【新手进阶】之四:基础算法(四)
【新手进阶】之五:排序搜索(一)
【新手进阶】之六:排序搜索(二)
【新手进阶】之七:递归算法
【新手进阶】之八:冒泡排序
【新手进阶】之九:浅谈不绑定数据源操作记录
【新手进阶】之十:工作日的计算
【新手进阶】之十一:“庖丁解牛”和“纪昌学射”——浅谈表格式文本数据的导入
【新手进阶】之十二:从四脚腾空的奔马谈起——原来界面可以这样设计
【新手进阶】之十三:Outlook风格导航界面
【新手进阶】之十四:仓库管理系统

本帖子中包含更多资源

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

x

本帖被以下淘专辑推荐:

点击这里给我发消息

发表于 2013-2-6 23:13:32 | 显示全部楼层
坐到沙发
发表于 2013-2-7 10:24:30 | 显示全部楼层
有幸拜读,并且抢到板凳,谢谢,辛苦roy版主了
发表于 2013-2-7 10:43:48 | 显示全部楼层
Private Sub 编号_Click()
Dim MyNum As Long
Dim rst As DAO.Recordset, rst2 As DAO.Recordset
Set rst = Me.Form.Recordset
Set rst2 = Me.Form.Parent.Form.frm_Tab_查档资料_sub1.Form.Recordset
MyNum = rst("编号")
rst2.FindFirst "编号=" & MyNum

Me.Parent.Form.frm_Tab_查档资料_sub1.Form.Recordset.Bookmark = rst2.Bookmark

End Sub

版主,我把代码改成这样也可以正常运行喔,就是bookmark的赋值反过来了(倒数第二行代码)
 楼主| 发表于 2013-2-8 15:38:42 | 显示全部楼层
smilingkiss 发表于 2013-2-7 10:43
Private Sub 编号_Click()
Dim MyNum As Long
Dim rst As DAO.Recordset, rst2 As DAO.Recordset

从理论上来讲,这两个相同类型的变量,运行当然是没问题的,但是我们需要考虑到实际要求,因此不能反过来赋值。

点击这里给我发消息

发表于 2013-2-16 17:31:23 | 显示全部楼层
学习了.谢谢分享..
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-18 22:43 , Processed in 0.108345 second(s), 34 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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