摘要:訪問數據庫的方法有兩種:一種是通過DAO 或ADO的數據源,對表中的數據進行直接操作;另一種是通過標準的SQL語句結合Connection 對象,對數據庫中的數據進行操作,對表中的數據進行檢索和統計。文章試通過開發實例來說明ADO在處理數據庫表中數據時的使用方法,并介紹利用SQL語句來實現對數據作數學統計的方法。
關鍵詞:ADO;SQL;數據庫
中圖分類號:TP311文獻標識碼:A文章編號:1009-3044(2008)34-2018-02
ADO and SQL in the Use of Visual Basic Database Programming
LU Jun
(Wuxi Teachers’Collge,Wuxi 214001, China)
Abstract: Access the database in two ways: through a DAO or ADO data sources, the data in the form of direct operate; and the other is through the combination of standard SQL statements Connection object to the database to operate on Table to retrieve data and statistics. Through the development of examples to illustrate the ADO in dealing with the database table data use, and introduced the use of the SQL statement to the realization of Mathematics and Statistics for data on the way.
Key words: ADO; SQL; database
1 引言
在VB的應用程序開發中,訪問數據庫的方法可歸納為兩種。一種是通過DAO 或ADO的數據源,對表中的數據進行直接操作;另一種是通過標準的SQL語句結合Connection 對象,對數據庫中的數據進行操作,對表中的數據進行檢索和統計。DAO是Visual Basic 5.0使用的數據訪問技術,它在用于訪問MDB文件格式的數據庫時有較高的效率,但訪問如Oracle或 SQL Server這樣的非MDB文件格式的數據庫時,因它基于Access/Jet數據庫引擎,訪問速度會大大降低,所以Visual Basic 6.0推出了ADO 技術。
ADO中文含意是ActiveX數據對象(ActiveX Data Object),它是一種面向對象的接口。ADO訪問數據庫是通過訪問OLE DB使用程序和OLE DB供給程序來進行的,它在封裝OLE DB的程序中使用了大量的COM接口,是一種高層的訪問技術,它在繼承OLE DB的同時,大大簡化了OLE DB的操作。此外,ADO技術可以以ActiveX控件的形式出現,被廣泛應用于Microsoft ActiveX頁、Visual C++ 和Visual Basic的編程。
SQL是管理關系數據庫系統的標準語言。每一種關系數據庫如Access、 SQL Server、 Oracle 等都有它自己特有的SQL語言,但它們都支持像select、insert、update、delete、create、drop等標準語句來完成幾乎所有的對數據庫的操作。本文將就ADO 和SQL的用法進行一些探討。
2 使用方法
2.1 開發原型
我們將開發一個庫房設備進銷存的程序。用MS Access 數據庫,創建的數據庫名叫 ware.mdb. 在這個數據庫中,建立了四張表:表1,表2,表3,表4。
表1 設備明細表: wareDetail
■
表2 流水賬 wAccount
■
表3 庫存表 wLib
■
表4 臨時表wInOut
■
2.2 ADO的使用方法.
ADO2.0存在于Visual Basic 6.0的兩個獨立的庫中 第一個稱為 ADODB,在References對話框中的名字是Microsoft ActiveX Data Objects 2.0 Library,在這個庫中包含了所有的ADO對象。對于那些并不需要太多加強的ADO資源工程,應該使用ADOR庫。在References對話框中這個庫稱為Microsoft ActiveX Data Objects Recordset 2.1 Library,這個庫只包含對Recordsets 的支持。Visual BASIC 6.0通過ADO控件和 Recordset對象兩種方法來使用ADO.下面介紹一下Recordset對象的使用方法。在VB中加入如下代碼:
dim myConnectstr as strng
dim myRecordset as New ADODB.recordset
myConnectstr=\"PROVIDER=Microsoft.Jet.OLEDB.4.0;DataSource=\" _
App.Path \"\\ware.mdb;Persist Security Info=False\"
myRecordset.CoursorLocation=AduseClient
myRecordset.Open “select * from wDetail ”,myConnectstr,_
adOpenKeyset, adLockPessimistic
這樣就可以對設備明細表追加紀錄:
myRecordset.AddNew
myRecordset.Fields(\"wareID\") = \"000001\"
myRecordset.Fields(\"wareName\") = \"Switch 3500\"
myRecordset.Fields(\"wPrice\") = 4350
myRecordset.Fields(\"wManufect\") = \"Cisco\"
myRecordset.Update
獲取表中的紀錄數:
recordcnt=myRecordset.Recordcount
移動紀錄指針
myRecordset.MoveFirst ‘移動到表的第一條紀錄
myRecordset.MoveLast ‘移動到表的最后一條紀錄
myRecordset.MovePrevious ‘移動到表的上一條紀錄
myRecordset.MoveNext ‘移動到表的下一條紀錄
刪除當前紀錄
myRecordset.Delete
最后關閉紀錄集,釋放紀錄集變量
myRecordset.Close
Set myRecordset=Nothing
2.3 SQL的使用
上面所用的方法,只適合于對單個表的簡單操作。如果是對表的數據作復雜查詢,或數據統計,用上述方法就非常不方便。一般情況下我們用SQL 語言結合Connection 對象實現。
SQL 語句中最常用的是Select語句。該語句用來從數據庫表中檢索數據或者完成其他一些功能。為了使用這條語句你必須知道你要檢索的字段名稱,或者直接用星號來檢索所有字段。下面是Select語句的基本語法:
SELECT[ALL | DISTINCT] [TOP xx[PERCENT]] select_list FROM table_name
[WHERE {search_criteria|join_criteria}[{AND|OR search_criteria}]]
[GROUP BY [ALL]aggregate_free_expression[,aggregate_free_expression….]]
[HAVING search_conditions] [ORDER BY{field_list}[ASC|DESC]]
其中:
ALL 定義每一行都將返回,包括重復紀錄。
DISTINCT定義只返回不重復的紀錄。
TOP定義你需要的得到的返回紀錄的前幾條。在數字xx后用PERCENT來說明只返回前面百分之幾條紀錄。
select_list 列出要檢索的表的列名。
table_name 列出要檢索的表名
search_criteria 列出要檢索的表的列名
join_criteria 列出一個表中用來和另一個表的某個列連接的列名
aggregate_free_expression 是一個不包含聚集的表達式。
Field_list 列出了數據排序的順序
ASC定義按照升序排序
DESC定義按照降序排序。
下面我們來舉例說明。
你希望檢索設備明細表中的信息可使用如下語句:
SELECT * FROM waredetial
關鍵字ORDER BY要求列名以確定按哪一列排序。這里我們選定按wareID排序,如果你希望按列wareID的字母順序排列可采用下面的代碼:
SELECT wareID FROM wareDetial ORDER BY wareID
默認是按升序排列如果想按降序排列可用如下代碼:
SELECT wareID FROM wareDetial ORDER BY wareID DESC
如果你想選擇多列,使用下面的語句(下轉第2032頁)
(上接第2019頁)
SELECT wareID,wareName FROM wareDetial ORDER BY wareID
用WHERE 關鍵字來限制選擇范圍。如果你想選擇wareDetial中wareName 列值為“cisco6000”的行。你可用下面的代碼實現:
SELECT * FROM wareDetial WHERE wareName=”cisco6000” ORDER BY wareID除了SELECT 語句,標準SQL語句還有INSERT UPDATE DELETE等,在此不再作具體介紹。實際的應用經常要對表中的某列或多列數據進行數學運算,這就需要使用用到如COUNT(),SUM(),AVG(),MAX(),MIN() 等數學函數。下面對這些函數的用法作具體說明。
先建立一個與數據庫的連接
dim myConnectstr as strng
dim myCnt as New ADODB.connection
myConnectstr=\"PROVIDER=Microsoft.Jet.OLEDB.4.0;DataSource=\" _
App.Path \"\\ware.mdb;Persist Security Info=False\"
myCnt.Open myConnectstr
若要產生某種設備的總進貨數以及總出貨數可用以下代碼:
exeStr =”insert into wInOut select sum(wQuantity) as Quantity,_
sum(wSold) as Sold from wAccount where wareID=‘000001’”
若要產生庫存的總數以及總庫存金額可用以下代碼:
exeStr = \"insert into wLib select sum(numInlib) as _
totalNum,sum(numInLib*wPrice) as totalMoney from wDetail \"
運行上述代碼:
myCnt.Execute exeStr
關閉連接
myCnt.Close
在應用程序的開發中,基于數據庫的不同,只在連接的數據源部分作相應的修改,其它的部分無需改動。
3 結束語
本文所列舉的僅僅是ADO和SQL的用法的一小部分,實際的應用中對ADO的操作有時用ADO控件結合DATAGRID控件等顯示數據也很方便。
參考文獻:
[1] 蘇穎,張躍華.Visual Basic數據庫開發應用技術[M].北京:中國鐵道出版社,2006.
[2] 曹祖圣,蔡文龍,林義證.Visual Basic2005完全開發指南[M].北京:科學出版社,2007.
[3] Kraft R.Microsoft SQL Server 7.0使用詳解[M].北京:機械工業出版社,1999.
[4] Franklin K.MICROSOFT VB.NET開發人員指南[M].北京:北京希望電子出版社,2002.