【问题标题】:ms-access: how to do a proper requery?ms-access:如何进行正确的重新查询?
【发布时间】:2011-04-28 20:42:23
【问题描述】:

我正在分发 ms-access-2007 前端。后端是sql server。用户将单击一个按钮,它将从 sql server 2008 数据库返回一个查询。

如果用户再次单击该按钮,是否可以重新查询此查询?

通常访问的行为是,如果你再次查询它,它会显示旧的结果。如何让它刷新结果?

【问题讨论】:

  • 您应该详细说明:打开查询的按钮背后的代码是什么?您的查询是什么?使用链接表的 Access 查询?直通查询?指向 SQL 视图的链接?

标签: sql sql-server-2008 ms-access vba


【解决方案1】:

如果您知道查询仍然是 ActiveDatasheet,请重新查询:

  Screen.ActiveDatasheet.Requery

如果你不知道(你可以检查 Screen.ActiveDatasheet.Name),你可以再次打开它(如果查询已经打开,它可能会或可能不会重新查询 - 我希望它不会,但我可能是错误的),然后它将是 ActiveDatasheet,您可以重新查询。

或者,你可以这样做:

  DoCmd.SelectObject acQuery, "NameOfYourQuery"
  Screen.ActiveDatasheet.Requery

这些方法中的一种或多种肯定会奏效。

但让我指出,将表和查询用作用户界面对象并不是一个好主意。相反,您应该制作表单以允许用户与其中显示的数据进行交互,因为这样您可以更好地控制它们。

(很多人不知道的一点是,数据表是一个表单对象,所以Screen.ActiveDatasheet的属性和方法与任何表单的属性和方法都是一样的,也就是说你实际上可以给表单上的事件赋值Screen.ActiveDatasheet 对象并让它们触发;但我不建议将其作为构建 UI 的最简单途径...)

【讨论】:

    【解决方案2】:

    如果您的数据位于绑定到 Access 表或链接到 Sql Server 的查询的表单中,则 form.requery 可以解决问题。

    如果你再次查询它,它会显示旧结果

    我不同意你上面的说法。如果您重新打开表单或查询,您始终会获得最新的值。刷新,会将 THOSE RECORDS 更新为最新值,但会忽略新记录。重新查询将完全重新填充表单/记录集。

    【讨论】:

    • 如果您让查询保持打开状态并再次运行查询,它将不会被更新。你必须先 docmd CLOSE
    • @i am a girl:把你​​的查询作为表单的来源,然后重新查询表单。由于您有机会将 SQL Server 作为后端,因此请使用作为 Access“表”链接的 SQL Server 视图以提高性能。
    • 不,我只是在运行一个查询,它不是任何东西的记录源,它只是一个查询,它没有附加到任何东西,无论如何我有答案,就像我说我做了 dncmd CLOSE 并且有效
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多