資料庫非同步操作 ADODB

2021-04-13 04:57:06 字數 1225 閱讀 9778

在vc或vb中需要耗時的查詢時,  客戶一般需要等待很長一段時間, 這種情況客戶是無法容忍而且也無法取消, 那麼怎樣麼辦呢. 

1.首先採用多執行緒的方式, 工作執行緒與ui執行緒分開, 工作執行緒處理完畢時向主線程發消處理完畢的訊息;另一種方法採用向視窗傳送訊息. 注意這裡是寄送的方式,不要問我為什麼, 我也不會告訴你.簡而言之,            

postthreadmessae與postmessage兩個api函式,當然你得傳遞引數或者使用全域性變數也可以.

2.sql語句的執行.大家知道(也許你還有可能沒有使用過, 那趕緊用吧,免得你的客戶罵你),在adodb的三個物件中connection, recordset, command都支援非同步的方式(別告訴我你不曉得, 反正我也不會告訴你的),在其引數

options中使用adasyncexecute ( 0x10) , 這樣你執行命查詢或返回記錄集時都是以非同步方式,換句話說就是蓋子幫你另外開了個執行緒處理。

注意:通常建立乙個執行緒要等待其結束,因為我們有可能要實現等待使用者取消執行,所以。。。。。,另外可以通過判斷物件的狀態是:connection的狀態是否為adstateopen(當然是你正確連線到資料來源,否則我就要打你 pp), 知道如何做了吧;另外一種就通過事件通知, executecomplete(看msdn去), 要實現客戶端通知(得懂com知道,具體的也看書去吧或者我下次有空再寫出來)。

哈哈, 這樣就實現了非同步執行查詢了哈, 不要告訴我你發現了新大陸或者說你知道的再者我說錯的敬請賜教。

一段示例:

_connecctionptr pcon;

if(failed(pcon.createinstance("adodb.connection"))) return false;

pcon->open("provider=sqloledb;uid=sa;pwd=;", "", "", adopenunspecified /*這裡用adasyncexecute也可以實現非同步方式,對應的事件是connectioncomplete);

while(true)

if(bcancel)

pcon->cancel(); //一定要執行,否則出現異常不關我的事情,因為你拿了人家的東西遲早要還的。

return false;

if(pcon->adstate == adstateopen) break;  // 處理完了哈,該退出了。

sleep(0);  //一定要執行這條語句,否則蓋子的工作效率低哈,為啥子要使用0去看msdn。

ADODB類庫 資料庫管家(二)

adodb中的公共變數不但可以控制結果集的訪問方式不但可以控制結果集的訪問方式,而且還可以自動模擬select指令返回的記錄總數和設定快取目錄。詳情請google一下 例子 設定 adodb fetch mode變數的值為 adodb fetch num 以欄位序號為索引讀取資料,如下 includ...

使用adodb方式連線oracle資料庫

我們自動化指令碼很多時候需要鏈結資料庫進行資料驗證或者資料準備,一般是用adodb.connection物件的open方法獲取資料庫鏈結,open方法的鏈結字串可以有很多種的形式,如 使用odbc oraoledb.oracleoracle,但我們需要只需讀取某個配置檔案中的host port si...

php運用adodb連線不同資料庫

連線oracle資料庫 include adodb adodb.inc.php 包含adodb類庫檔案 conn newadoconnection oci8 conn connect dbserver,dbuser,dbpass 連線postgresql資料庫 include adodb adodb...