gpt4 book ai didi

sql - 如何通过 ODBC 在 Microsoft Access 数据库中执行具有参数(即参数声明)的预定义查询?

转载 作者:搜寻专家 更新时间:2023-10-30 20:25:22 25 4
gpt4 key购买 nike

我的简单问题如下:

如果我有一个 Microsoft Access 数据库,其中定义了一个“查询”(即 MS Access 调用查询的数据库对象的种类,只是为了避免任何歧义)定义为采用参数(在其 SQL 中使用 PARAMETERS 声明定义)通过 ODBC 连接调用它的正确 SQL 语法是什么,包括提供参数值?

编辑/添加:

我刚刚注意到它可以通过在整个 CALL 命令周围添加大括号来完成,如下所示:

{CALL myAccessQuery ('string1', 'string2', 'string3')}

这实际上正是他们已经在我下面提到的其他相关 SO 线程中所做的,但我只是认为这是一些与他们的准备语句性质相关的特定于 C# 的魔法SQL 语句(在其中使用“?”)或他们的 SQL 库的一些其他特性(我没有使用该语言),所以我之前忽略了它。

任何人如果能解释花括号是什么,以及为什么它们允许执行的 SQL 命令多于下面错误消息中明确说明的受支持命令,都将是这个问题的公认答案。

我的具体案例的更多细节:

我的查询采用三个参数,由查询声明开头的“PARAMETERS”子句定义,如下所示:

PARAMETERS myParam1 Text ( 255 ), myParam2 Text ( 255 ), myParam3 Text ( 255 );
SELECT ... <a bunch of not relevant stuff here> ;

使用(已经建立并确认有效的)ODBC 连接,我想从外部应用程序使用此查询,包括为其提供所需的三个参数。

运行正常的查询,如 SELECT 等,在我的外部应用程序的连接上工作得很好,但无论我用谷歌搜索多少,我似乎都无法找到正确的方法来正确提供参数并运行我的查询?所以,我的问题是,执行此操作的正确 SQL 语法是什么?

注意:我想要针对某些特定库或类似库的任何特定于 API 的解决方案,因为这只能解决极少数希望使用不同编程语言执行此操作的开发人员的问题,因此出于这个原因,我什至不会提出我的外部应用程序是用什么语言编写的。我只想要完整的 SQL 语法来执行此操作,仅此而已。

Another SO question表示这应该使用“CALL”关键字来完成,但是当我尝试从我的应用程序中使用它时,我只收到以下错误消息:

[42000] [Microsoft][ODBC Microsoft Access Driver] Invalid SQL statement; expected 'DELETE', 'INSERT', 'PROCEDURE', 'SELECT', or 'UPDATE'.

即,这是我在收到此错误时尝试执行的“SQL 命令”(有意避免含糊不清的术语“查询”...):

CALL myAccessQuery ('string1', 'string2', 'string3')

错误消息中提到的唯一一个似乎有用的 SQL 关键字是“PROCEDURE”关键字,但我在 Google 上也很难找到与此相关的任何相关文档。 :-(

我怀疑谷歌在整个场景中缺乏结果的主要原因是上下文中或多或少所有中心关键字的许多含糊不清,如“查询”、“参数”、“执行”、“call"和 "procedure",所以对于这个 SO 问题,我希望它能构成一个更容易识别和索引的答案,以便 Google 将来提出这个问题。

最佳答案

当您通过 ODBC 连接时,查看特定于驱动程序的信息以查看它是否支持各种 ODBC 扩展(在 ODBC 调用中由大括号表示):

https://msdn.microsoft.com/en-us/library/ms675326(v=vs.85).aspx

具体来说:

ODBC provides a specific syntax for calling stored procedures. For the CommandText property of a Command object, the CommandText argument to the Execute method on a Connection object, or the Source argument to the Open method on a Recordset object, passes in a string with this syntax:

    "{ [ ? = ] call procedure [ ( ? [, ? [ , … ]] ) ] }"

Each ? references an object in the Parameters collection. The first ? references Parameters(0), the next ? references Parameters(1), and so on. The parameter references are optional and depend on the structure of the stored procedure. If you want to call a stored procedure that defines no parameters, your string would look like the following:

    "{ call procedure }"

Access ODBC 驱动程序将保存的 SELECT 参数查询公开为存储过程,因此这就是您使用此语法的原因。

关于sql - 如何通过 ODBC 在 Microsoft Access 数据库中执行具有参数(即参数声明)的预定义查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37392397/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com