首页 > 解决方案 > 如何从主表单以线性方式更新多个子表单记录?

问题描述

我在主窗体中有一个日期文本框,它在子窗体中输出 6 个连续日期(2 周间隔)。作为主窗体AfterInsert()事件的一部分,子窗体填充有这些日期。

Private Sub Form_AfterInsert()
    Dim strSQL As String
    Dim i As Integer
    For i = 2 To 12 Step 2
        strSQL = "INSERT INTO tbl_Date (DateDescriptionID, TestDate) "
        strSQL = strSQL & "SELECT " & Me.tbDescriptionID & ", (DateAdd('ww', " & i & ", #" & Me.tbStartDate & "#));"
        CurrentDb.Execute strSQL, dbFailOnError
    Next i
End Sub

如果用户更改主表单中的日期文本框,我希望子表单日期反映该更改。我尝试UPDATE使用新日期替换现有日期的查询,但在尝试对齐主外键时遇到了麻烦。我只能用空值(null)替换现有日期,但不确定如何用新日期相应地更新现有日期。

Private Sub tbStartDate_AfterUpdate()
    Dim strSQL As String
    strSQL = "UPDATE tbl_Date "
    strSQL = strSQL & "SET [TestDate] = NULL "
    strSQL = strSQL & "WHERE [DateDescriptionID] = " & Me.DescriptionID & ";"
    CurrentDb.Execute strSQL, dbFailOnError
End Sub

用户输入 05/01/2018

Date           Data
05/15/2018     Apple
05/29/2018     Banana
06/12/2018     Orange
06/26/2018     Strawberry
07/10/2018     Pineapple
07/24/2018     Peach

用户将条目更改为 2018 年 6 月 30 日

Date           Data
07/14/2018     Apple
07/28/2018     Banana
08/11/2018     Orange
08/25/2018     Strawberry
09/08/2018     Pineapple
09/22/2018     Peach

标签: sqlms-accessvba

解决方案


我选择 SQL:

我假设一个名为tblData字段ID(PK, Autoincrement) , Data(Text) 和Sort(Long)的表

ID     Data        Sort
1     Apple          3
2     Banana         5
3     Orange         2
4     Strawberry     1
5     Pineapple      4
6     Peach          6

询问:

SELECT Data, DateAdd("ww", 2 * Sort, Forms!ParentForm!txtDate) as ComputedDate FROM tblData Order By Sort;

将此用作子表单的记录源。如果txtDate存储在表中,您可以加入或查找。仅存储一个始终保持最新的日期。


推荐阅读