ADO連接ACCESS數據庫

首先在StdAfx.h中加入

引入msado15.dll動態庫

建立連接:(在xxApp文件中)

?1? 聲明變量?

??????聲明變量?

??? 2 建立連接

??????????建立連接

(1) AfxOleInit

?

初始化 OLE 為應用程序的支持。

BOOL AFXAPI AfxOleInit( );
返回值

非零,如果成功;0,如果初始化失敗,可能,因為安裝該 OLE 系統 DLL 的錯誤版本。

備注

調用此函數初始化 OLE 為 MFC 應用程序的支持。?當調用該函數時時,將發生以下操作:

  • 初始化調用應用程序的當前單元 COM 庫。?有關更多信息,請參見?OleInitialize。

  • 創建消息篩選器對象,?IMessageFilter?實現接口。?此消息篩選器可捕獲與調用AfxOleGetMessageFilter。

?

如果?AfxOleInit?從 MFC DLL 調用,則調用將失敗。?該失敗,因為該函數,假設,則為; 如果從 DLL 調用,該 OLE 系統由調用應用程序之前初始化。

?

必須初始化 MFC 應用程序設置為單線程單元。 (STA)?如果對您的?InitInstance?重寫的?CoInitializeEx?,請指定?COINIT_APARTMENTTHREADED?(而不是?COINIT_MULTITHREADED)。

?AfxOleInit()與CoInitialize(NULL)的區別

OLE是建立在COM之上的技術,層次比COM要高。AfxOleInit()調用的是OleInitialize(),而OleInitialize()除了調用CoInitializeEx()來初始化COM庫外,還進行一些其它的操作,這些操作對OLE應用來說是必須的,這些OLE應用包括:??
? (1)Clipboard;???
? (2)Drag?? and?? drop;???
? (3)Object?? linking?? and?? embedding(現在的OLE,已不再僅僅是Object?? linking?? and?? embedding的概念);??
? (4)In-place?? activation;???
? 與AfxOleInit()對應的是,AfxOleTerm()。???

??? CoInitialize和CoUninitialize必須成對使用,后者不必。

???? AfxOleInit()和AfxOleTerm()其實也是需要成對的,但是,在你的程序中,AfxOleTerm()可以不出現,這是因為,MFC已經幫你做好了(有興趣的話,你可以仔細研究一下CWinThread::m_lpfnOleTermOrFreeLib,而CWinApp是從CWinThread繼承的)。

(2)CreateInstance

_uuidof:??? 取得和某個標示符相關聯的GUID(全球唯一標識符)

(3)Open 方法 (ADO Connection)

打開到數據源的連接。

語法

connection.Open?ConnectionString,?UserID,?Password, Options

參數

ConnectionString???可選,字符串,包含連接信息。參閱ConnectionString?屬性可獲得有效設置的詳細信息。

UserID???可選,字符串,包含建立連接時所使用用戶名。

Password???可選,字符串,包含建立連接時所使用密碼。

Options???可選,ConnectOptionEnum?值。決定該方法是在連接建立之后(異步)還是連接建立之前(同步)返回。可以是如下某個常量:

?

常量說明
adConnectUnspecified(默認)同步打開連接。
adAsyncConnect異步打開連接。ConnectComplete?事件可以用于決定連接何時可用。

?

說明

使用?Connection?對象的?Open?方法可建立到數據源的物理連接。在該方法成功完成后連接是活躍的,可以對它發出命令并且處理結果。

使用可選的?ConnectionString?參數指定連接字符串,它包含由分號分隔的一系列?argument = value?語句。ConnectionString屬性自動繼承用于ConnectionString?參數的值,因此可在打開之前設置?Connection?對象的?ConnectionString?屬性,或在?Open?方法調用時使用?ConnectionString?參數設置或覆蓋當前連接參數。

如果在?ConnectionString?參數和可選的?UserID?及?Password?參數中傳送用戶和密碼信息,那么UserID?和Password?參數將覆蓋?ConnectionString?中指定的值。

在對打開的?Connection?的操作結束后,可使用?Close?方法釋放所有關聯的系統資源。關閉對象并非將它從內存中刪除;可以更改它的屬性設置并在以后再次使用?Open?方法打開它。要將對象完全從內存中刪除,可將對象變量設置為Nothing

遠程數據服務用法????當在客戶端的?Connection?對象上使用?Open?方法時,在?Connection?對象上打開Recordset?之前?Open?方法其實并未建立到服務器的連接。

