设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

1234下一页
返回列表 发新帖
查看: 8553|回复: 32
打印 上一主题 下一主题

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

[复制链接]
跳转到指定楼层
1#
发表于 2011-2-14 18:43:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我的主窗体是一个快速添加数据的窗体,子窗体是已经输入数据的数据表。我的要求是,在添加新记录时,如何把子窗体里选中的记录复制到主窗体的相关控件里,我写的代码如下:

Private Sub Form_DblClick(Cancel As Integer)
Dim cn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim sql As String
    Set cn = CurrentProject.Connection
        sql = "select * from tblGSdengji"
        rs.Open sql, cn, adOpenKeyset, adLockPessimistic, 1
'        rs.AddNew
        With Forms!frmGSdengji1.Form
        !cboxiaozu = rs("小组")
        !txtpinghao = rs("品号")
        !txtgj = rs("工件")
        !cbogx = rs("工序")
        !cbogr = rs("操作工")
        
        !txtNo.SetFocus
        rs.Update
        rs.Close
        cn.Close
        Set cn = Nothing
   
    End With
End Sub


我知道问题出在sql = "select * from tblGSdengji" 代码,但对于选中的记录,我不知代码上该如何表达,所以特向大家请教,在此先谢了。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
2#
发表于 2011-2-14 19:03:09 | 只看该作者
本帖最后由 todaynew 于 2011-2-14 19:10 编辑

没道理。
rs.AddNew后rs的各个字段值为null,这个时候,向窗体控件赋值的话,等于将控件置空。

你是不是这么个意思:
Private Sub Form_DblClick(Cancel As Integer)
Dim rs As New ADODB.Recordset
Dim sql As String
Dim ctls as controls
set ctls=Forms("frmGSdengji1").controls
sql = "select * from tblGSdengji"
rs.Open sql, CurrentProject.Connection, adOpenKeyset, adLockPessimistic
rs.moveLast
ctls("cboxiaozu").value = rs("小组").value
ctls("txtpinghao").value = rs("品号").value
ctls("txtgj").value= rs("工件").value
ctls("cbogx").value = rs("工序").value
ctls("cbogr").value = rs("操作工").value
rs.close
set rs=nothing
3#
发表于 2011-2-14 19:15:42 | 只看该作者
本帖最后由 todaynew 于 2011-2-14 19:17 编辑

实际上不用绕这个弯子,直接在子窗体的成为当前事件(或更新后事件)中,将子窗体的控件值赋值给主窗体控件即可:
set ctls=Forms("frmGSdengji1").controls
ctls("cboxiaozu").value = me.小组.value
ctls("txtpinghao").value = me.品号.value
ctls("txtgj").value= me.工件.value
ctls("cbogx").value = me.工序.value
ctls("cbogr").value = me.操作工.value

4#
 楼主| 发表于 2011-2-14 19:57:33 | 只看该作者
todaynew 发表于 2011-2-14 19:15
实际上不用绕这个弯子,直接在子窗体的成为当前事件(或更新后事件)中,将子窗体的控件值赋值给主窗体控件即 ...

不是这样的,我把附件传上来了,麻烦你看看。

当子窗体处于新记录状态时,我希望我双击子窗体指定的记录,就可把该记录复制到主窗体中,以此提高输入效率。但我双击来,总是第一条记录,而不是我选中的记录。

另外一个问题,如何让子窗体显示的记录按照管理卡号降序排列呢。是不是必须要做个查询或者用VBA代码来设置子窗体的记录源SQL,从而达到管理卡号降序的要求呢。


本帖子中包含更多资源

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

x
5#
发表于 2011-2-14 21:23:00 | 只看该作者
本帖最后由 koutx 于 2011-2-14 21:29 编辑

看你的意思,似乎应是追加查询。
在窗体frmGSdengji设计视图的属性中,在排序依据中填上:     编号 DESC
然后,按下面代码改写你原先的.
Private Sub Form_DblClick(Cancel As Integer) '双击复制记录
DoCmd.RunSQL "INSERT INTO tblGSdengji(小组, 品号, 工件, 工序, 操作工, 工时类别) SELECT '" & Me.小组 & "' AS 小组, '" & _
Me.品号 & "' AS 品号, '" & Me.工件 & "' AS 工件, '" & Me.工序 & "' AS 工序, '" & Me.操作工 & "' AS 操作工, '" & _
Me.工时类别 & "' AS 工时类别"

Form_frmGSdengji.Requery
Form_frmGSdengji.OrderByOn = True
End Sub

6#
发表于 2011-2-15 02:27:36 | 只看该作者
7#
 楼主| 发表于 2011-2-15 07:44:02 | 只看该作者
koutx 发表于 2011-2-14 21:23
看你的意思,似乎应是追加查询。
在窗体frmGSdengji设计视图的属性中,在排序依据中填上:     编号 DESC
然 ...

我之复制子窗体的记录,只是为了提高输入效率,因为同一个管理卡号的记录有可能大同小异。当子窗体里选中的记录复制到主窗体后,然后我再进行相关数据的修改。可是我复制的记录,总是第一条,而不是选中的记录,这一点,我不知代码上如何修改。

用你的代码,我运行了来,也不行。
8#
发表于 2011-2-15 09:50:33 | 只看该作者
简 发表于 2011-2-14 19:57
不是这样的,我把附件传上来了,麻烦你看看。

当子窗体处于新记录状态时,我希望我双击子窗体指定的记 ...

和复制没什么关系,主子窗体数据源是一个表,只是主子窗体同步的问题。
我以为大体应该如下:


本帖子中包含更多资源

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

x
9#
发表于 2011-2-15 12:05:15 | 只看该作者
简 发表于 2011-2-15 07:44
我之复制子窗体的记录,只是为了提高输入效率,因为同一个管理卡号的记录有可能大同小异。当子窗体里选中 ...

没有问题。不知你怎么试的。附上样例,你自己试试吧。

本帖子中包含更多资源

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

x
10#
发表于 2011-2-15 14:24:39 | 只看该作者
我一般是设置一个非绑定窗体,引用到一个绑定窗体,再加上DoCmd.RunCommand acCmdRecordsGoToLast来处理的。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-9-20 20:23 , Processed in 0.101377 second(s), 34 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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