VB6資料庫程式設計的一點入門經驗

2021-04-07 12:03:52 字數 4823 閱讀 6166

很久很久以前寫的一段文字,在軟盤裡放了n年。--飛利浦的軟盤質量不錯:)aphi**ail-job#yahoo.com.cn

偶上vb課的時候,老師沒講過這個問題,一般書上也不提,可以說是我碰到的第乙個難題。為解決這個問題,花了整整一天時間上網找答案。您別笑,那時候我還不知道有個**叫csdn,不知道google,也很少上bbs,所以找起來特別費勁。

方法很簡單,選中data控制項,在屬性視窗connect欄中填寫密碼即可。假設密碼為「123」,則填寫;pwd=123(注意不要丟掉前面的分號)。在databasename欄中填寫資料庫的完整路徑,在recordsource欄選擇表。ok!

三. 用data控制項連線帶密碼的access2000資料庫

dao程式設計,不允許在**中設定繫結控制項的datasouce屬性。所以,不使用data控制項,將無法實現對控制項的繫結,換來的是更大的靈活性和更強的功能。

首先新增對dao的引用:選單「工程」->「引用」,如果連線access97庫,選中microsoft dao 3.51 object library,若連線access2000庫,選中microsoft dao 3.6 object library。更簡單的辦法:在視窗上放置乙個data控制項,再把它刪掉,vb會自動新增對dao的引用。

例:dim db as dao.database

dim tbl as dao.tabledef

dim rs as dao.recordset

set db = opendatabase("e:/system.mdb", false, false, ";pwd=123")

set tbl = db.tabledefs("專業")

set rs = tbl.openrecordset()

do while not rs.eof

debug.print rs.fields("專業名稱")

rs.movenext

loop

注:opendatabase函式中間兩個引數,頭乙個是獨佔標誌,第二個是唯讀標誌。本例中,資料庫以共享、可讀寫方式開啟。

五.壓縮資料庫

access資料庫,無用記錄被刪除後,仍然佔據著磁碟空間。經過長時間使用後,資料庫會變得臃腫不堪,必須進行壓縮以提高效率。我們可以開啟access軟體,點選單「工具」->「資料庫實用工具」->「壓縮和修復資料庫」,對資料庫進行壓縮。也可以在程式中編寫**達到同樣的效果。

所有書上,凡是提到這一功能的,無不叮囑一件事:壓縮後的資料庫名字,絕對不可以跟原資料庫相同!因為如果壓縮失敗,jet將刪掉壓縮後的資料庫,二者同名,後果不堪設想。偶實際試驗的結果是,如果二者同名,會出現執行時錯誤3204:「資料庫已經存在」,根本不會給你壓縮,自然也不會像書上說得那麼危險。

這是一件有點風險的工作,注意錯誤捕捉。

例:dbengine.compactdatabase "e:/system.mdb", "e:/system1.mdb", , , ";pwd=123"

kill "e:/system.mdb"

name "e:/system1.mdb" as "e:/system.mdb"

如果希望壓縮資料庫的同時更換密碼,例如變「123」為「456」,則第一句改為

dbengine.compactdatabase "e:/system.mdb", "e:/system1.mdb",」;pwd=456」 , , ";pwd=123"

如果希望撤掉密碼,則第一句改為

dbengine.compactdatabase "e:/system.mdb", "e:/system1.mdb",」;pwd=」 , , ";pwd=123"

六.改變資料庫密碼

dim db as dao.database

set db = opendatabase("e:/system.mdb", true, false, ";pwd=123")

db.newpassword "123", "456"

七.得到資料庫中所有表的名字

dim db as dao.database

set db = opendatabase("e:/system.mdb", false, false, ";pwd=123")

dim i as long

for i = 0 to db.tabledefs.count - 1

debug.print db.tabledefs(i).name

next

八.sql語句的執行

ado部分:

一.用adodc控制項連線資料庫

例:   

adodc1.connectionstring = "dbq=e:/system.mdb;driver=;pwd=123;"

adodc1.recordsource = "select * from 專業 where 專業名稱<>』123』"

adodc1.refresh

set text1.datasource = adodc1

text1.datafield = "專業名稱"

二.不使用adodc控制項,連線資料庫

