Office中国论坛/Access中国论坛

标题: 求助,想了好久了,请大侠帮帮忙 [打印本页]

作者: bihorse    时间: 2009-1-10 11:51
标题: 求助,想了好久了,请大侠帮帮忙
在入库单主窗口中,如何使入库明细窗口当输录完一条记录后,自动增加一行,然后输完一条后,又会自动增加一行,该如何实现?
另外,把入库明细窗口所输的全部记录,按保存后,保存到入库明细表中又该如何实现?
作者: todaynew    时间: 2009-1-10 11:53
应该不难吧?帮你看看.

你的子窗体为何不与明细表绑定呢?似乎绑定了比较好吧,免得还要加保存记录按钮.

[attach]34424[/attach]

Private Sub Command31_Click()
  Dim sql1, sql2 As String
  DoCmd.SetWarnings no
  If Not (IsNull(Me.单据号)) Then
     sql1 = "INSERT INTO 入库单 ( 单据号, 入库日期, 拨货单据号, 制单人, 审核人, 状态, 备注 ) "
     sql1 = sql1 + "SELECT Forms!入库单!单据号 AS 单据号, Forms!入库单!入库日期 AS 入库日期, Forms!入库单!拨货单据号 AS 拨货单据号, Forms!入库单!制单人 AS 制单人, Forms!入库单!审核人 AS 审核人, Forms!入库单!状态 AS 状态, Forms!入库单!备注 AS 备注;"
     DoCmd.RunSQL sql1
     sql2 = "INSERT INTO 入库明细 ( 单据号, 制单人, 审核人, 状态, 备注 ) "
     sql2 = sql2 + "SELECT Forms!入库单!单据号 AS 单据号, Forms!入库单!制单人 AS 制单人, Forms!入库单!审核人 AS 审核人, Forms!入库单!状态 AS 状态, Forms!入库单!备注 AS 备注;"
     DoCmd.RunSQL sql2
     Me.入库明细.Form.Requery
  End If
End Sub

[ 本帖最后由 todaynew 于 2009-1-10 14:24 编辑 ]
作者: bihorse    时间: 2009-1-10 14:47
标题: 谢谢.我先学习一下.
绑定,是不是会好控制些呀
作者: bihorse    时间: 2009-1-10 14:57
还是不行呢,在入库明细子窗口,输录第二行时,就出现如下提示,
由于数据表"入库单"需要一个相关记录,不能添加或修改记录
作者: todaynew    时间: 2009-1-10 15:04
原帖由 bihorse 于 2009-1-10 14:57 发表
还是不行呢,在入库明细子窗口,输录第二行时,就出现如下提示,
由于数据表"入库单"需要一个相关记录,不能添加或修改记录


这个提示是对的,原因是必须先将主窗体的参数写入入库单表中,然后才能将其写入入库单明细中。否则入库单没有记录,入库单明细是不能增加的。原因就在于入库单与入库单明细为一对多关系。

你可以注意看我上面回复中,sql1和sql2写入表的顺序。

第二行也是要通过添加按钮新增后再补录其他数据,直接在子窗体增加会出错。

[ 本帖最后由 todaynew 于 2009-1-10 15:08 编辑 ]
作者: bihorse    时间: 2009-1-10 15:18
这样的话,那入库明细子窗体,不能连续输录了呀
我想的功能是,主窗口输录后,然后子窗口可以连续增加行输录,等主窗口与子窗口都录好后,然后按保存,直接将主窗口的数据写入,入库单表中,子窗口的数据写入,入库明细有中
作者: Henry D. Sy    时间: 2009-1-10 15:23
可以用代码控制主窗体输入完整

Private Sub Form_Load()
    Me.数量.Locked = True
    Me.金额.Locked = True
    Me.金额合计.Locked = True
End Sub

Private Sub 入库明细_Enter()
    Dim ctl As Control
    For Each ctl In Me.Controls
        If TypeOf ctl Is TextBox Or TypeOf ctl Is ComboBox Then
            If ctl.Locked = False Then
                If IsNull(ctl) Then
                    MsgBox "请输入 " & ctl.Name
                    ctl.SetFocus
                    Exit Sub
                End If
            End If
        End If
    Next
End Sub
作者: todaynew    时间: 2009-1-10 15:24
原帖由 bihorse 于 2009-1-10 15:18 发表
这样的话,那入库明细子窗体,不能连续输录了呀
我想的功能是,主窗口输录后,然后子窗口可以连续增加行输录,等主窗口与子窗口都录好后,然后按保存,直接将主窗口的数据写入,入库单表中,子窗口的数据写入,入库明细有中


可以连续录入。

