ODAC中异步查询(非阻塞执行)
TOraQuery 、TOraSQL、TOraStoredProc中都有NonBlocking属性,可以通过设置NonBlocking属性实现异步查询或异步执行存储过程
常用函数或事件
启用或关闭异步执行
property NonBlocking: boolean; //将NonBlocking属性设置为True,将通过单独的线程执行SQL语句并获取结果。
判断执行状态
function Executing: boolean; //检查是否仍在执行SQL语句。 //返回True,仍在执行SQL语句。 function Fetching: boolean; //检查是否仍在获取行。 //返回True,仍在获取数据行。
中断查询或执行
procedure BreakExec; virtual; //调用BreakExec方法来中断服务器上SQL语句的执行。 //BreakExec不能中断PL / SQL块的执行; //调用BreakExec中断TOraDataSet中打开数据集的操作。如果已开始获取行,则可能无效(当BreakExec介于两次获取行操作之间时会发生这种情况)。
鼠标状态
property ChangeCursor: boolean; //设置为True时,将允许数据访问组件在执行时更改屏幕光标。 默认值是true //将ChangeCursor属性设置为False,以防止在非阻塞模式下执行命令时屏幕光标改变。
执行状态事件
property BeforeExecute: TBeforeStatementExecuteEvent; //在组件执行对数据库的查询之前发生。 property AfterExecute: TAfterExecuteEvent; //在组件执行对数据库的查询之后发生。 property BeforeFetch: TBeforeFetchEvent; //每当数据集要从服务器获取记录之前都会发生。 property AfterFetch: TAfterFetchEvent;//数据集完成从服务器获取数据后发生。
备注
1.在NonBlocking模式下,从提取线程中调用事件。 因此,在BeforeFetch等事件处理程序的代码中需要使用线程同步机制。
2.TOraStoredProc返回多个数据集时,调用OpenNext方法会再触发一次OnAfterExecute事件,但不会触发OnBeforeExecute事件