Office中国论坛/Access中国论坛

标题: 【新手入门】之十九:从“书与女友恕不外借”谈起——浅谈“Bookmark”的使用 [打印本页]

作者: roych    时间: 2012-8-21 23:40
标题: 【新手入门】之十九:从“书与女友恕不外借”谈起——浅谈“Bookmark”的使用
       还是念高中的时候,Roy有个爱书如命的朋友,他的口头禅是“书与女友,恕不外借”,这算是够狠的了。不过这难不倒脸皮比较厚的Roy,你不是不“外借”嘛,那“内借”总可以吧?——“内借”的意思是说,我只在宿舍内读,而不带出去。
       遇到巧舌如簧的Roy,他自然是没法了,只好无奈地说了句,“看书时不准折页角”,想了想又说,“也不准在中间折书页”,^_^,看来这次学乖了。
        不准折页角,估计会让相当部分人感到很不习惯。毕竟有些长篇小说,一时半会儿看不完时,下一次继续时往往会不记得看到哪里了吧?这当然对于我不成问题,因为我往往能记得住看到哪一页。只是没有这本事的人该怎么办呢?很简单,用书签啊。看到哪一页就把书签插入书页之间,下次就可以直接翻开夹着书签的那一页开始就好了。

       说到书签,其实在Access里有很多类似的“书签”,例如“索引”就相当于书签,适当的索引会优化查询(适当的书签会方便你查阅资料)。不过我这里要谈的是真正的书签,下面就让我们用隆重的掌声请出:Bookmark
       Bookmark,中文名:书签。他一生致力于在记录集的跳转上,并以此获得DAO记录集诺贝尔奖。^_^

       在附件中,点击数据表子窗体(以下简称甲窗体)的“编号”字段,另一个子窗体(以下简称乙窗体)则会显示对应记录的明细。
实现原理如下:先获取甲窗体数据集单击的字段值,再以此为条件,对乙窗体记录集进行查找,然后用书签(Bookmark)来定位。
       在使用过程中,请特别留意:以Parent属性来引用同一层的子窗体的用法。
[attach]50207[/attach]
【新手入门】之一:If分支语句
【新手入门】之二:分支语句总结
【新手入门】之三:循环语句For
【新手入门】之四:循环语句Do和死循环
【新手入门】之五:公共变量与传址过程、传值过程
【新手入门】之六:“悲欢离合总无情”——浅谈Split和Join
【新手入门】之七:嵌套与并列——再谈If流程问题
【新手入门】之八:“连就连”——浅谈“&”和“+”连接符的区别

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

【新手进阶】之一:基础算法(一)
【新手进阶】之二:基础算法(二)
【新手进阶】之三:基础算法(三)
【新手进阶】之四:基础算法(四)
【新手进阶】之五:排序搜索(一)
【新手进阶】之六:排序搜索(二)
【新手进阶】之七:递归算法
【新手进阶】之八:冒泡排序
【新手进阶】之九:浅谈不绑定数据源操作记录
【新手进阶】之十:工作日的计算
【新手进阶】之十一:“庖丁解牛”和“纪昌学射”——浅谈表格式文本数据的导入
【新手进阶】之十二:从四脚腾空的奔马谈起——原来界面可以这样设计
【新手进阶】之十三:Outlook风格导航界面
【新手进阶】之十四:仓库管理系统
作者: imono    时间: 2012-8-22 07:37
太好了,这两天刚好在纠结于类似的问题,收了
作者: jinzhanxi    时间: 2012-8-22 08:23
谢谢分享~~~~
作者: yanwei82123300    时间: 2012-8-22 08:23
roych 谢谢分享您的大作!
作者: 13601812106_01    时间: 2012-8-22 10:46
学习
作者: lazybird    时间: 2012-8-22 19:40
第一时间支持版主
作者: ycxchen    时间: 2012-8-25 17:28
学习学习!
作者: 老鬼    时间: 2012-8-28 09:47
我比较在意:书既然可以内借,那女友应该也行吧?
作者: asklove    时间: 2012-8-30 16:12
这个好,一直想找Bookmark的例子。
作者: wufeng980114    时间: 2012-9-1 12:33
收藏了,谢谢
作者: smilingkiss    时间: 2013-2-2 17:46
版主:拜读了你的文章,受益匪浅,想请教你,能否解释一下这一段语句:
rst2.Bookmark = Me.Parent.Form.frm_Tab_查档资料_sub1.Form.Recordset.Bookmark
逻辑上是什么功能,谢谢!
作者: roych    时间: 2013-2-3 11:07
smilingkiss 发表于 2013-2-2 17:46
版主:拜读了你的文章,受益匪浅,想请教你,能否解释一下这一段语句:
rst2.Bookmark = Me.Parent.Form.frm_Ta ...

