SQL语句VBA代码Access 2007结束后发现的字符
Posted
技术标签:
【中文标题】SQL语句VBA代码Access 2007结束后发现的字符【英文标题】:Characters found after end of SQL statement VBA code Access 2007 【发布时间】:2009-12-11 19:14:23 【问题描述】:我正在用 Excel 编写 VBA 代码来访问 Access 数据库。
我正在使用此提供程序
"Provider=Microsoft.ACE.OLEDB.12.0; Data Source= " & DBFile & ";"
这是我的 SQL 字符串
SQlSrc = "SELECT YEAR FROM Data ORDER BY YEAR ASC"
SQlSrc = SQlSrc & ";SELECT STN FROM STN_List WHERE include = TRUE"
当我单独打开每个记录集时,它可以工作(只是第一行或第二行)但是当我像上面那样作为单个语句进行时,我得到一个错误
"SQL 语句结束后找到的字符"
有人知道这是否是 Access 2007 的问题吗?
【问题讨论】:
听起来像是通过只允许执行一条语句来阻止 SQL 注入攻击。 Jet/ACE 从来没有处理过多个 SQL 语句并且永远不会,不是为了避免 SQL 注入(Jet/ACE 容易受到攻击的 SQL 注入类型仍然很多),而是因为没有服务器- 用于序列化 SQL 语句和交错来自多个用户的请求的端进程。 @David W. Fenton:“因为没有服务器端进程来序列化 SQL 语句和交错来自多个用户的请求”——为什么你认为它需要一个。您可以执行此客户端,例如使用带有批处理乐观锁定的 ADODB 记录集,进行更改然后 UpdateBatch。至少 Jet 4.0 已支持此功能。为什么你认为这个模型不应该起作用? 【参考方案1】:您可以重复使用该连接。
Dim cn As Object
Dim rs As Object
cn="Provider=Microsoft.ACE.OLEDB.12.0; Data Source= " & DBFile & ";"
SQlSrc = "SELECT YEAR FROM Data ORDER BY YEAR ASC"
rs.Open SQlSrc, cn
''Do stuff
SQlSrc = "SELECT STN FROM STN_List WHERE include = TRUE"
rs.Open SQlSrc, cn
cn.Execute "UPDATE Table SET Column=2"
【讨论】:
嗯,不完全是。您示例中的第二个调用是将第二个 SQL 查询附加到第一个查询,使我们回到开始的位置。它应该只是一个直接的分配,并且丢失分号。【参考方案2】:看起来 Access 和/或提供程序不接受用于打开单个记录集的多个 SQL 语句。
也就是说,我不确定这是否是所有 OLEDB 提供商的标准,还是仅适用于您正在使用的提供商。
【讨论】:
Access 从来不支持多个语句【参考方案3】:IMO MS Access 不支持在单个命令中使用多个 SELECT 语句。您可能必须将其拆分为单独的命令。
【讨论】:
以上是关于SQL语句VBA代码Access 2007结束后发现的字符的主要内容,如果未能解决你的问题,请参考以下文章
使用 Access 2007 查询向导创建 SQL,仍然无法在 VBA 中运行
从 Access 中的 VBA 调用时 Outlook.exe 进程未结束
在access中用vba如何把SQL语句查询到的一个值赋给变量?