设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

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

[窗体] 子窗体里选中的记录如何复制

[复制链接]
11#
 楼主| 发表于 2011-2-15 23:08:54 | 只看该作者
todaynew老汉,不是你这个意思。我的意思如图所示,先在主窗体进入添加新记录状态,然后在子窗体里选中要复制的记录,双击,该记录就复制在主窗体中了,接下来修改相关数据即可。不知我这样说,是否表达清楚我的意思没,koutx朋友上传的例子是我需要的效果,但说来也奇怪,我把koutx的代码粘贴在我的数据库里,运行结果就是不对头,折腾一下午都没搞懂原因。




本帖子中包含更多资源

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

x
12#
 楼主| 发表于 2011-2-15 23:13:19 | 只看该作者
roych 发表于 2011-2-15 14:24
我一般是设置一个非绑定窗体,引用到一个绑定窗体,再加上DoCmd.RunCommand acCmdRecordsGoToLast来处理的。 ...

你也上传个例子,让我们学习学习,好吗?
13#
发表于 2011-2-16 08:50:44 | 只看该作者
本帖最后由 todaynew 于 2011-2-16 10:01 编辑
简 发表于 2011-2-15 23:08
todaynew老汉,不是你这个意思。我的意思如图所示,先在主窗体进入添加新记录状态,然后在子窗体里选中要复 ...


这个事情很简单嘛,你在主窗体上建一个按钮,然后写如下代码:
Private Sub 复制_Click()
Dim ctls As Controls
Dim ctl As Control
Set ctls = Me.sub0.Form.Controls
For Each ctl In ctls
    If ctl.ControlType <> acLabel Then
        If ctl.Name <> "编号" Then
            Me.Controls(ctl.Name).Value = ctl.Value
        End If
    End If
Next ctl
End Sub

如果想用子窗体某字段的双击事件,则可以:
Dim ctls As Controls
Dim ctl As Control
Set ctls = Me.Controls
For Each ctl In ctls
    If ctl.ControlType <> acLabel Then
        If ctl.Name <> "编号" Then
            Me.Parent.Form.Controls(ctl.Name).Value = ctl.Value
        End If
    End If
Next ctl

如果想对子窗体所有控件的双击事件均加载复制功能,则可以:
Function AllDblClick()
Dim ctls As Controls
Dim ctl As Control
Set ctls = Me.Controls
For Each ctl In ctls
    If ctl.ControlType <> acLabel Then
        If ctl.Name <> "编号" Then
            Me.Parent.Form.Controls(ctl.Name).Value = ctl.Value
        End If
    End If
Next ctl
Me.Parent.Form.Requery
Me.Requery
Me.Parent.SetFocus
DoCmd.RunCommand acCmdRecordsGoToNew
End Function

Private Sub Form_Load()
Dim ctls As Controls
Dim ctl As Control
Set ctls = Me.Controls
For Each ctl In ctls
    If ctl.ControlType <> acLabel Then
        ctl.OnDblClick = "=AllDblClick()"
    End If
Next ctl
End Sub




本帖子中包含更多资源

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

x
14#
 楼主| 发表于 2011-2-16 21:22:24 | 只看该作者
喔,原来如此,哎,谢谢你了,总算解决了一个问题了,而且你20楼的例子很实用,谢谢,谢谢,不胜感激~~~~
15#
发表于 2011-2-16 18:55:48 | 只看该作者
DoCmd.RunCommand acCmdRecordsGoToNew      比     DoCmd.RunCommand acCmdRecordsGoToLast  安全。
除非将主窗体改为非绑定窗体。

16#
 楼主| 发表于 2011-2-16 20:00:51 | 只看该作者
todaynew 发表于 2011-2-16 18:55
DoCmd.RunCommand acCmdRecordsGoToNew      比     DoCmd.RunCommand acCmdRecordsGoToLast  安全。
除非 ...

我复制记录并不等于我采用这个记录的全部内空,有些内容我需要修改。为了安全,就像你所说的,我把主窗体采用非绑定形式,但出现了一个错误提示,如图所示。这是怎么回事呢。


本帖子中包含更多资源

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

x
17#
发表于 2011-2-16 20:30:56 | 只看该作者
本帖最后由 todaynew 于 2011-2-16 21:11 编辑
简 发表于 2011-2-16 20:00
我复制记录并不等于我采用这个记录的全部内空,有些内容我需要修改。为了安全,就像你所说的,我把主窗体 ...


把主子窗体名称改成一致即可。






本帖子中包含更多资源

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

x
18#
 楼主| 发表于 2011-2-16 21:11:47 | 只看该作者
todaynew 发表于 2011-2-16 20:30
把主子窗体名称改成一致即可。

能够复制了,没有弹出那个错误提示了,为什么要这样处理呢,为什么要求主子窗体的控件名一样呢。
19#
发表于 2011-2-16 21:14:44 | 只看该作者
简 发表于 2011-2-16 21:11
能够复制了,没有弹出那个错误提示了,为什么要这样处理呢,为什么要求主子窗体的控件名一样呢。

看红色部分就知道什么意思了。
Me.Parent.Form.Controls(ctl.Name).Value = ctl.Value
另:20楼给你了一个处理这个问题的完整例子。
20#
 楼主| 发表于 2011-2-16 17:45:35 | 只看该作者
本帖最后由 简 于 2011-2-16 17:58 编辑
todaynew 发表于 2011-2-16 14:12
加一句排除某些字段即可:
Function AllDblClick()
Dim ctls As Controls


我要双击后主窗体里显示刚才复制的记录,这样才便于修改,而你这是双击复制后就又进入添加新记录的状态。

我把DoCmd.RunCommand acCmdRecordsGoToNew      改为     DoCmd.RunCommand acCmdRecordsGoToLast

好像正确了。

我晓得为什么我运行你的例子失败的原因了,因为我是习惯了双击记录选择器来复制,而你是双击子窗体的任一控件来复制。为了更好的运行出你例子的效果,我把记录选择器取消了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-9-20 20:28 , Processed in 0.179747 second(s), 32 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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