将当前记录集的书签设置为子窗体记录集的书签。换句话来说,选择了子窗体的某天记录,那么主窗体的记录就自动跳转到相关记录。
作者: smilingkiss    时间: 2013-2-3 12:30
roych 发表于 2013-2-3 11:07
将当前记录集的书签设置为子窗体记录集的书签。换句话来说,选择了子窗体的某天记录,那么主窗体的记录就 ...

哦,我还以为前一句:findfirst那句就已经做了定位了
作者: smilingkiss    时间: 2013-2-4 09:06
roych 发表于 2013-2-3 11:07
将当前记录集的书签设置为子窗体记录集的书签。换句话来说,选择了子窗体的某天记录,那么主窗体的记录就 ...

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
rst2.Bookmark = Me.Parent.Form.frm_Tab_查档资料_sub1.Form.Recordset.Bookmark
End Sub

版主,我还是不太明白:既然之前一直都是用rst2来操作,findfirst"编号=" & mynum已经定位了rst2的记录位置了,然后为什么又出来Me.Parent.Form.frm_Tab_查档资料_sub1.Form.Recordset.Bookmark呢?我理解是,既然定位是rst2的记录,bookmark直接用上rst2的就是了,为什么还要用Me.Parent.Form.frm_Tab_查档资料_sub1.Form.Recordset.Bookmark赋值到rst2呢?
作者: roych    时间: 2013-2-4 13:03
诚然,数据表子窗体和主窗体的数据源是相同的。先说说当时那位朋友的要求吧:
数据表子窗体只用于展示,而禁止编辑;主窗体用于查询和编辑。这样一来,出于迅速跳转记录的考虑,用Bookmark属性就显得有这个必要了。
rst2.FindFirst "编号=" & MyNum '这一句用于记录用户点击编号的记录所在的位置。
rst2.Bookmark = Me.Parent.Form.frm_Tab_查档资料_sub1.Form.Recordset.Bookmark'而这句则是把所有字段所对应的记录重新载入。
现在来讲述下原理:先找到用户所选择的记录所在的位置,然后再更新所有字段对应的记录。
不知道我表达得是否准确了。你可以试试删除掉这一行再随便点选子窗体中的某个“编号”,看看所对应的字段会不会更新为相关信息,我相信这样会让你对这个属性有更进一步的理解。
作者: smilingkiss    时间: 2013-2-4 13:30
roych 发表于 2013-2-4 13:03
诚然,数据表子窗体和主窗体的数据源是相同的。先说说当时那位朋友的要求吧:
数据表子窗体只用于展示,而 ...

版主,谢谢你详细的解答,你说的逐句删除验证,我确实试过了,或者对于心中的不解表述不是很清楚,或者我换一种方式问问:
在rst2.Bookmark = Me.Parent.Form.frm_Tab_查档资料_sub1.Form.Recordset.Bookmark这一句之前
rst2.Bookmark是什么?或者说在赋值之前,rst2有没有bookmark的?
另外:
Me.Parent.Form.frm_Tab_查档资料_sub1.Form.Recordset的bookmark是因为rst2.FindFirst "编号=" & MyNum 这一句产生的吗?
作者: roych    时间: 2013-2-4 14:03
smilingkiss 发表于 2013-2-4 13:30
版主,谢谢你详细的解答,你说的逐句删除验证,我确实试过了,或者对于心中的不解表述不是很清楚,或者我换一种 ...