adModeUnknown 表示目前用ado連接數據庫的方式還不知道ad--ADO Mode-方式模式 Unknown-不知道,這種方式以后可以在程序中以表、視圖、查詢、SQL、過程等方式提取數據。

創建記錄集(在XXDlg中)

1 聲明變量 _RecordsetPtr m_pRecordset

2 添加記錄? (在OnInitDialog中)

添加記錄

Recordset.open

Recordset 對象的 Open 方法 允許用戶向數據庫發出請求,通過是運行一個 SQL

命令、啟動一個指定的數據表或調用一個指定的 Stored Procedure

格式:

Recordset.Open Source,ActiveConnection,CursorType,LockType,Options

1、Source 參數可以是一個 Command 名稱,一個 SQL 命令、一個指定的數據表

名稱或一個指定的 Stored Procedure。Recordset 對象可通過 Source 屬性連接

Command 對象。

2、ActiveConnection 參數可以是一個 Connction 對象名稱或是包含“數據庫連

接信息( ConnectionString )”的字符串信息。Recordset 對象可通過

ActiveConnection 屬性連接 Connection 對象。

3、CursorType 參數表示啟動數據的游標類型。

常數值說明:

AdOpenForwardOnly 0 啟動只能向前( Forward-only )的游標,缺省值

AdOpenKeyset 1 啟動 Keyset 類型的游標

AdOpenDynamic 2 啟動 Dynamic 類型的游標

AdOpenStatic 3 啟動 Static 類型的游標

4、LockType 參數表示采用的 Lock 類型。

常數值說明:

AdLockReadOnly 1 以只讀方式啟動,無法運行 AddNew、Update、Delete

等方法,缺省值

AdLockPessimistic 2 當數據正在更新時,系統會暫時鎖定其它用戶的動作

,以確保數據一致性

AdLockOptimistic 3 當數據正在更新時,系統不會暫時鎖定其它用戶的動

AdLockBatchOptimistic 4 當數據正在更新時,其它用戶必須將 CursorLocation

屬性設為 adUseBatch ,才能對數據庫操作

5、Options 參數表示對數據庫請求的類型。

常數值說明 :

AdCmdUnknown -1 所指定的 CommandText 參數類型無法確定,缺省值

AdCmdText 1 所指定的 CommandText 參數是一般的命令類型

AdCmdTable 2 所指定的 CommandText 參數是一個存在的表名稱

AdCmdStoredProc 3 所指定的 CommandText 參數是 Stored Procedure 表名稱

ADO Recordset

對象用于容納一個來自數據庫表的記錄集。一個 Recordset 對象由記錄和列(字段)組成。在 ADO 中,此對象是最重要且最常用于對數據庫的數據進行操作的對象。

ProgID

set objRecordset=Server.CreateObject("ADODB.recordset") 

當您首次打開一個 Recordset 時,當前記錄指針將指向第一個記錄,同時 BOF 和 EOF 屬性為 False。如果沒有記錄,BOF 和 EOF 屬性為 True。

Recordset 對象能夠支持兩種更新類型:立即更新 - 一旦調用 Update 方法,所有更改被立即寫入數據庫。批更新 - provider 將緩存多個更改,然后使用 UpdateBatch 方法把這些更改傳送到數據庫。

在 ADO,定義了 4 中不同的游標(指針)類型

  • 動態游標 - 允許您查看其他用戶所作的添加、更改和刪除
  • 鍵集游標 - 類似動態游標,不同的是您無法查看有其他用戶所做的添加,并且它會防止您訪問其他用戶已刪除的記錄。其他用戶所做的數據更改仍然是可見的。
  • 靜態游標 - 提供記錄集的靜態副本,可用來查找數據或生成報告。此外,由其他用戶所做的添加、更改和刪除將是不可見的。當您打開一個客戶端 Recordset 對象時,這是唯一被允許的游標類型。
  • 僅向前游標 - 只允許在 Recordset 中向前滾動。此外,由其他用戶所做的添加、更改和刪除將是不可見的。

可通過 CursorType 屬性或 Open 方法中的 CursorType 參數來設置游標的類型。

注釋:并非所有的提供者(providers)支持 Recordset 對象的所有方法和屬性。

屬性

