带有“返回记录:否”的 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 中的页面锁定
到 SQL Server 的 MS Access 通用直通查询
MS Access 对 Oracle VIA ODBC 的直通查询