用VC訪問資料庫中的大物件

2021-04-13 04:57:06 字數 2767 閱讀 2934

在用visual c++編寫應用程式時,常會遇到如何訪問資料庫中大物件的問題。大物件文件以二進位制資料形式儲存在blob型別的字段中,這些大物件可能是word、execl或檔案等,目前多數資料庫都支援blob型別的字段。 

vc訪問這些大物件資料有眾多方法,如ole、activex等,事實上vc的mfc提供了乙個很方便的實現方法,即利用mfc提供的clongbinary類可以方便地實現訪問blob欄位。下面筆者將舉例說明。 

首先用以下sql語句建乙個含blob欄位的資料表: 

create table reporttable(registernum char(12) not null,report blob(5m),primary key(registernum)); 

建完該錶後,配置好odbc資料來源,設定資料來源名為abcdb。 

接著在resources的dailog資源中新建乙個formview,開啟該formview,啟用classwizard,建立乙個新類,設定類名叫creportrecordset,base class選crecordset,然後選abcdb為資料來源,再選擇表reporttable,啟動classwizrd,並建立新類creportformview,base class為crecordview,選recordset時,選creportrecordset。 

開啟reportrecordset.h,找到該行:cstring m_report; 改為clongbinary m_report;這樣程式就知道m_report是和blob欄位交換資料。同樣,我們還需要修改另外幾處,開啟reportrecordset.cpp後,刪除m_report = _t("");一句。再找到rfx_text(pfx, _t("[report]"), m_report);一句,將其改為rfx_longbinary(pfx, _t("[report]"), m_report); odbc方法訪問資料庫時使用rfx_longbinary;dao方法則用dfx_longbinary。 

再次開啟formview,新增乙個edit控制項,並用classwizard將它和member variable m_pset-〉m_ registernum關聯,然後在formview上增加三個按鍵,caption名分別叫「取得word文件」、「更新word文件」、「新增word文件」。並分別為這三個按鍵建立各自的function,然後我們為這三個按鍵增加相應的**。在按鍵「取得word文件」的function中加入如下**: 

try //該程式的所在當前目錄是e:qcabc 

; hfind=findfirstfile("e:qcabctyj.doc",&&finddata); 

// findfirstfile是windows api 函式 

if(hfind = = invalid_handle_value) 

afxmessagebox("不存在臨時檔案"); 

else 

cstring strfilename="e:qcabctyj.doc"; 

cfile outfile(strfilename,cfile::modecreate|cfile::modewrite); 

//modecreate指示建構函式建立乙個新檔案 

//下面這段把已經在記憶體中的blob欄位資料內容寫到臨時生成的檔案tyj.doc中 

lpstr buffer = (lpstr)globallock(m_pset-〉m_report.m_hdata); 

outfile.writehuge(buffer,m_pset-〉m_report.m_dwdatalength); 

globalunlock(m_pset-〉m_report.m_hdata); 

outfile.close(); 

shellexecute(null,null,_t("tyj.doc"),null,_t("e:qcabc"),null); 

//下面執行外部程式,word會自動啟動並開啟tyj.doc}} 

catch(cexception?pe) 

在按鍵「更新word文件」的function中加入以下程式**: 

m_pset-〉edit(); // 宣告編輯當前記錄 

updatedata(true); 

cfile fileword; 

cfilestatus filestatus; 

cstring filelocate; 

static char based_code szfilter = "word files (?.doc)|?.doc||"; 

// 下面將彈出典型的開啟檔案對話方塊,您可以選擇任何目錄下的?.doc檔案 

cfiledialog dlg(true,null,null,0,szfilter,this); 

if(dlg.domodal()= =idok) 

filelocate=dlg.getpathname(); 

else 

filelocate=""; 

if(filelocate= ="") 

afxmessagebox("您沒選檔案"); 

else

上述**只要稍做修改,即可把execl等各類檔案存入資料庫中。對應按鍵「新增word文件」只需要複製「更新word文件」中的**,並把m_pset-〉edit();換成m_pset-〉addnew();即可。完成上述步驟後,開啟abc.cpp,把runtime_class(cabcview));這句換成runtime_class(creportformview)); 這樣程式啟動時就顯示了該formview。 

以上所有**均在ibm udb6、visual c++ 6.0、windows 98環境下編譯通過。 

用vc如何訪問ACCESS資料庫?

在現代軟體開發中,資料庫技術被越來越廣泛應用,很多專案都存在著大量的資料需要儲存,通常都會採用資料庫來儲存這些資料。最初,資料庫廠商推出乙個新的資料庫產品時,相應的,他會為程式設計師提供一套訪問該資料庫的介面,即api。不同的資料庫廠商提供的訪問介面是不一樣的,這樣在使用乙個新的資料庫時,就要學習一...

VC遠端訪問資料庫

下面就是資料庫操作 connectionptr pconn recordsetptr prs cstring strsql pconn.createinstance uuidof connection pconn cursorlocation aduseclient strsql provider ...

vc訪問ACCESS資料庫

在現代軟體開發中,資料庫技術被越來越廣泛應用,很多專案都存在著大量的資料需要儲存,通常都會採用資料庫來儲存這些資料。最初,資料庫廠商推出乙個新的資料庫產品時,相應的,他會為程式設計師提供一套訪問該資料庫的介面,即api。不同的資料庫廠商提供的訪問介面是不一樣的,這樣在使用乙個新的資料庫時,就要學習一...