VC下使用ADO操作

2021-05-08 05:19:39 字數 3478 閱讀 8778

使用ado+sql操作各類資料庫是當前的主流,本人結合自己學習和使用ado開發資料庫的親身經歷,給大家一起分享利用ado開發遇到的常見問題和解決方案。本人開發環境為vc6.0,作業系統windowsxp。

運算元據庫,拿最簡單的access來說,不少人使用odbc,本人在學習之初也使用過odbc,但小的程式可以,大的維護起來真是要命阿……odbc要 配置資料來源,而且當表的結構更改時,又要重新給各個字段繫結變數再進行操作,很羅嗦很繁瑣!而ado是基於oledb的封裝,操作的時候省卻了很多不必要 的麻煩,維護起來也很方便。有人說,ado操作語句比較複雜,難記,不錯,但是對於乙個程式設計師來講,複雜難記的語句多得是,而相信各位的智商一定不差,所 以對付這些根本不成難題,我們應該有信心才對。

既然ado那麼好用,那麼學習資料庫的操作,就直接學習ado吧,其他的dao,odbc等等,簡單了解即可。

入門階段,我不建議直接使用一些封裝完善的ado類庫,大家應該都知道,來自argentina的一位大師級人物carlos antollini封裝了乙個很強大的ado集合,利用這個集合對ado進行資料庫操作真是太方便了!可惜,這位大師並沒有在它的例項工程內把封裝好的 ado集合各個函式的功能以**形式編寫出來,而只是在其發表的文章內,羅列了常用的功能**。databinding這個例項,只是簡單地和乙個 datagrid相互連線了而已……

直接通過ado操作access資料庫

ado.cpp引入

然後編譯,這個時候會發現,一開始就出現問題,編譯無法通過……

出現乙個錯誤:

fatal error c1010: unexpected end of file while looking for precompiled header directive

解決方案有2個,

1、如果發生錯誤的檔案是由其他的c**檔案新增進入當前工程而引起的,則alt+f7進入當前工程的 settings,選擇c/c++選項卡,從

category組合框中選中precompiled headers,選擇not using precompiled headers 或者 automatic use of precompiled headers(ms data

control bind sample內就是這樣設定的,請讀者仔細對比)

2、在檔案開頭新增:

#include "stdafx.h"

這裡staafx.h是預編譯標頭檔案,所謂標頭檔案預編譯,就是把乙個工程(project)中使用的一些mfc標準標頭檔案(如windows.h、 afxwin.h)預先編譯,以後該工程編譯時,不再編譯這部分標頭檔案,僅僅使用預編譯的結果。這樣可以加快編譯速度,節省時間。  

預編譯標頭檔案通過編譯stdafx.cpp生成,以工程名命名,由於預編譯的標頭檔案的字尾是「pch」,所以編譯結果檔案是projectname.pch。 

編譯器通過乙個標頭檔案stdafx.h來使用預編譯標頭檔案。stdafx.h這個頭檔名是可以在project的編譯設定裡指定的。編譯器認為,所有在 指令#include   "stdafx.h"前的**都是預編譯的,它跳過#include   "stdafx.   h"指令,使用projectname.pch編譯這條指令之後的所有**。

因此,所有的cpp實現檔案第一條語句都是:#include   "stdafx.h"。   (所以呀,這個預編譯檔案stdafx.h就不要放到.h裡面了)

然後,將原先的debug全部刪除(別心疼!)然後rebuild all,就發現,這個時候,編譯成功!

但某些更高階別的場合,需要用上封裝更完善的v2.20,這個時候,可以引入其包含的4個檔案。

同理,在每個cpp檔案前邊加入 #include "stdafx.h" (也就是解決方案2)

再次編譯,出現錯誤:

fatal error c1083: cannot open type library file: 'msjro.dll': no such file or directory

應該按如下方式進行解決,

將ado2.h 修改引用項為:

will usually be in c://program files//common files//system//ado")

// 使用如下2行

#import "c:/program files/common files/system/ado/msado15.dll" rename("eof", "endoffile")

#import "c:/program files/common files/system/ado/msjro.dll" no_namespace rename("replicatypeenum", "_replicatypeenum")

// 以下2行注釋掉

//#import rename("eof", "endoffile")

//#import no_namespace rename("replicatypeenum", "_replicatypeenum")

using namespace adodb;

#pragma warning (default: 4146)

#include "icrsint.h"

再次編譯,不巧,又出現了錯誤:

cannot open type library file: 'oledb32.dll'

雙擊跳轉至對應的行,

位於oledb2.h

#import no_namespace

依葫蘆畫瓢,將**修改掉:

#pragma warning (disable: 4192)

#include "ado2.h"

#pragma message ("make sure you go to tools.options.directories.library files and add the paths to oledb32.dll and msjro.dll

will usually be in c://program files//common files//system//ole db")

// 使用如下2行

#import "c:/program files/common files/system/ole db/oledb32.dll" no_namespace

// 指定絕對路徑,把下行注釋掉!

//#import no_namespace

#pragma warning (default: 4192)

再次編譯,就發現,呵呵,一切成功!!

tlh、tli檔案 是vc++編譯器解析tlb檔案生成的標準c++檔案。因為odl和tlb並不是c++標準的東東,有必要把它們翻譯成標準的c++型別,使得c++開發 者可以使用。相信vb和j++也會把tlb翻譯成自己語言相容的型別描述資訊。tlh相當於型別申明(標頭檔案),tli相當於定義實現(cpp檔案)。可 以用寫字板開啟檢視其內容。

每次更新,需要在選單裡選擇全部重新編譯,或者把debug內所有舊的 tlh、tli檔案刪除,否則編譯器仍然會認為.tlh和.tli檔案是最新的。也就是說,如果原先操作不當留下了由問題的tlh、tli檔案,修改後直 接編譯,還是會報告相同的錯誤,所以需要進行上述處理。

vc 使用ADO程式設計

ado實際上就是由一組automation物件構成的元件,因此可以象使用其它任何automation物件一樣使用ado。ado中最重要的物件有三個 connection command和recordset,它們分別表示連線物件 命令物件和記錄集物件。如果您熟悉使用mfc中的odbc類 cdataba...

VC操作ADO的方法

vc 下使用ado編寫資料庫程式 1 準備 1 引入ado類 2 初始化com 在mfc中可以用afxoleinit 非mfc環境中用 3 import 包含後就可以用3個智慧型指標了 connectionptr recordsetptr和 commandptr 1.連線和關閉資料庫 1 連線 例子...

VC 利用ADO操作Excel

把excel當做資料庫來操作,步驟如下 1 在stdafx.h中加入 import c program files common files system ado msado15.dll no namespace rename eof adoeof connectionptr pcon ex cst...