我們一般用adox建立資料庫,然後再用ado建立資料庫的表。
例程create_db_and_table演示如何使用ado建立access資料庫的表。
開啟vc++ 6.0,新建乙個基於對話方塊的工程create_db_and_table。在對話方塊idd_create_db_and_table_dialog中新增如下控制項:
控制項名稱
id用途
編輯框idc_dbname
輸入資料庫名稱
按鈕idc_btn_create
建立資料庫
編輯框idc_tablename
輸入表名
按鈕idc_btn_create_table
建立表編輯框
cstring變數
編輯框idc_dbname
m_dbname
編輯框idc_tablename
m_tablename
void cadoxcreatedatabasedlg::onbtncreate()
_catalogptr m_pcatalog = null;
cstring dbname="provider=microsoft.jet.oledb.4.0;data source=";
dbname=dbname+str;
trycatch(_com_error &e)
}以上**例程adoxcreatedatabase中已經詳細敘述。
void ccreate_db_and_tabledlg::onbtncreatetable()
i++;}}
catch(_com_error &e)
adodb::_connectionptr m_pconnection;
//建立表
_variant_t recordsaffected;
trycatch(_com_error e)
trycatch(_com_error &e)}}
這段**先用adox的catalog物件檢查表是否已經存在,如果該錶已經存在,直接返回;如果還沒有該錶,使用ado的connection物件的execute函式建立表。
connection物件的用法:首先定義乙個connection型別的指標,然後呼叫createinstance()來建立乙個連線物件的例項,再呼叫open函式建立與資料來源的連線。最後使用execute()函式執行sql語句建立表。
關於呼叫createinstance()來建立連線物件的例項,還需作一點說明。ado庫包含三個基本介面:_connectionptr介面,_recordsetptr介面和_commandptr介面。其分別對應connection物件(完成應用程式對資料來源的訪問連線),recordset物件(將查詢的結果以記錄集的方式儲存)和command物件(對已連線的資料來源進行命令操作)。
_connectionptr m_pconnection;
_recordsetptr m_precordset;
_commandptr m_pcommand;
而這三個物件例項的建立,可以使用如下語句:
m_pconnection.createinstance(__uuidof(connection));
或者:m_pconnection.createinstance(「adodb.connection」);
m_precordset.createinstance(__uuidof(recordset));
或者:m_precordset.createinstance(「adodb.recordset」);
m_pcommand.createinstance(__uuidof(command));
或者:m_pcommand.createinstance(「adodb.command」);
兩種方法的作用完全相同,使用哪種方法,完全是您的個人愛好問題。
if(!afxoleinit())
在stdafx.h中加入如下語句:
#import "c:/program files/common files/system/ado/msadox.dll"
#import "c:/program files/common files/system/ado/msado15.dll" rename("eof","adoeof")
關於這兩條語句,需要進行特別說明:
由於該例程同時使用adox和ado,需要同時引入msado15.dll和msadox.dll兩個庫。這兩個庫的名字空間是不同的,msado15.dll的名字空間是adodb,msadox.dll的名字空間是adox。在使用ado所屬的名字空間的變數,函式時,在前面加上adodb::,在使用adox所屬的名字空間的變數,函式時,在前面加上adox::。
另外,一般adox和ado分開操作。您也可以在adox操作部分使用using namespace adox::,而在ado操作部分使用using namespace ado:,以區分名字空間。這樣,您就不必再使用adox::和adodb::了。
rename(「eof」,」adoeof」) //重新命名eof是必要的,因為典型的vc應用都已經定義了eof作為常數-1,為了避免衝突,將ado中的eof重新命名為adoeof。
#import中有乙個屬性為no_namespace,這是告訴編譯器該類不在乙個單獨的名字空間中,使用no_namespace意味著你不需要在初始化變數的時候引用名字空間。當然如果在您的應用中需要匯入多個型別庫的話,不要使用no_namespace,以免引起名字衝突。
再通俗一點講,就是只匯入乙個型別庫的話,可以在#import語句中加入no_namespace屬性,您的程式可以直接使用這個型別庫的名字空間的內容,而不必使用using namespace ***;或***::,這是因為no_namespace屬性告訴編譯器該型別庫不再名字空間,而是在全域性空間上工作;如果您匯入幾個型別庫,而這幾個型別庫之間沒有定義衝突,您也可以在使用no_namespace屬性;但如果兩個型別庫中有定義衝突,就不能使用no_namespace屬性,如果使用no_namespace屬性,就會在全域性空間產生定義衝突。
對於本例程,您可以把stdafx.h中的
#import "c:/program files/common files/system/ado/msadox.dll"
#import "c:/program files/common files/system/ado/msado15.dll" rename("eof","adoeof")
改為#import "c:/program files/common files/system/ado/msadox.dll"
#import "c:/program files/common files/system/ado/msado15.dll" no_namespace rename("eof","adoeof")
這樣改動後,void ccreate_db_and_tabledlg::onbtncreatetable()中的adodb::需要完全省略掉。
當然,您也可以把這兩行改為:
#import "c:/program files/common files/system/ado/msadox.dll" no_namespace
#import "c:/program files/common files/system/ado/msado15.dll" rename("eof","adoeof")
但這樣改動後,void ccreate_db_and_tabledlg::onbtncreatetable()中的adox::需要完全省略掉。由於adox和ado有定義衝突,也就是說,msado15.dll和msadox.dll有相同的定義部分,所以在乙個程式中,不允許同時使用no_namespace。
ADO連線access資料庫
1.開啟access建立資料庫student.accdb.然後建立一些表,如 student table 2.建立資料來源,控制面板 管理工具 資料來源,選擇資料庫相應的驅動建立資料來源 3.應用程式連線資料庫,和訪問記錄 關鍵語句 引入ado import c program files comm...
ADO建ACCESS資料庫
兩種都是使用adox的catalog,只是在引入的時候有點區別,使用了名字空間 1需要同時用 ado 和 adox,引入方法 import c program files common files system ado msado15.dll rename eof adoeof import c p...
通過ADO讀 寫Access資料庫
import c program files common files system ado msado15.dll no namespace rename eof adoeof 其中路徑名可以根據自己系統安裝的ado支援檔案的路徑來自行設定。當編譯器遇到 import語句時,它會為引用元件型別庫中...