具有“返回记录:否”的MS Access传递查询截断ODBC Connect Str

时间:2016-05-04 12:14:36

标签: sql sql-server ms-access stored-procedures odbc

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

(parens中的已清理字符串,实际字符串中没有使用parens)

ODBC Connect Str:     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内置了256个字符的硬限制,但我的肯定是<100!

1 个答案:

答案 0 :(得分:1)

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

要使用上述内容,我们可以在代码中找到:

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

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

CurrentDb.QueryDefs("qryPass").Execute

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

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