Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何修复此代码中的语法错误3134? Private子表单_Close() Dim sSQL,stringSQL作为字符串 将rst设置为DAO.Recordset sSQL=“从tblInventory中选择条形码,[商品名称],其中条形码=”&Me.ID&“ Set rst=CurrentDb.OpenRecordset(sSQL) 如果rst.EOF,则 stringSQL=“插入tblInventory(条形码、[商品名称]、单位、[单价]、[初始库存]、[当前库存]、[退出项目])值(“&Me.ID&“、”&Me.GoodsName&“、”&Me.Unit&“、”&Replace(格式(Me.Price,“0.00”)、“、”、“、”、“&Me.Amount&“、0)” DoCmd.SetWarnings错误 DoCmd.RunSQL[stringSQL] DoCmd.SetWarnings True 其他的 stringSQL=“更新tblInventory集合[当前库存]=[当前库存]+”&Me.Amount&“其中条形码=”&Me.ID&“” DoCmd.SetWarnings错误 DoCmd.RunSQL(stringSQL) DoCmd.SetWarnings True 如果结束 rst.关闭 端接头_Sql_Vba_Ms Access - Fatal编程技术网

如何修复此代码中的语法错误3134? Private子表单_Close() Dim sSQL,stringSQL作为字符串 将rst设置为DAO.Recordset sSQL=“从tblInventory中选择条形码,[商品名称],其中条形码=”&Me.ID&“ Set rst=CurrentDb.OpenRecordset(sSQL) 如果rst.EOF,则 stringSQL=“插入tblInventory(条形码、[商品名称]、单位、[单价]、[初始库存]、[当前库存]、[退出项目])值(“&Me.ID&“、”&Me.GoodsName&“、”&Me.Unit&“、”&Replace(格式(Me.Price,“0.00”)、“、”、“、”、“&Me.Amount&“、0)” DoCmd.SetWarnings错误 DoCmd.RunSQL[stringSQL] DoCmd.SetWarnings True 其他的 stringSQL=“更新tblInventory集合[当前库存]=[当前库存]+”&Me.Amount&“其中条形码=”&Me.ID&“” DoCmd.SetWarnings错误 DoCmd.RunSQL(stringSQL) DoCmd.SetWarnings True 如果结束 rst.关闭 端接头

如何修复此代码中的语法错误3134? Private子表单_Close() Dim sSQL,stringSQL作为字符串 将rst设置为DAO.Recordset sSQL=“从tblInventory中选择条形码,[商品名称],其中条形码=”&Me.ID&“ Set rst=CurrentDb.OpenRecordset(sSQL) 如果rst.EOF,则 stringSQL=“插入tblInventory(条形码、[商品名称]、单位、[单价]、[初始库存]、[当前库存]、[退出项目])值(“&Me.ID&“、”&Me.GoodsName&“、”&Me.Unit&“、”&Replace(格式(Me.Price,“0.00”)、“、”、“、”、“&Me.Amount&“、0)” DoCmd.SetWarnings错误 DoCmd.RunSQL[stringSQL] DoCmd.SetWarnings True 其他的 stringSQL=“更新tblInventory集合[当前库存]=[当前库存]+”&Me.Amount&“其中条形码=”&Me.ID&“” DoCmd.SetWarnings错误 DoCmd.RunSQL(stringSQL) DoCmd.SetWarnings True 如果结束 rst.关闭 端接头,sql,vba,ms-access,Sql,Vba,Ms Access,尝试手动运行带有某些值的SQL 您可能需要使用参数或正确连接变量,例如使用my函数。首先,请注意: Dim sSQL,stringSQL作为字符串 结果将sSQL定义为变体,而不是字符串;这虽然不会导致代码失败(因为变量可以保存任何类型的数据),但内存效率低下 相反,您应该使用: Dim sSQL作为字符串,stringSQL作为字符串 或者,也许更具可读性: Dim sSQL作为字符串 Dim stringSQL作为字符串 其次,当独立于任何其他表达式调用函数时,不应使用任何类型的括号

尝试手动运行带有某些值的SQL


您可能需要使用参数或正确连接变量,例如使用my函数。

首先,请注意:

Dim sSQL,stringSQL作为字符串
结果将
sSQL
定义为变体,而不是字符串;这虽然不会导致代码失败(因为变量可以保存任何类型的数据),但内存效率低下

相反,您应该使用:

Dim sSQL作为字符串,stringSQL作为字符串
或者,也许更具可读性:

Dim sSQL作为字符串
Dim stringSQL作为字符串

其次,当独立于任何其他表达式调用函数时,不应使用任何类型的括号括住参数

在代码的第11行中,您有:

DoCmd.RunSQL[stringSQL]
在线16您有:

DoCmd.RunSQL(stringSQL)
这两项都应更改为:

DoCmd.RunSQL stringSQL
或者,直接提供SQL字符串,例如:

DoCmd.SetWarnings False
DoCmd.RunSQL“更新tblInventory集合[当前库存]=[当前库存]+”&Me.Amount&“其中条形码=”&Me.ID&“”
DoCmd.SetWarnings True

此外,由于您仅使用记录集测试记录是否存在,因此可以将其简化为
DLookup
调用,例如:

DLookup(“条形码”、“tblInventory”、“条形码=表格”[YourForm]!ID”)
并使用
IsNull
测试是否返回
Null

如果为空(DLookup(“条形码”、“tblInventory”、“条形码=表单![YourForm]!ID”)),则
...
其他的
...
如果结束

最后,更好的做法是使用参数化查询代替在SQL语句中串联值

使用参数有两个关键优势:

  • 防止SQL注入
  • 自动处理SQL数据类型

例如,考虑下面的代码:

Private子表单_Close()
如果为空(DLookup(“条形码”、“tblInventory”、“条形码=表单![YourForm]!ID”)),则
使用CurrentDb.CreateQueryDef_
( _
"", _
“插入tblInventory(条形码、[商品名称]、单位、[单价]、[初始库存]、[当前库存]、[退出项目])”&_
值(@id、@goodsname、@unit、@unitprice、@initstock、@stock,0)_
)
.参数(0)=Me.ID
.参数(1)=Me.GoodsName
.参数(2)=Me.单位
.参数(3)=替换(格式(Me.Price,“0.00”),“,”和“)
.参数(4)=我的金额
.参数(5)=我的金额
.执行
以
其他的
使用CurrentDb.CreateQueryDef_
( _
"", _
“更新tblInventory集合[当前库存]=[当前库存]+@金额,其中条形码=@id”_
)
.参数(0)=我的金额
.参数(1)=Me.ID
.执行
以
如果结束
端接头

欢迎来到SO!当你发布一个仅仅是代码的wuestion时,试着解释哪一个是你的问题,从哪里得到的。。。事实上,由于它只是代码,您无法应用代码格式,可读性非常差。不要用值来填充查询字符串。相反,要学会使用参数。这真的很有帮助,我真的很感激你不客气!如果我的答案充分回答了您的问题,请将答案标记为解决方案(如果您觉得合适,请向上投票),以便其他浏览该网站的人可以看到该问题已解决。如果不确定如何执行此操作,请参阅。谢谢