带有“返回记录:否”的 MS Access 直通查询截断 ODBC 连接字符串

Posted

技术标签:

【中文标题】带有“返回记录:否”的 MS Access 直通查询截断 ODBC 连接字符串【英文标题】:MS Access Pass-Through Query With "Returns Records: No" Truncates ODBC Connect Str 【发布时间】:2016-05-04 12:14:36 【问题描述】:

这是一个非常奇怪的问题,我似乎无法在网络上找到其他有经验的人,但我正在尝试通过 MS Access 2010 通行证运行 SQL Server UPDATE 存储过程(返回 0 条记录) - 通过查询,但是当我设置 Returns Records: No 时,它似乎会截断我的 ODBC 连接字符串并引发错误!

(括号中的已清理字符串,实际字符串中未使用括号)

ODBC 连接字符串: ODBC;DSN=(dsn name);Description=(description);Trusted_Connection=Yes;DATABASE=(example database name)

首先,设置Returns Records: Yes允许查询成功执行(通过SQLServer Mgt Studio确认)但抛出错误:Pass-through query with ReturnsRecords property set to True did not return any records.

然后设置Returns Records: No 抛出错误The Microsoft Access database engine cannot find the input table or query 'ODBC;DSN=(dsn name);Description=(description);Trusted_Connection=Yes;DA'. Make sure it exists and that its name is spelled correctly.

因为它可能很重要,我的 DSN 是 8 个字符长,描述是 8 个字符,数据库是 21 个字符。我认为它们不会过长,并且数据库正在生产中并被多个客户使用,因此此时更改/缩短它们是不可行的。

有其他人经历过这种情况吗?或者其他人可以重现吗?

我听说 MS Access 对 ODBC 连接 str 有 255 个字符的内置硬限制,但我的肯定是

【问题讨论】:

你如何调用传递查询? 当您在设计视图中打开查询(带有“返回记录:否”)时,将正确的 ODBC 字符串放回并保存,是否又被截断了? 请参阅下面我对 Albert 的评论,描述我如何调用查询。执行完查询连接字符串后还是我写的原始版本,看来把相同的字符串粘贴回'over the top'没有什么区别! 【参考方案1】:

我有一个名为qryPass 的已保存查询。设置为返回记录=否。

要使用上面的代码,我们可以去:

With CurrentDb.QueryDefs("qryPass")
  .SQL = "Exec myStoreProc"
  .Execute
End With

在上面我当然提供了 pass-through sql,但是如果你不需要动态提供 SQL/t-SQL 那么你可以像这样运行上面保存的 pass-though:

CurrentDb.QueryDefs("qryPass").Execute

由于您没有提供关于如何调用此存储过程的 2-3 行代码,因此我们只能猜测您的问题。但是请尝试上述方法。

另外,在代码中运行查询之前,请使用 100% 的 UI,创建 PT 查询并尝试运行它(返回记录 = 否)。

【讨论】:

假设我的一个存储过程在 SQL Server 实例中称为qryExampleStoredProcedure。在 MS Access 中,我创建了一个仅包含 exec dbo.qryExampleStoredProcedure 的直通查询(例如称为 qryMSAccessPassThrough),在查询属性中我有上面问题中的 ODBC 连接字符串和 Returns Records: No。我在 VBA 中使用 DoCmd.OpenQuery "qryMSAccessPassThrough" 调用此查询。这是遇到错误消息的时候。您的代码似乎对此没有任何影响! 错误消息表明存储过程正在返回记录(或其他东西)尝试创建 PT 查询,并在里面有 exec dbo.qryExampleStoedProcedure。现在关闭查询并双击它运行它。 (并尝试使用返回记录 = 是,并使用返回记录 = 否)。如此构建+尝试来自 Access(而不是来自 SSMS)的 PT 查询。我确实看到存储过程返回记录时发生错误,但查询集返回记录 = 否。

以上是关于带有“返回记录:否”的 MS Access 直通查询截断 ODBC 连接字符串的主要内容,如果未能解决你的问题,请参考以下文章

MS Access 直通选择查询导致 SQL Server 中的页面锁定

MS Access 取消执行直通查询键盘快捷键

到 SQL Server 的 MS Access 通用直通查询

MS Access 对 Oracle VIA ODBC 的直通查询

如何使 MS Access 直通查询在 SQL Server 中正确运行

MS Access 直通查询 - 使用 ODBC 连接字符串时非常慢,手动选择数据源时速度快 - 问题出在哪里