delphi使用ODAC控件异步读取数据

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事件

 

posted @ 2020-08-30 15:20  txgh  阅读(371)  评论(0编辑  收藏  举报