【问题标题】:Microsoft Access ADP UPDATE Query does NOT updateMicrosoft Access ADP 更新查询不更新
【发布时间】:2009-10-10 02:58:12
【问题描述】:

我有一个(非常简单和标准的)UPDATE 语句,它可以直接在 Query Analyser 中正常工作,也可以作为 Query Analyser 中的存储过程执行。

UPDATE A
SET 
      A.field1 = B.col1
    , A.field2 = B.col2
FROM
       tblA AS A INNER JOIN tblB AS B 
ON A.pk1 = B.pk1 AND A.pk2 = B.pk2

问题是当我通过 microsoft ADP 执行相同的存储过程时(通过双击存储过程名称或使用运行选项),它说“查询运行成功但没有返回记录”并且不更新记录我直接检查表格。

在有人说“MS-Access 的语法不同于 SQLServer T-SQL”之前,请记住,使用 ADP,一切都发生在服务器上,并且实际上是通过 T-SQL 传递。

任何 ADP 大师有什么好主意吗?

【问题讨论】:

    标签: tsql ms-access adp


    【解决方案1】:

    明白了。为了其他人的利益而回答我自己的问题。

    工具/选项/高级/客户端-服务器设置/默认最大记录设置为 10,000(大概这是默认设置)。将此更改为 0 表示无限制。

    我的表有 100,000 多行,而且它正在更新的任何 10,000 行都很难找到(在 90,000 多行未更新的行中)。因此,更新没有按预期完全运行。

    【讨论】:

      【解决方案2】:

      尝试使用 SQL 分析器查看查询是否在 SQL Server 上执行。
      另外,我认为您可能需要关闭链接表并重新打开它以查看更新的记录。

      这行得通吗?

      【讨论】:

      • 要查看更新的记录,我直接在 SQL Server 中检查表,而不是链接的表。稍后将尝试 Profiler,因为我以前从未使用过它,需要一些时间来弄清楚。
      【解决方案3】:

      在运行 SQL PROfiler 的情况下运行查询。在开始跟踪之前添加所有错误事件。这将为您提供 SQL Server 生成的任何错误,即 Access ADP 可能无法正确显示(或根本无法显示)。

      请随时在此处发布。

      【讨论】:

      • 我在打开所有错误和警告的情况下运行 Profiler。除了指示查询确实运行的一系列语句(SP:Starting、SQL:StmtStarting、SQL:StmtCompleted、SP:Completed)和一些持续时间之外,似乎没有什么是错误的!至少我可以验证查询是否命中了正确的服务器!
      • 好的,这是朝着正确方向迈出的一步。这告诉我们我们正在访问 SQL Server,并且存储过程正在正常运行(至少就 SQL Server 所知而言)。但是后来 Access 数据库由于某种原因回滚了事务。自从我从事访问以来已经有很长时间了。有没有办法将一些调试代码放入调用 SQL 过程的程序中,看看你是否看不到沿线某处是否有东西在排列?
      【解决方案4】:

      作为参考,这是我写的一篇关于更新查询的论文,讨论了与失败时相关的一些问题。

      http://www.fmsinc.com/microsoftaccess/query/snytax/update-query.html

      【讨论】:

        【解决方案5】:

        我似乎记得我总是收到“没有返回任何行”消息,并且不得不简单地关闭消息传递。这是因为它没有返回任何行!

        至于其他 - 有时存在主键问题。正在更新的表在 SQLServer 中是否有主键?如果是这样,请检查 Access 中的表视图 - 有时该链接无法通过。已经有一段时间了,所以我可能是错的,但我认为您可能需要在访问时查看表的设计视图并在那里添加主键。

        编辑:额外的想法: 在您的调试中,尝试输入打印语句以查看输入的值是什么。当您从访问执行时,它实际上是否按照您的预期从表中获取数据?

        【讨论】:

        • 自动编号不是问题。 PK 想法是个好想法,但不适用于 ADP 查询。
        • 我认为你是对的 - 这不是自动编号。但我清楚地记得主键可能是一个问题。虽然简单地执行存储过程无关紧要,但我想知道从访问环境执行它是否仍然存在主键问题。如果是我,我会检查一下,以确保在寻找可能是一个不起眼的错误之前。
        • 我忽略了“没有返回记录”的消息,我知道它毕竟是一个更新查询,如果它说“没有行受到影响”,我会更加注意。我的示例暗示我正在加入主键 pk1、pk2。不,它们不是自动编号/身份列。
        • 当您在 Access 中查看表格时,您是否验证过它们被标记为主键?
        • 关于您上面的编辑,没有输入,没有打印语句要处理。我在 SQL Server 中定义了一个存储过程,通过访问 ADP 客户端查看它,然后双击它(或选择并选择运行选项)。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-06-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-09-02
        • 1970-01-01
        相关资源
        最近更新 更多