屬性描述
AbsolutePage設置或返回一個可指定 Recordset 對象中頁碼的值。
AbsolutePosition設置或返回一個值,此值可指定 Recordset 對象中當前記錄的順序位置(序號位置)。
ActiveCommand返回與 Recordset 對象相關聯的 Command 對象。
ActiveConnection如果連接被關閉,設置或返回連接的定義,如果連接打開,設置或返回當前的 Connection 對象。
BOF如果當前的記錄位置在第一條記錄之前,則返回 true,否則返回 fasle。
Bookmark設置或返回一個書簽。此書簽保存當前記錄的位置。
CacheSize設置或返回能夠被緩存的記錄的數目。
CursorLocation設置或返回游標服務的位置。
CursorType設置或返回一個 Recordset 對象的游標類型。
DataMember設置或返回要從 DataSource 屬性所引用的對象中檢索的數據成員的名稱。
DataSource指定一個包含要被表示為 Recordset 對象的數據的對象。
EditMode返回當前記錄的編輯狀態。
EOF如果當前記錄的位置在最后的記錄之后,則返回 true,否則返回 fasle。
Filter返回一個針對 Recordset 對象中數據的過濾器。
Index設置或返回 Recordset 對象的當前索引的名稱。
LockType設置或返回當編輯 Recordset 中的一條記錄時,可指定鎖定類型的值。
MarshalOptions設置或返回一個值,此值指定哪些記錄被返回服務器。
MaxRecords設置或返回從一個查詢返回 Recordset 對象的的最大記錄數目。
PageCount返回一個 Recordset 對象中的數據頁數。
PageSize設置或返回 Recordset 對象的一個單一頁面上所允許的最大記錄數。
RecordCount返回一個 Recordset 對象中的記錄數目。
Sort設置或返回一個或多個作為 Recordset 排序基準的字段名。
Source設置一個字符串值,或一個 Command 對象引用,或返回一個字符串值,此值可指示 Recordset 對象的數據源。
State返回一個值,此值可描述是否 Recordset 對象是打開、關閉、正在連接、正在執行或正在取回數據。
Status返回有關批更新或其他大量操作的當前記錄的狀態。
StayInSync設置或返回當父記錄位置改變時對子記錄的引用是否改變。

方法

方法描述
AddNew創建一條新記錄。
Cancel撤銷一次執行。
CancelBatch撤銷一次批更新。
CancelUpdate撤銷對 Recordset 對象的一條記錄所做的更改。
Clone創建一個已有 Recordset 的副本。
Close關閉一個 Recordset。
CompareBookmarks比較兩個書簽。
Delete刪除一條記錄或一組記錄。
Find搜索一個 Recordset 中滿足指定某個條件的一條記錄。
GetRows把多條記錄從一個 Recordset 對象中拷貝到一個二維數組中。
GetString將 Recordset 作為字符串返回。
Move在 Recordset 對象中移動記錄指針。
MoveFirst把記錄指針移動到第一條記錄。
MoveLast把記錄指針移動到最后一條記錄。
MoveNext把記錄指針移動到下一條記錄。
MovePrevious把記錄指針移動到上一條記錄。
NextRecordset通過執行一系列命令清除當前 Recordset 對象并返回下一個 Recordset。
Open打開一個數據庫元素,此元素可提供對表的記錄、查詢的結果或保存的 Recordset 的訪問。
Requery通過重新執行對象所基于的查詢來更新 Recordset 對象中的數據。
Resync從原始數據庫刷新當前 Recordset 中的數據。
Save把 Recordset 對象保存到 file 或 Stream 對象中。
Seek搜索 Recordset 的索引以快速定位與指定的值相匹配的行,并使其成為當前行。
Supports返回一個布爾值,此值可定義 Recordset 對象是否支持特定類型的功能。
Update保存所有對 Recordset 對象中的一條單一記錄所做的更改。
UpdateBatch把所有 Recordset 中的更改存入數據庫。請在批更新模式中使用。

事件

Note: You cannot handle events using VBScript or JScript (only Visual Basic, Visual C++, and Visual J++ languages can handle events).

事件描述
EndOfRecordset當試圖移動到超過 Recordset 結尾的行時被觸發。
FetchComplete當異步操作中的所有記錄均被讀取后被觸發。
FetchProgress在異步操作期間被定期地觸發,報告已讀取多少記錄。
FieldChangeCompleteField 對象的值更改被觸發。
MoveCompleteRecordset 中的當前位置更改后被觸發。
RecordChangeComplete一條記錄更改之后被觸發。
RecordsetChangeComplete在 Recordset 更改之后被觸發。
WillChangeField在 Field 對象的值更改之前被觸發
WillChangeRecord在一條記錄更改之前被觸發。
WillChangeRecordset在 Recordset 更改之前被觸發。
WillMove在 Recordset 中的當前位置更改之前被觸發。

