我正在尝试使用字符串(文本)和表单中的变量输入的组合来更新表中的字段。 我可以用简单的文本更新该字段。 我可以输出带有文本和变量名称的消息框。 但是当我尝试将其放入 UPDATE 表达式中时,该字段不会更新。
相关代码如下:
Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim strSql As String
Dim frmYear As Form
Dim ctlYear As Control
strSql = "SELECT * FROM IS_Print_Sales"
Set db = CurrentDb
Set rs = CurrentDb.OpenRecordset(strSql)
Set frmYear = Forms("frmISPrintUpdateYear")
Set ctlYear = frmYear.UpdateYear
db.Execute "UPDATE IS_Print_Sales SET DateCalc = '9/1/2023' WHERE period_name Like '*SEP*'"
db.Execute "UPDATE IS_Print_Sales SET DateCalc = '10/1/'' & ctlYear &' WHERE period_name Like '*OCT*'"
在上述两个 db.Execute 语句中,第一个语句(对于 SEP)起作用并更新字段,但第二个语句(对于 OCT)不执行任何操作。
{如果我把这个MsgBox代码放进去}
MsgBox "10/1/" & ctlYear
{然后我运行表单并将 2023 输入到“UpdateYear”控件中 MsgBox 弹出:10/1/2023,这就是我想要更新表字段的内容}
我尝试了各种方法,包括单引号、双引号、一个&、两个&,但似乎都不起作用。 我在网上搜索过,找不到任何涉及此问题的内容。
考虑使用 DAO.QueryDefs 进行参数化查询并避免单引号和双引号的挑战:
Dim db As DAO.Database, rs As DAO.Recordset, qdef AS DAO.QueryDef
Dim strSql As String
Set db = CurrentDb
Set rs = db.OpenRecordset("SELECT * FROM IS_Print_Sales")
' PREPARE STATEMENT (DEFINES PARAMS AND ADDS THEM AS PLACEHOLDERS)
strSql = "PARAMETERS [paramDateString] TEXT(255), [paramPeriodName] TEXT(255); " _
& "UPDATE IS_Print_Sales " _
& "SET DateCalc = [paramDataString] " _
& "WHERE period_name LIKE [paramPeriodName];"
' INITIALIZE QUERY OBJECT
Set qdef = db.CreateQueryDef("", strSql)
' BIND VALUES TO PARAMS AND RUN ACTION
With qdef
.Parameters("paramDateString") = "9/1/2023"
.Parameters("paramPeriodName") = "*SEP*"
.Execute dbfailOnError
End With
With qdef
.Parameters("paramDateString") = "10/1/'" & Forms!frmISPrintUpdateYear!UpdateYear
.Parameters("paramPeriodName") = "*OCT*"
.Execute dbfailOnError
End With
'...
rs.Close
Set qdef = Nothing: Set rs = Nothing: Set db = Nothing