ADO建立ACCESS資料庫的表 3

2021-09-30 08:56:58 字數 3765 閱讀 4380

我們一般用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語句時,它會為引用元件型別庫中...