Ms access MS Access取消执行直通查询键盘快捷键

Ms access MS Access取消执行直通查询键盘快捷键,ms-access,odbc,passthru,Ms Access,Odbc,Passthru,在MS Access中使用SQL传递查询时,默认超时时间为60秒,此时将向远程服务器发送指令以取消请求。是否有类似于访问自己的“Ctrl+Break”操作的键盘发送此命令?首先,了解Control-C如何取消执行。他们可能捕获了那个键序列,并做了一些特殊的事情。我强烈怀疑oracle的客户端应用程序(SQL*Plus等)正在幕后调用OCIBreak(),并将句柄传递给服务器,该句柄是他们在使用以前的OCI调用执行查询时获得的 我还怀疑Access在60秒后没有做任何积极的事情;这只是它在执行查询

在MS Access中使用SQL传递查询时,默认超时时间为60秒,此时将向远程服务器发送指令以取消请求。是否有类似于访问自己的“Ctrl+Break”操作的键盘发送此命令?

首先,了解Control-C如何取消执行。他们可能捕获了那个键序列,并做了一些特殊的事情。我强烈怀疑oracle的客户端应用程序(SQL*Plus等)正在幕后调用OCIBreak(),并将句柄传递给服务器,该句柄是他们在使用以前的OCI调用执行查询时获得的

我还怀疑Access在60秒后没有做任何积极的事情;这只是它在执行查询时请求的超时。更重要的是,我开始怀疑Access是否请求超时;我读到的所有东西都说ODBC驱动程序不支持查询超时,这让我觉得这只是客户端超时,但我离题了

所以-回到这个OCIBreak()调用。坏消息是:我不认为ODBC实现了这些调用。100%肯定的是,您必须查看oracle源代码的ODBC驱动程序,但我读到的所有内容都表明API调用没有公开

作为参考,我一直在谷歌上结合“OBDC”搜索这些搜索词:

---编辑#1---

作为旁注,我真的认为访问只是放弃,当超过传递超时时,不发送任何类型的cancel命令。如果您看一下这篇kb文章,ODBC驱动程序甚至不支持查询超时:

经过一段时间后,Access可能会停止侦听结果。如果您要求oracle提供仍在执行的查询列表,我强烈怀疑您仍然会看到您的查询列表

--编辑#2---

至于实现您自己的“cancel”——它实际上不是一个cancel,更像是一个“保持UI响应,不管查询的状态如何”——这里的关键字是异步的。您需要重写代码以异步执行,这样就不会阻塞UI的消息泵。我开始用谷歌搜索“异步查询访问”,看看会弹出什么。出现了一个这样的结果:

在xtremevbtalk.com上也是一个不错的起点:


实际上,您将要求access在幕后启动代码,而不是启动阻止执行的代码,直到出现超时或返回结果集为止。然后,您将设置一个事件,该事件在进一步发生时触发,例如让用户知道超时发生(超时失败),用结果填充网格(成功),等等。

我已经搜索了一段时间,但仍然没有运气,如果有人甚至可以给出一个明确的“否”,则这无法完成,那就太好了如果你试过“Ctrl+C”?@Ben Yep,试过那个但没有luck@Matt:您的后端是什么/您使用什么驱动程序进行连接?@LynnCrumbling在这种情况下,我使用OracleLynn的ODBC驱动程序,我还认为超时是客户端而不是服务器端,我想确定的是,在默认的60秒后,Access是如何执行查询终止的,或者如果您说Access不主动执行此操作,那么它是否会在初始运行时将某些内容设置为60秒后终止?@mattdonan直通查询属性表的默认ODBC超时为60。@Remou这是我的查询,当我希望从键盘快捷键复制它时,这个60秒超时是如何实际执行传递查询的取消的?@mattdonan我认为无论如何都不支持超时。请参阅更新以回答问题。@LynnCrumbling这是一个有趣的问题,我没有想到在Access运行之后Oracle还会执行查询。我想这会把我的问题转移到“我怎样才能进入,在我选择的时候放弃?”
ORA-01013  (error when a user cancelled an operation, or when an operation times out)
OCIBreak   (OCI function which cancels a pending operation)