【问题标题】:Update SQL MS Access 2010更新 SQL MS Access 2010
【发布时间】:2019-01-01 12:55:18
【问题描述】:

这让我脑筋急转了 4 个小时,

我有一个名为 BreakSked 的表,

我用这个按钮用这个 sql 更新表的中断结束时间:

   strSQL1 = "UPDATE [BreakSked] SET [BreakSked].[EndTime] = " & _
     Me.Text412.Value & " WHERE [BreakSked].AgentName = " & Me.List423.Value _
     & " AND [BreakSked].ShiftStatus = '1'"

    CurrentDB.Execute strSQL1

Text412 保存当前系统时间,List423 包含人名。

我总是得到这个

“运行时错误 3075:查询中的语法错误(缺少运算符) 表达式'03:00:00 am'

有什么帮助吗?

编辑:谢谢,现在我的记录正在更新。但现在它添加了另一条记录,而不是更新手头的记录。我觉得很傻,因为我的程序只有两个按钮,我不知道为什么会这样。

Private Sub Form_Load()
DoCmd.GoToRecord , , acNewRec
End Sub

Private Sub Command536_Click()

strSQL1 = "UPDATE BreakSked SET BreakSked.EndTime = '" & Me.Text412.Value & "',BreakSked.Duration = '" & durationz & "' " & vbCrLf & _
"WHERE (([BreakSked].[AgentID]='" & Me.List423.Value & "'));"
CurrentDb.Execute strSQL1
CurrentDb.Close
MsgBox "OK", vbOKOnly, "Added"

End Sub

Private Sub Command520_Click()

strSql = "INSERT INTO BreakSked (ShiftDate,AgentID,StartTime,Status) VALUES ('" & Me.Text373.Value & "', '" & Me.List423.Value & "', '" & Me.Text373.Value & "','" & Me.Page657.Caption & "')"

CurrentDb.Execute strSql
CurrentDb.Close

MsgBox "OK", vbOKOnly, "Added"


End Sub

【问题讨论】:

  • 将您的日期时间字段用“#”日期运算符括起来,并将您的文本用双引号括起来

标签: sql ms-access vba ms-access-2010


【解决方案1】:

如果您使用参数查询,则无需分隔日期/时间和文本值。

Dim strUpdate As String
Dim db As DAO.Database
Dim qdf As DAO.QueryDef

strUpdate = "PARAMETERS pEndTime DateTime, pAgentName Text ( 255 );" & vbCrLf & _
    "UPDATE BreakSked AS b SET b.EndTime = [pEndTime]" & vbCrLf & _
    "WHERE b.AgentName = [pAgentName] AND b.ShiftStatus = '1';"
Debug.Print strUpdate ' <- inspect this in Immediate window ...
                      '    Ctrl+g will take you there 

Set db = CurrentDb
Set qdf = db.CreateQueryDef("", strUpdate)
qdf.Parameters("pEndTime").Value = Me.Text412.Value
qdf.Parameters("pAgentName").Value = Me.List423.Value
qdf.Execute dbFailOnError

如果您总是想将当前系统时间放入EndTime,您可以使用Time() 函数而不是从文本框中提取它。

'qdf.Parameters("pEndTime").Value = Me.Text412.Value
qdf.Parameters("pEndTime").Value = Time()  ' or Now() if you want date and time

但是,如果是这种情况,您可以将函数名称硬编码到 SQL 中并省去一个参数。

"UPDATE BreakSked AS b SET b.EndTime = Time()" & vbCrLf & _

【讨论】:

  • 然后您可以保存参数化查询,而不必在 VBA 中对其进行硬编码。类似set qdf = db.queryDefs("qAddBreakEndTime")
  • 感谢它现在更新。但是现在我得到了我的插入 SQL 添加另一条记录而不是更新它的位置
【解决方案2】:

正如我在评论中所说,您需要将日期字段包含在“#”中,并将字符串字段包含在转义的双引号中

strSQL1 = "UPDATE [BreakSked] SET [BreakSked].[EndTime] = #" & _  
Me.Text412.Value & "# WHERE [BreakSked].AgentName = """ & Me.List423.Value & _
""" AND [BreakSked].ShiftStatus = '1'"

【讨论】:

  • 感谢它现在更新。但是现在我得到了我的插入 SQL 添加另一条记录而不是更新它的位置
  • 您将表单作为新记录打开 - 这意味着您刚刚插入了一条新记录。您需要标记答案并开始一个新问题,而不仅仅是继续向当前问题添加编码问题
  • 我明白了,谢谢。那我再开一个。感谢帮助
  • 前路漫长而曲折——但我知道你会喜欢编码
猜你喜欢
  • 2011-04-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-04
  • 1970-01-01
  • 2013-10-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多