打个不太恰当的比方吧:
书籍的目录是存在的,但是想找到我们所需要的内容,显然还要先做一个动作,那就是:去目录里看我们想要的内容在哪一页。
Bookmark相当于书的页码,是存在的。只是如果不翻看页码(FindFirst),我们就无法找到想要的内容(字段记录)。——这是我的理解。
作者: smilingkiss    时间: 2013-2-4 14:29
roych 发表于 2013-2-4 14:03
打个不太恰当的比方吧:
书籍的目录是存在的,但是想找到我们所需要的内容,显然还要先做一个动作,那就 ...

版主,既然说先要找到书的页码,那么这句-----rst2.FindFirst "编号=" & MyNum
就是找书的页码了,而且找到的页码应该是rst2的页码,也就是说rst2的bookmark已经找到了,所以我就纳闷了,为什么下面一句的赋值不是反过来呢:
Me.Parent.Form.frm_Tab_查档资料_sub1.Form.Recordset.Bookmark = rst2.Bookmark

作者: roych    时间: 2013-2-5 15:05
对呀。找到书的页码之后,是不是应该根据页码去翻到目标页呢?^_^
首先,我们要确定,到底哪本是“书”,哪本是“目录”?显然我们要看的书是rst2,而rst只是作为目录来用(虽然rst也包含了全部信息)。——这一点能理解么?
其次,就是如何“翻书”了。这里再说一次,——我希望这是最后一次,^_^
在“目录”中,每个“编号”字段相当于一个页码。单击编号,即表示我们找到了“页码”,接下来便是“翻书。——这时候再回头看看前面所提及的,我们该“翻书”还是“翻目录”?答案显而易见。
作者: smilingkiss    时间: 2013-2-5 16:52
本帖最后由 smilingkiss 于 2013-2-5 17:01 编辑
roych 发表于 2013-2-5 15:05
对呀。找到书的页码之后,是不是应该根据页码去翻到目标页呢?^_^
首先,我们要确定,到底哪本是“书”,哪 ...

谢谢啊,版主
对了,关于bookmark这个属性,可以用msgbox来立即显示其值的吗?
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.Recordset.FindFirst "id=30"
MsgBox rst2.Bookmark
MsgBox Me.Parent.Form.frm_Tab_查档资料_sub1.Form.Recordset.Bookmark
rst2.Bookmark = Me.Parent.Form.frm_Tab_查档资料_sub1.Form.Recordset.Bookmark
End Sub

我在这里插入了两个msgbox,打算看看bookmark赋值前的值,不过显示是"?",bookmark有没有具体值可以显示出来的?

另外,烦请版主再帮我解释一下:
Set rst2 = Me.Form.Parent.Form.frm_Tab_查档资料_sub1.Form.Recordset
rst2.Bookmark = Me.Parent.Form.frm_Tab_查档资料_sub1.Form.Recordset.Bookmark
第一句已经把frm_Tab_查档资料_sub1赋给rst2了,那么就本身意味着frm_Tab_查档资料_sub1.bookmark就等于rst2.bookmark了吗?为什么下面那句还要重复赋一次bookmark呢?

小弟理解能力有限,望版主多多体谅,这个问题也不急的,望版主有空的时候再指点一二,我会认真学习的,谢谢!
作者: fnsmydyang    时间: 2015-5-31 17:02
学习一下,谢谢分享。
作者: shawncharly    时间: 2015-7-16 14:49
什么屌东西这么贵
作者: roych    时间: 2015-7-18 11:47
shawncharly 发表于 2015-7-16 14:49
什么屌东西这么贵

不少实例转到了源码,都要扣2个点,我下载也是一样的。
作者: purplerose    时间: 2016-3-18 13:53
#书与女友恕不外借” ROYCH  您真有创意了
作者: newglord    时间: 2016-4-9 20:37
回复并下载
作者: pyh512    时间: 2016-11-10 13:21
有点意思
作者: 玉树TMD临风    时间: 2022-12-5 20:30
正好在写档案系统,拿来学习一下




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