数据库异步操作(ADODB)

雨刷方向盘

雨刷方向盘

2016-01-29 11:50

数据库异步操作(ADODB),数据库异步操作(ADODB)

       在VC或VB中需要耗时的查询时,  客户一般需要等待很长一段时间, 这种情况客户是无法容忍而且也无法取消, 那么怎样么办呢. 

         1.首先采用多线程的方式, 工作线程与UI线程分开, 工作线程处理完毕时向主线程发消处理完毕的消息;另一种方法采用向窗口发送消息. 注意这里是寄送的方式,不要问我为什么, 我也不会告诉你.简而言之,            

        PostThreadMessae与PostMessage两个API函数,当然你得传递参数或者使用全局变量也可以.

         2.SQL语句的执行.大家知道(也许你还有可能没有使用过, 那赶紧用吧,免得你的客户骂你),在ADODB的三个对象中Connection, Recordset, Command都支持异步的方式(别告诉我你不晓得, 反正我也不会告诉你的),在其参数

       Options中使用adAsyncExecute ( 0x10) , 这样你执行命查询或返回记录集时都是以异步方式,换句话说就是盖子帮你另外开了个线程处理。

       注意:通常创建一个线程要等待其结束,因为我们有可能要实现等待用户取消执行,所以。。。。。,另外可以通过判断对象的状态是:Connection的状态是否为adStateOpen(当然是你正确连接到数据源,否则我就要打你 PP), 知道如何做了吧;另外一种就通过事件通知, ExecuteComplete(看MSDN去), 要实现客户端通知(得懂COM知道,具体的也看书去吧或者我下次有空再写出来)。

       哈哈, 这样就实现了异步执行查询了哈, 不要告诉我你发现了新大陆或者说你知道的再者我说错的敬请赐教。

一段示例:

_ConnecctionPtr pCon;

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/cyuyanjiaocheng/)

if(FAILED(pCon.CreateInstance("ADODB.CONNECTION"))) return FALSE;

pCon-Open("Provider=SQLOLEDB;UID=SA;PWD=;", "", "", adOpenUnspecified /*这里用adAsyncExecute也可以实现异步方式,对应的事件是ConnectionComplete);

      while(TRUE)

 {

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/cyuyanjiaocheng/)

      if(bCancel)

     {

           pCon-Cancel(); //一定要执行,否则出现异常不关我的事情,因为你拿了人家的东西迟早要还的。

           return FALSE;

    }

    if(pCon-adState == adStateOpen) break;  // 处理完了哈,该退出了。

     Sleep(0);  //一定要执行这条语句,否则盖子的工作效率低哈,为啥子要使用0去看MSDN。

 

}

展开更多 50%)
分享

猜你喜欢

数据库异步操作(ADODB)

C语言教程 C语言函数
数据库异步操作(ADODB)

如何操作Access数据库

编程语言 网络编程
如何操作Access数据库

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

SQL数据库操作类

编程语言 网络编程
SQL数据库操作类

.Net中操作MySql数据库

编程语言 网络编程
.Net中操作MySql数据库

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

DELPHI中操作ACCESS数据库

编程语言 网络编程
DELPHI中操作ACCESS数据库

Hibernate通用数据库操作代码

Web开发
Hibernate通用数据库操作代码

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

如何让一个打开的文档成为活动文档

如何让一个打开的文档成为活动文档

HTML组件(HTML COMPONENTS)之三

HTML组件(HTML COMPONENTS)之三
下拉加载更多内容 ↓