由于空格,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?

Excel 单元格到 ADODB.Recordset

VB怎么将ADODB.Recordset取的表付到本地变量里

错误类型:ADODB.Recordset (0x800A0E79) 对象打开时不允许操作

VB6 ADODB.Recordset RecordCount 属性总是返回 -1