【问题标题】:Access VBA getting DateDiff results to work with Update SQL statement访问 VBA 获取 DateDiff 结果以使用更新 SQL 语句
【发布时间】:2015-05-08 11:46:29
【问题描述】:

我正在使用 Access 2007 本身,没有连接到 SQLserver 或此过程的任何东西。

我想获取几个DateDiff 函数的结果并使用更新SQL 语句将它们放入表的字段中。我的表的字段是数字字段,我的印象是DateDiff返回一个数字。

我尝试了这个,但我在第一个 DateDiff (Pause1) 上收到 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.

【问题讨论】:

  • 当您说 tsPause1 ortsResume1 时,您认为/打算指的是什么?表格上的字段、表单上的控件或其他可能的东西?
  • 表中包含日期时间值的字段。抱歉,谢谢您的提问。
  • 没问题,只是想澄清一下。根据我认为您正在尝试做的事情,我发布了我认为下面的答案。

标签: ms-access vba datediff


【解决方案1】:

根据您的评论,我假设这些字段记录在您的表单当前正在“查看”的记录中。如果是这样,您可以将它们称为 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)

【讨论】:

  • 我希望它对所有由相同 [L#] 值相关的许多记录执行此操作。所以他们不会出现在表格上。我想我可以把它放在其他地方并让它为每条记录工作,所以这是一个很大的帮助,但是如果我的DateDiff 需要的所有字段都不在表单上,​​我该怎么做?有点像循环,但仅通过与 [L#] 值相关的记录。谢谢!
  • 要做到这一点,您需要熟悉记录集。我建议您阅读此链接,Allen Browne 的网站非常适合访问所有内容。 allenbrowne.com/ser-29.html
  • 艾伦布朗是我的精神动物。我还没有完全掌握记录集,但我会继续努力。谢谢!
猜你喜欢
  • 1970-01-01
  • 2015-07-26
  • 2021-09-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多