adodc控制項雖然簡單易用,但功能上受很多限制,速度也慢,能不用就不用。使用ado,可以在**中動態改變繫結控制項的datasouce屬性,所以控制項可以繫結到recordset物件上,並非一定要繫結到adodc控制項,這一點比dao方便多了。偶覺得這也進一步削弱了使用adodc控制項的必要性(實際上偶從來沒正經用過adodc控制項)。

首先,新增對ado的引用,選單「工程」->「引用」->microsoft activex data objects 2.5 library(未必是2.5,2.1亦可)。也可以通過在窗體上放置乙個adodc控制項讓vb自動新增這個引用。

例1:本例沒有使用帶dsn的連線字串, 作為替換方法,指定了odbc 的驅動程式。指定dsn,需要通過「windows 控制面板」對odbc資料來源進行定義,有點麻煩,而且將來打包安裝都是個問題。

dim cn as new adodb.connection

dim rs as new adodb.recordset

cn.open "dbq=e:/system.mdb;driver=;pwd=123;"

rs.open "專業", cn, adopendynamic, adlockreadonly, adcmdtable

set text1.datasource = rs

text1.datafield = "專業名稱"

例2:使用ole db介面是首選,比odbc要快很多。正如msdn所言,「對於 ado 或 rds 的程式設計師來說,理想的環境是每個資料來源都具有乙個 ole db 介面,以便 ado 可以直接呼叫該資料來源」。access當然提供了ole db 介面,所以嘛,讓odbc走遠點吧:)

dim cn as new adodb.connection

dim rs as new adodb.recordset

cn.open "provider=microsoft.jet.oledb.4.0;data source=e:/system.mdb;jet oledb:database password=123;"

rs.open " select * from 專業 where 專業名稱<>』123』", cn, adopenkeyset, adlockreadonly, adcmdtext

do while not rs.eof

debug.print rs.fields("專業名稱")

rs.movenext

loop

三.得到資料庫中所有表的名字

用ado得到所有表名,不像dao那樣直接,所以很多人不知道怎麼做。偶也是有一天閒著無聊,亂七八糟做了半天試驗,偶然發現的這個東東。

首先,新增兩個引用:microsoft activex data objects 2.5 library和microsoft ado ext. 2.5 for ddl and security

例:dim cn as new adodb.connection

dim x as new adox.catalog

cn.open "provider=microsoft.jet.oledb.4.0;data source=e:/system.mdb;jet oledb:database password=123;"

x.activeconnection = cn

dim i as long

for i = 0 to x.tables.count - 1

debug.print x.tables(i).name, x.tables(i).type

next

四.壓縮資料庫

剛開始用ado程式設計的時候,不知道怎麼實現資料庫的壓縮。後來偶然在一本書上看到了乙個示例,趕緊記了下來。奇怪的是,從那以後,好像到處都可以見到用ado壓縮資料庫的示例:)

首先,新增引用microsoft jet and replication objects 2.1 library和microsoft activex data objects 2.1 library

例:dim jj as new jro.jetengine

jj.compactdatabase "provider=microsoft.jet.oledb.4.0;data source=e:/system.mdb;jet oledb:database password=123;", "provider=microsoft.jet.oledb.4.0;data source=e:/system1.mdb;jet oledb:database password=123;"

kill "e:/system.mdb"

name "e:/system1.mdb" as "e:/system.mdb"

注:這個方法同時實現對資料庫的修復,也可以實現對密碼的修改。ado中專門用於修改密碼的方法偶還沒找到。

五.在資料庫中存放

VB6與SQLServer資料庫連線例項ADO

option explicit dim gobjconn as new cado dim k as integer k gobjconn.connected 資料庫名稱 ip位址 sa sa密碼 if k 0 then label1.caption now 連線 資料庫伺服器失敗!label1.fo...

VB6 連線MySql資料庫

目測 vb6 的資料比較少了,花了好久時間寫了個查詢語句 dim cn as newadodb.connection dim rs as newadodb.recordset 定義資料庫連線字串變數 dim strcn as string 定義資料庫連線引數變數 dim db host as str...

VB6連線PI實時資料庫

option explicit dim tagname as string 儲存單個工位號 dim tagpoint as long 儲存單個點源 dim apistate as long 儲存返回狀態 dim loginstate as long 儲存登入狀態 private sub cmdaut...