设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
楼主: roych
打印 上一主题 下一主题

[模块/函数] 【新手入门】之十九:从“书与女友恕不外借”谈起——浅谈“Bookmark”的使用

[复制链接]
11#
发表于 2013-2-2 17:46:10 | 只看该作者
版主:拜读了你的文章,受益匪浅,想请教你,能否解释一下这一段语句:
rst2.Bookmark = Me.Parent.Form.frm_Tab_查档资料_sub1.Form.Recordset.Bookmark
逻辑上是什么功能,谢谢!
12#
 楼主| 发表于 2013-2-3 11:07:02 | 只看该作者
smilingkiss 发表于 2013-2-2 17:46
版主:拜读了你的文章,受益匪浅,想请教你,能否解释一下这一段语句:
rst2.Bookmark = Me.Parent.Form.frm_Ta ...

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

哦,我还以为前一句:findfirst那句就已经做了定位了
14#
发表于 2013-2-4 09:06:09 | 只看该作者
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呢?
15#
 楼主| 发表于 2013-2-4 13:03:50 | 只看该作者
诚然,数据表子窗体和主窗体的数据源是相同的。先说说当时那位朋友的要求吧:
数据表子窗体只用于展示,而禁止编辑;主窗体用于查询和编辑。这样一来,出于迅速跳转记录的考虑,用Bookmark属性就显得有这个必要了。
rst2.FindFirst "编号=" & MyNum '这一句用于记录用户点击编号的记录所在的位置。
rst2.Bookmark = Me.Parent.Form.frm_Tab_查档资料_sub1.Form.Recordset.Bookmark'而这句则是把所有字段所对应的记录重新载入。
现在来讲述下原理:先找到用户所选择的记录所在的位置,然后再更新所有字段对应的记录。
不知道我表达得是否准确了。你可以试试删除掉这一行再随便点选子窗体中的某个“编号”,看看所对应的字段会不会更新为相关信息,我相信这样会让你对这个属性有更进一步的理解。
16#
发表于 2013-2-4 13:30:47 | 只看该作者
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 这一句产生的吗?
17#
 楼主| 发表于 2013-2-4 14:03:21 | 只看该作者
smilingkiss 发表于 2013-2-4 13:30
版主,谢谢你详细的解答,你说的逐句删除验证,我确实试过了,或者对于心中的不解表述不是很清楚,或者我换一种 ...

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

版主,既然说先要找到书的页码,那么这句-----rst2.FindFirst "编号=" & MyNum
就是找书的页码了,而且找到的页码应该是rst2的页码,也就是说rst2的bookmark已经找到了,所以我就纳闷了,为什么下面一句的赋值不是反过来呢:
Me.Parent.Form.frm_Tab_查档资料_sub1.Form.Recordset.Bookmark = rst2.Bookmark
19#
 楼主| 发表于 2013-2-5 15:05:29 | 只看该作者
对呀。找到书的页码之后,是不是应该根据页码去翻到目标页呢?^_^
首先,我们要确定,到底哪本是“书”,哪本是“目录”?显然我们要看的书是rst2,而rst只是作为目录来用(虽然rst也包含了全部信息)。——这一点能理解么?
其次,就是如何“翻书”了。这里再说一次,——我希望这是最后一次,^_^
在“目录”中,每个“编号”字段相当于一个页码。单击编号,即表示我们找到了“页码”,接下来便是“翻书。——这时候再回头看看前面所提及的,我们该“翻书”还是“翻目录”?答案显而易见。
20#
发表于 2013-2-5 16:52: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呢?

小弟理解能力有限,望版主多多体谅,这个问题也不急的,望版主有空的时候再指点一二,我会认真学习的,谢谢!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-12-27 00:00 , Processed in 0.087102 second(s), 33 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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