访问 VBA 获取 DateDiff 结果以使用 Update SQL 语句
Access VBA getting DateDiff results to work with Update SQL statement
我正在单独使用 Access 2007,没有连接到 SQL服务器或用于此过程的任何东西。
我想获取几个 DateDiff
函数的结果并使用更新 SQL 语句将它们放入 table 的字段中。我的 table 字段是数字字段,我的印象是 DateDiff
returns 一个数字。
我尝试了这个,但我在第一个 DateDiff
(暂停 1)时收到 data type mismatch
错误。我尝试从字段中删除引号,但随后出现不同的错误 (can't find the field '|' referred to in your expression
)。
这是我的代码。它真正从评论 TIME REPORTING CODE HERE
:
开始
Private Sub StopNextButton_Click()
'
GetID = Forms!frm_MainMenu!AssocIDBox
CurRecord = Forms!frm_EC_L1_L2![L#].Value
'
DoCmd.RunSQL "UPDATE tbl_Data SET tbl_Data.[tsEndAll] = Now WHERE tbl_Data.[L#] = " & CurRecord & " AND (tbl_Data.[ECName] Like 'L1*' OR tbl_Data.[ECName] Like 'L2*') "
'
'TIME REPORTING CODE HERE'
'
Pause1 = DateDiff("s", "[tsPause1]", "[tsResume1]")
Pause2 = DateDiff("s", "[tsPause2]", "[tsResume2]")
ECTime = (DateDiff("s", "[tsECStart]", "[tsUpdated]") - (Pause1 + Pause2))
LTime = DateDiff("s", "[tsStartAll]", "[tsEndAll]")
'
DoCmd.RunSQL "UPDATE tbl_Data SET [ECTime] = " & ECTime & ", [LoanTime] = " & LTime & " WHERE tbl_Data.[L#] = " & CurRecord & " AND (tbl_Data.[ECName] Like 'L1*' OR tbl_Data.[ECName] Like 'L2*') "
'
'END OF TIME REPORTING CODE'
'
DoCmd.GoToRecord , , acNext
'
ETC.
根据您的评论,我假设这些字段已记录在案,您的表格目前 'viewing'。如果是这样,您可以将它们称为 Me.tsPause1 而无需 [] 或引号。很确定你也可以只做 tsPause1 但我发现 Me.tsPause1 使你在做什么更明显。
但是我认为您是在更新当前正在查看的字段,然后立即尝试访问这些更新的字段。我相当确定您需要 Me.Refresh 才能访问这些字段的新值。如果我错了,希望有更具体经验的人会纠正我。我认为这样的东西应该适合你:
Me.Refresh
Pause1 = DateDiff("s", Me.tsPause1, Me.tsResume1)
Pause2 = DateDiff("s", Me.tsPause2, Me.tsResume2)
ECTime = (DateDiff("s", Me.tsECStart, Me.tsUpdated) - (Pause1 + Pause2))
LTime = DateDiff("s", Me.tsStartAll, Me.tsEndAll)
我正在单独使用 Access 2007,没有连接到 SQL服务器或用于此过程的任何东西。
我想获取几个 DateDiff
函数的结果并使用更新 SQL 语句将它们放入 table 的字段中。我的 table 字段是数字字段,我的印象是 DateDiff
returns 一个数字。
我尝试了这个,但我在第一个 DateDiff
(暂停 1)时收到 data type mismatch
错误。我尝试从字段中删除引号,但随后出现不同的错误 (can't find the field '|' referred to in your expression
)。
这是我的代码。它真正从评论 TIME REPORTING CODE HERE
:
Private Sub StopNextButton_Click()
'
GetID = Forms!frm_MainMenu!AssocIDBox
CurRecord = Forms!frm_EC_L1_L2![L#].Value
'
DoCmd.RunSQL "UPDATE tbl_Data SET tbl_Data.[tsEndAll] = Now WHERE tbl_Data.[L#] = " & CurRecord & " AND (tbl_Data.[ECName] Like 'L1*' OR tbl_Data.[ECName] Like 'L2*') "
'
'TIME REPORTING CODE HERE'
'
Pause1 = DateDiff("s", "[tsPause1]", "[tsResume1]")
Pause2 = DateDiff("s", "[tsPause2]", "[tsResume2]")
ECTime = (DateDiff("s", "[tsECStart]", "[tsUpdated]") - (Pause1 + Pause2))
LTime = DateDiff("s", "[tsStartAll]", "[tsEndAll]")
'
DoCmd.RunSQL "UPDATE tbl_Data SET [ECTime] = " & ECTime & ", [LoanTime] = " & LTime & " WHERE tbl_Data.[L#] = " & CurRecord & " AND (tbl_Data.[ECName] Like 'L1*' OR tbl_Data.[ECName] Like 'L2*') "
'
'END OF TIME REPORTING CODE'
'
DoCmd.GoToRecord , , acNext
'
ETC.
根据您的评论,我假设这些字段已记录在案,您的表格目前 'viewing'。如果是这样,您可以将它们称为 Me.tsPause1 而无需 [] 或引号。很确定你也可以只做 tsPause1 但我发现 Me.tsPause1 使你在做什么更明显。
但是我认为您是在更新当前正在查看的字段,然后立即尝试访问这些更新的字段。我相当确定您需要 Me.Refresh 才能访问这些字段的新值。如果我错了,希望有更具体经验的人会纠正我。我认为这样的东西应该适合你:
Me.Refresh
Pause1 = DateDiff("s", Me.tsPause1, Me.tsResume1)
Pause2 = DateDiff("s", Me.tsPause2, Me.tsResume2)
ECTime = (DateDiff("s", Me.tsECStart, Me.tsUpdated) - (Pause1 + Pause2))
LTime = DateDiff("s", Me.tsStartAll, Me.tsEndAll)