MS Access 取消执行直通查询键盘快捷键
Posted
技术标签:
【中文标题】MS Access 取消执行直通查询键盘快捷键【英文标题】:MS Access cancel execution of pass-thru query keyboard shortcut 【发布时间】:2012-01-17 15:01:07 【问题描述】:在 MS Access 中使用 SQL pass-thru 查询时,默认超时时间为 60 秒,此时会向远程服务器发送一条指令以取消请求。有没有类似于Access自己的“Ctrl + Break”操作的键盘发送这个命令?
【问题讨论】:
我已经搜索了一段时间仍然没有运气,如果有人甚至可以给出一个明确的不,这是无法做到的,那就太好了 你试过“Ctrl+C”吗? @Ben Yep,试过了,但没有运气 @Matt:你的后端是什么/你用什么驱动来连接? @LynnCrumbling 在这种特殊情况下,我使用 Oracle 的 ODBC 驱动程序 【参考方案1】:首先,了解 Control-C 如何取消执行。他们可能会捕获那个键序列,并做一些特别的事情。我强烈怀疑 oracle 的客户端应用程序(SQL*Plus 等)在幕后调用 OCIBreak(),并将句柄传递给他们在使用先前的 OCI 调用执行查询时获得的服务器。
我还怀疑 Access 在 60 秒后没有主动执行任何操作;这只是它在执行查询时请求的超时。更重要的是,我开始怀疑 Access 是否甚至请求超时。我读过的所有内容都说 ODBC 驱动程序不支持查询超时,这让我认为这只是客户端超时,但我离题了...
所以 - 回到这个 OCIBreak() 调用。坏消息是:我不认为 ODBC 实现了这些调用。为 100% 确定,您必须查看 Oracle 源的 ODBC 驱动程序,但我所阅读的所有内容都表明 API 调用未公开。
作为参考,我一直在结合“OBDC”搜索这些搜索词:
ORA-01013 (error when a user cancelled an operation, or when an operation times out)
OCIBreak (OCI function which cancels a pending operation)
--- 编辑 #1 ---
作为旁注,我真的相信 Access 只是放弃,而不是在超过 Pass-Through 超时时发送任何类型的取消命令。如果您查看这篇 kb 文章,ODBC 驱动程序甚至不支持查询超时:
PRB: Connection Timeout and Query Timeout Not Supported with Microsoft Oracle ODBC Driver and OLE DB Provider
经过一段时间后,Access 可能会停止侦听结果。如果您要向 oracle 询问仍在执行的查询列表,我强烈怀疑您仍然会看到您的列表。
--- 编辑 #2 ---
至于实现您自己的“取消”——这并不是真正的取消,更多的是“无论查询状态如何都保持 UI 响应”——这里的关键字将是异步的。您将需要重写代码以异步执行,这样它就不会阻塞 UI 的消息泵。我会开始搜索“异步查询访问”,看看会弹出什么。出现了一个 SO 结果:
Running asynchronous query in MS Access
以及在 xtremevbtalk.com 上的一个不错的起点:
http://www.xtremevbtalk.com/showthread.php?t=82631
实际上,在发生超时或返回结果集之前,您不会触发阻止执行的代码,而是要求访问权限以启动幕后的代码。然后,您将设置一个事件,当进一步发生某些事情时触发,例如让用户知道发生了超时(超时失败)、使用结果填充网格(成功)等...)
【讨论】:
Lynn,我也认为超时是客户端而不是服务器,我试图确定的是在默认的 60 秒之后,Access 如何执行查询的终止,或者如果你说不主动这样做,是否在初始运行时设置某些东西在 60 秒后杀死? @MattDonnan 传递查询属性表的默认 ODBC 超时时间为 60。 @Remou 这是我的查询,这 60 秒超时如何实际执行传递查询的取消,因为我希望从键盘快捷键复制它? @MattDonnan 我认为无论如何都不支持超时。查看更新以回答。 @LynnCrumbling 这是一个有趣的观点,我没有想到 Oracle 在 Access 失控后仍会执行查询。我想这会将我的问题转移到“我怎样才能让 Access 在我选择的时候放弃?”以上是关于MS Access 取消执行直通查询键盘快捷键的主要内容,如果未能解决你的问题,请参考以下文章
MS Access 直通选择查询导致 SQL Server 中的页面锁定
到 SQL Server 的 MS Access 通用直通查询
MS Access 对 Oracle VIA ODBC 的直通查询
如何使 MS Access 直通查询在 SQL Server 中正确运行