集合

集合描述
Fields指示在此 Recordset 對象中 Field 對象的數目。
Properties包含所有 Recordset 對象中的 Property 對象。

Fields 集合的屬性

屬性描述
Count

返回 fields 集合中項目的數目。以 0 起始。

例子:

countfields = rs.Fields.Count
Item(named_item/number)

返回 fields 集合中的某個指定的項目。

例子:

itemfields = rs.Fields.Item(1)
或者	
itemfields = rs.Fields.Item("Name")

Properties 集合的屬性

屬性描述
Count

返回 properties 集合中項目的數目。以 0 起始。

例子:

countprop = rs.Properties.Count
Item(named_item/number)

返回 properties 集合中某個指定的項目。

例子:

itemprop = rs.Properties.Item(1)
或者
itemprop = rs.Properties.Item("Name")

轉載于:https://www.cnblogs.com/jiangzhaowei/p/5123567.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/375187.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/375187.shtml
英文地址,請注明出處:http://en.pswp.cn/news/375187.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

MySQLdb autocommit的坑

今天寫的一個小功能,里面要用MySQLdb更新數據庫,語句如下 sql "update %s.account_operation set status1 where username%s" % (allResDBInfos[db], username)變量替換后,是下面的樣子 update suspects.account_operation set st…

8086段寄存器

8086有四個段寄存器CS,DS,SS,ES 任意時刻CPU執行CS:IP指向的指令,CS為代碼段寄存器(IP為指令指針寄存器) 任意時刻SS:SP指向棧的棧頂單元,SS為棧段寄存器 我們尋找數據需要知道數據在內存的位置用DS尋址 DS為數據段寄存器 ES為附加段寄存器可作為目的地址的段地址比如ES:DI…

用jquery給元素綁定事件,一些內部細節

按看段代碼: 1 $(.test).on(click, function() { 2 console.log(hello); 3 $(this).removeClass(test); 4 }); 就算是remove掉class test,照樣可以點,事件綁定的是這個對象。 轉載于:https://www.cnblogs.com/lqj12138/p/4384596.html

8086數據寄存器

