由于空格,ADODB.Recordset 到 SQL Server 查询失败
Posted
技术标签:
【中文标题】由于空格,ADODB.Recordset 到 SQL Server 查询失败【英文标题】:ADODB.Recordset to SQL Server query fails due to spaces 【发布时间】:2013-08-29 23:17:15 【问题描述】:我有一个用于在 MS Access 中打开 ADODB.Recordset 的 SQL 字符串。当我尝试打开记录集时出现此错误:
错误 -2147217900(无效的 SQL 语句;预期为“DELETE”、“INSERT”、 “程序”、“选择”或 “更新”。)在模块自动电子邮件的发送自动电子邮件过程中
在即时窗口中,我复制正在使用的 SQL 并将其粘贴到 SQL Server Management Studio。 SQL Server 也不喜欢该查询,红色下划线空格...当我手动删除 SQL 中的每个空格并将其添加回来时,查询有效。当我在 Access VBA 过程(对 SQL 字符串)中做同样的事情时,它会起作用。
空格是怎么回事!?您认为这是文件编码问题吗?我应该注意,这个 Access 文件在 TFS 中是源代码控制的,因此源文件是从 TFS 中删除的(如果这很重要的话)。
这是字符串:
SELECT TOP 1 Person.PersonID, Person.TypeID, ToStatusID, FromStatusID
FROM
StatusTracking,
Person
WHERE Person.PersonID = 85432
AND Person.PersonID = StatusTracking.PersonID
ORDER BY ID DESC
【问题讨论】:
你好。这是字符串:SELECT TOP 1 Person.PersonID, Person.TypeID, ToStatusID, FromStatusID FROM StatusTracking, Person WHERE Person.PersonID = 85432 AND Person.PersonID = StatusTracking.PersonID ORDER BY ID DESC 在进行更多调查并使用 Notepad++ 进行一些编码更改后,其中似乎确实存在一些幻像字符。当我将 SQL 从 VBA 编辑器复制到 Notepad++ 并将编码更改为 ANSI 时,会出现一堆  字符,几乎在任何有空格的地方。至于他们是如何到达那里的,我不知道,但我们将对此进行调查。 SELECT TOP 1 Person.PersonID, Person.TypeID, ToStatusID, FromStatusID FROM StatusTracking, Person WHERE Person.PersonID = 85432  AND Person.PersonID = StatusTracking.PersonID ORDER BY ID DESC 【参考方案1】:正如我上面的评论所示,这是一个带有“”字符的编码问题。
在进行更多调查并使用 Notepad++ 进行一些编码更改后,其中似乎确实存在一些幻像字符。当我将 SQL 从 VBA 编辑器复制到 Notepad++ 并将编码更改为 ANSI 时,会出现一堆 Â 字符,几乎在任何有空格的地方。
SELECTÂ TOPÂ 1Â
Person.PersonID
, Person.TypeID
, ToStatusID
, FromStatusIDÂ
FROM StatusTracking, PersonÂ
WHEREÂ 1 = 1
ANDÂ Person.PersonIDÂ =Â 85432 Â
ANDÂ Person.PersonIDÂ =Â StatusTracking.PersonIDÂ
ORDERÂ BYÂ IDÂ DESC
【讨论】:
以上是关于由于空格,ADODB.Recordset 到 SQL Server 查询失败的主要内容,如果未能解决你的问题,请参考以下文章
无法将“ADODB.Recordset”类型的对象转换为“MSDATASRC.DataSource”类型
如何从此 ADODB.Recordset 中获取插入 ID?
VB怎么将ADODB.Recordset取的表付到本地变量里