实际上你的主表与子表设计上不是太合理。比如主表上已经有的制单人、审核人、备注等字段,子表中不应该再有(确实需要可以两表查询即可)。这样的话,子表和主表重复的字段就是一个编号而已(一对多关系)。如此,也就不需要复杂的写代码了,直接用子窗体链接主窗体编号文本框。主表相关字段新增保存后,可以连续的在子表中录入若干行数据。

问题出在表的设计上,和窗体设计、按钮功能设计无太大关系,呵呵。

不知道这种理解是否正确,供参考。

[ 本帖最后由 todaynew 于 2009-1-10 15:28 编辑 ]
作者: bihorse    时间: 2009-1-10 15:27
版主,能否帮我那附件修改一下,然后上传.因为本人是刚学习access的,还不是很明白.谢谢
作者: Henry D. Sy    时间: 2009-1-10 15:31
原帖由 bihorse 于 2009-1-10 15:27 发表
版主,能否帮我那附件修改一下,然后上传.因为本人是刚学习access的,还不是很明白.谢谢

为什么不用绑定的
作者: bihorse    时间: 2009-1-10 15:32
是的.子表中的制单人后面的字段是多余的.主表与子表,就是通过单据号来表示一对多的关系
作者: Henry D. Sy    时间: 2009-1-10 15:32
明细表上,下面这些字段都应该去掉
[attach]34425[/attach]
作者: bihorse    时间: 2009-1-10 15:36
去掉这些字段,然后把入库明细窗体与入库明细表绑定就能实现我的功能吗
作者: bihorse    时间: 2009-1-10 15:37
开入库单,那入库明细窗口中的金额字段是少不了的,该怎么办呢
作者: Henry D. Sy    时间: 2009-1-10 15:42
原帖由 bihorse 于 2009-1-10 15:36 发表
去掉这些字段,然后把入库明细窗体与入库明细表绑定就能实现我的功能吗

主窗体绑定入库表,子窗体绑定明细表
当然可以达到您的要求
作者: Henry D. Sy    时间: 2009-1-10 15:43
原帖由 bihorse 于 2009-1-10 15:37 发表
开入库单,那入库明细窗口中的金额字段是少不了的,该怎么办呢

能通过计算得来的数据不需要保存到表,
本例中金额可以去掉,
作者: bihorse    时间: 2009-1-10 15:44
我已经把子窗口后面的字段删除了.并重新上传了附件.麻烦帮我修改一下.谢谢
我想的功能是,主窗口输录后,然后子窗口可以连续增加行输录,等主窗口与子窗口都录好后,然后按保存,直接将主窗口的数据写入,入库单表中,子窗口的数据写入,入库明细有中
作者: bihorse    时间: 2009-1-10 15:45
我已经把子窗口后面的字段删除了.并重新上传了附件.麻烦帮我修改一下.谢谢
我想的功能是,主窗口输录后,然后子窗口可以连续增加行输录,等主窗口与子窗口都录好后,然后按保存,直接将主窗口的数据写入,入库单表中,子窗口的数据写入,入库明细有中
作者: bihorse    时间: 2009-1-10 15:47
绑定的话,好象进入入库单窗体后,在这个窗口上,数据随便一动,就保存到表中了.
作者: Henry D. Sy    时间: 2009-1-10 15:56
主窗体不绑定,子窗体绑定,这样没有办法连接。
作者: bihorse    时间: 2009-1-10 15:59
那子窗体也不绑定,能否实现?
主窗口输录后,然后子窗口可以连续增加行输录,等主窗口与子窗口都录好后,然后按保存,直接将主窗口的数据写入,入库单表中,子窗口的数据写入,入库明细有中
作者: Henry D. Sy    时间: 2009-1-10 16:03
不绑定就没有新纪录
作者: bihorse    时间: 2009-1-10 16:09
那主窗体与子窗体都绑定后,该如何实现我的功能呢?要按保存动作时,才把数据写入相应的表中
作者: Henry D. Sy    时间: 2009-1-10 16:11
论坛上有个绑定窗体不默认保存的例子
作者: Henry D. Sy    时间: 2009-1-10 16:12
原帖由 Henry D. Sy 于 2009-1-10 16:11 发表
论坛上有个绑定窗体不默认保存的例子
http://www.accessbbs.cn/bbs/thread-9434-1-1.html
作者: bihorse    时间: 2009-1-10 16:13
好的,谢谢!
作者: todaynew    时间: 2009-1-10 17:05
原帖由 bihorse 于 2009-1-10 16:09 发表
那主窗体与子窗体都绑定后,该如何实现我的功能呢?要按保存动作时,才把数据写入相应的表中


主窗体可以不绑定,也可以实现主窗体与子窗体链接。

只是主窗体不绑定的话,保存按钮对主窗体导入主表的数据有效。这样的意义不是很大,因为数据量大的是子表数据。

对数据加一个保存按钮和对数据加一个修改按钮,在实际处理效果上应该差不多。保存功能是事前判断,修改功能是事后判断。




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