【问题标题】:Access (OleDb) Parameter Prompt Order访问 (OleDb) 参数提示顺序
【发布时间】:2014-03-29 21:14:07
【问题描述】:

我知道在使用 Access(或一般的 OleDb)时,以正确的顺序提供参数很重要,即使您命名它们也是如此,因为无论名称如何,它们总是按它们的顺序拾取。

但是在这个查询中:

SELECT Comments.ID, Users.Nom, CommentsHelpfulness.Helpful FROM (Comments INNER JOIN Users ON Comments.UserID = Users.ID) LEFT JOIN CommentsHelpfulness ON (CommentsHelpfulness.CommentID = Comments.ID AND (CommentsHelpfulness.UserID = [enter userid])) WHERE (Comments.GameID = [enter gameid])

为什么 Access 在提示我输入用户 ID 之前提示我输入游戏 ID?原来在我的asp.net网站中使用这个,我还必须先添加gameid。

实际上是如何确定顺序的,我必须在其中添加参数?我以为它只是从左到右。 (我不想知道如何更改顺序,我真的只是对它是如何确定的感兴趣)

【问题讨论】:

  • 如果您将 userid 的参数移动到 WHERE,您会从左到右,但这里的情况好坏参半。控制顺序,看这篇文章:blogannath.blogspot.com/2010/02/…(搜索字符串'一般来说,顺序在')
  • 控制顺序是有帮助的,但是如果你不人为地改变它,我还是想知道是什么决定了顺序。您的链接显示“提示用户输入查询参数的顺序与查询中从头到尾遇到参数的顺序相同”,但此处并非如此。 WHERE 中的参数是否总是在 JOIN 条件中的参数之前?还是跟括号有关系?
  • 我不知道有关订单的事实,但知道它可以根据是否使用子查询而改变(在 main 之前询问 subs);因此似乎有道理,它会在加入之前提示输入“Where”参数。

标签: sql ms-access oledb jet


【解决方案1】:

OleDB 确实忽略了参数names,并要求必须按照它们在 SQL 命令文本中出现的确切顺序声明参数。但是,当您从 Access 应用程序本身运行保存的参数查询时,您使用 OleDb;您正在(隐式)使用 DAO 并且 DAO 确实注意参数名称。

因此,Access 提示您输入参数的顺序完全取决于您或您的用户的偏好。如果您想定义提示出现的特定顺序,您可以使用这样的 PARAMETERS 子句:

PARAMETERS MinAccounts Long, SelectedPosition Text ( 255 );
SELECT Agents.*
FROM Agents
WHERE (((Agents.Position)=[SelectedPosition]) 
    AND ((Agents.[Number of Accounts])>=[MinAccounts]));

【讨论】:

  • 感谢您的帮助。然而,我真正感兴趣的是如何实际确定订单,当你不使用例如人为地改变它时。 PARAMETERS 命令。
猜你喜欢
  • 1970-01-01
  • 2016-10-08
  • 1970-01-01
  • 2014-03-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-20
  • 2015-10-05
相关资源
最近更新 更多