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语句查询到的一个值赋给变量?

从 Access 2007 VBA 代码创建 .xlsx 文件时强制用户使用 Excel 版本

访问 2007 vba 空

access2013 VBA中怎样运行sql语句