Access VBA 无法使用字符串和变量连接更新表字段

问题描述 投票:0回答:1

我正在尝试使用字符串(文本)和表单中的变量输入的组合来更新表中的字段。 我可以用简单的文本更新该字段。 我可以输出带有文本和变量名称的消息框。 但是当我尝试将其放入 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,这就是我想要更新表字段的内容}

我尝试了各种方法,包括单引号、双引号、一个&、两个&,但似乎都不起作用。 我在网上搜索过,找不到任何涉及此问题的内容。

vba ms-access sql-update
1个回答
0
投票

考虑使用 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
© www.soinside.com 2019 - 2024. All rights reserved.