【发布时间】:2018-10-29 12:51:59
【问题描述】:
我有根据用户输入构建 Table1 的删除和附加函数。因此,Table1 为每个用户附加了不同数量的记录。
我的 SQL 代码用于查找日期,但它只执行一次,我需要循环 SQL 代码以获得表的长度。我不擅长编码,我尝试了一个 while 语句,不确定我是否可以在标准中使用变量 Z,但我希望它运行直到填充了具有最小 ID 值的记录中的到期日期。
这是我尝试过的:
Private Sub Command7_Click()
Y = DMax("ID", "Table1", BuildCriteria("Due_date", dbDate, "Null"))
A = DMin("ID", "Table1", BuildCriteria("Due_date", dbDate, "Not Null"))
X = DMin("ID", "Table1")
Z = DLookup("Due_date", "Table1", BuildCriteria("ID", dbLong, CStr(X)))
B = DLookup("Duration", "Table1", BuildCriteria("ID", dbLong, CStr(Y)))
C = DLookup("Due_date", "Table1", BuildCriteria("ID", dbLong, CStr(A)))
E = DateAdd("d", -B, C)
Dim SQL As String
SQL = "UPDATE Table1 " & _
"SET " & BuildCriteria("Due_date", dbDate, CStr(E)) & " " & _
"WHERE " & BuildCriteria("ID", dbLong, CStr(Y))
While Z Is Null
DoCmd.RunSQL SQL
End While
End Sub
举例说明:
目标是单击一次,整个表格就会填满
【问题讨论】:
-
请显示当前数据的样本和期望的结果。另外,我们需要查看
BuildCriteria。总之,这有助于设置minimal reproducible example。 -
我不太明白 BuildCriteria 是做什么的,但这是我在上面粘贴的整个代码,没有其他可真正显示的内容。
-
我的 Table1 的行数是可变的,这就是为什么有变量来识别最后一行,它之前的行,然后它从最后一行中减去上一行的持续时间并粘贴它在前一行。但是,单击一个按钮只执行一次,我需要它为表中的每条记录执行此操作,而无需单击按钮 20 次以上来完成它。
-
请edit您的帖子并显示原始数据(几行)和您想要的输出(几行)。很难用文字看出你的意思。有趣的是,在我这些年来,我从未听说过或使用过 MS Access 的
BuildCriteria()方法。每天学习新东西! -
已编辑 - 谢谢!