8086CPU有四個16位數據寄存器可分成8個8位寄存器 AX(AH,AL)|BX(BH,BL)|CX(CH,CL)|DX(DH,DL) 數據寄存器主要用來保存操作數和保存運算結果等 AX 常用作累加器(accumulator)用來保存臨時數據比如MOV AX,DATA將數據段地址送入AX ;MUL BL,DIV BX用來保存乘除法的結果 BX 基(Ba…

使用搜索欄過濾collectionView(按照首字母)

1.解析json數據NSDictionary *citiesDic [CoreJSONSerialization coreJSONSerialization:"cities"];NSDictionary *infor [citiesDic objectForKey:"infor"];NSArray *listItems [infor objectForKey:"listItems"]; 2.存儲數據 for (NSDicti…

《哪來的天才?練習中的平凡與偉大》

這是一本堪稱論述所有偉大成就來源的書中最讓我覺得激動人心、非常棒的一本書。 什么成就了一個那些所謂的天才?刻意練習!偉大的成就不是因為所謂天生的基因,也不是所謂簡單的埋頭苦干。而是需要長時間有針對性的刻意提高自己某個方面能力的艱…

8086變址和指針寄存器

SI和DI稱為變址寄存器,在字符串操作中SI作為源指針,DI作為目的指針(ES:DI<--DS:SI) ;用作存儲器指針時可用于尋址 DS:[SI],DS:[BXDI]BP和SP稱為指針寄存器,BP稱為基址針,SP為堆棧指針 ;BP也可作為存儲器指針DS:[bpsi],如果沒有段前綴那么BP最為堆棧基址[BP]尋址的是堆棧內存…

R軟件中 文本分析安裝包 Rjava 和 Rwordseg 傻瓜式安裝方法四部曲

這兩天&#xff0c;由于要做一個文本分析的內容&#xff0c;所以搜索了一天R語言中的可以做文本分析的加載包&#xff0c;但是在安裝包的過程&#xff0c;真是被虐千百遍&#xff0c;總是安裝不成功。特此專門寫一篇博文&#xff0c;把整個心塞史暢快的釋放一下。 ------------…

省賽之路第一天

今天是清明假期第一天&#xff0c;原定的到洛陽玩也成為了虛無縹緲的東東了吧&#xff0c;cb這位還有說的太對了&#xff0c;no game&#xff0c;no girlfriend&#xff0c;no holiday&#xff0c;only maching&#xff01;這都不是什么大事&#xff0c;畢竟自認為還是個肯吃苦…

8086標志寄存器FLAG

8086CPU提供一個特殊的寄存器稱為標志寄存器,里面包含9個標志,用來反映處理器的狀態和運算結果的某些特征。FLAG是按位起作用的

Windows下安裝Python數據庫模塊--MySQLdb

## 1、下載MySQLdb [去官網](http://pypi.python.org/pypi/MySQL-python/) 下載對應的編譯好的版本&#xff08;現在官網最新版本為1.2.5&#xff09;&#xff1a; MySQL-python-1.2.5.win32-py2.7.exe 得到1MB的安裝文件 MySQL-python-1.2.5.win32-py2.7.exe ## 2、安裝 以…

MSSQL-字符串分離與列記錄合并成一行混合使用

一般我們在數據庫的表字段存儲字典Id&#xff0c;如果有多個的話一般是用,或分隔符分隔(12,14),列表顯示的時候是顯示字典名,那如果要在數據庫將字典Id轉成用戶看得懂的字典名&#xff0c;該怎么辦呢&#xff1f; 我們這時候可以結合之前說到的 字符串分離(Split函數) 和 列記錄…

邏輯運算 或,與,非

邏輯變量之間的運算稱為邏輯運算。二進制數1和0在邏輯上可以代表“真”與“假”、“是”與“否”、“有”與“無”。這種具有邏輯屬性的變量就稱為邏輯變量。 計算機的邏輯運算的算術運算的主要區別是&#xff1a;邏輯運算是按位進行的&#xff0c;位與位之間不像加減運算…

Java 理解CPU緩存(CPU Cache)

從Java視角理解系統結構連載, 關注我的微博(鏈接)了解最新動態 眾所周知, CPU是計算機的大腦, 它負責執行程序的指令; 內存負責存數據, 包括程序自身數據. 同樣大家都知道, 內存比CPU慢很多. 其實在30年前, CPU的頻率和內存總線的頻率在同一個級別, 訪問內存只比訪問CPU寄存器慢…

測試指令TEST

測試指令TESTTEST OPRD1,OPRD2 ;按位與操作,但不保存結果,僅影響標志寄存器,根據影響的標志位得到結果 該指令通常用于檢測某些位是否為1,但不改變原操作值.根據ZF得知判斷結果 mov al,01100011B;檢測位6是否為1,如果為1那么ZF0,如果為0那么ZF1 TEST AL,01000000B ;AL010000…

Homebrew OS X 不可或缺的套件管理器

Homebrew OS X 不可或缺的套件管理器,可以說Homebrew就是mac下的apt-get、yum. 1.安裝homebrew brew的安裝很簡單&#xff0c;使用一條ruby命令即可&#xff0c;Mac系統上已經默認安裝了ruby。 ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install…

【BZOJ】【1003】【ZJOI2006】物流運輸trans

最短路/DP 這題數據規模并不大&#xff01;&#xff01;這是重點……… 所以直接暴力DP就好了&#xff1a;f[i]表示前 i 天的最小花費&#xff0c;則有$f[i]min\{f[j]cost[j1][i]k\} (0\leq j \leq i-1)$其中cost數組表示第L天到第R天只用一種運輸方案連續運$R-L1$天的最小代價…

與操作指令AND

邏輯”與”操作指令AND(邏輯乘法) 0*000*101*001*11 只當參與運算的邏輯變量都同時取值為1時&#xff0c;其邏輯乘積才等于1。 MOV AL,01100011BAND AL,11111110B ;按位根據乘法表計算;結果AL01100010B另一種說法是用”0”來把相應位設置成0MOV AL,01100011B ;把AL的高4位設置成…

SVN-鉤子

先說說鉤子是干什么的吧&#xff0c;&#xff0c;簡單的說&#xff0c;svn鉤子就是在提交svn時前后所要觸發的事件&#xff0c;于是我們可以用鉤子做一些提交時的限制&#xff0c;及提交后的操作。最常用的一般有兩個&#xff0c;pre-commit,post-commit。下面分別簡單說下概念…

數據庫---T-SQL語句(一)

一、T-SQL語句 1.創建表:create table Name(Code varchar(50),) 主鍵&#xff1a;primary key 自增長&#xff1a;auto_increment 外鍵關系&#xff1a;references 非空&#xff1a;not null 2.刪除表&#xff1a;drop table family 3.創建數據庫&#xff1a;creat database…