日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

关于VB访问数据库的一些经验(献给VB初学者)

發布時間:2023/12/10 数据库 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 关于VB访问数据库的一些经验(献给VB初学者) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

VB作為一個高效快捷的開發工具而言,在數據庫開發上有著很好的表現。但是,對于很多初學者而言,入門時經常會看一些并非高效且封裝得更加多的代碼作為學習參考(如那種用什么控件、數據捆綁之類的范例代碼),導致很多多初學者想深入時會更加茫然。其實,曾經很多用VB開發的數據庫商用軟件都不會用那種方法,因為弊病很多,效率也不高。先總結一下為什么說用數據控件效率不高。首先,作為數據庫操作的對象而言,是不需要有用戶界面的,完全可以在后來默默的查詢數據供開發者在代碼里任意使用,而控件,其實就是一個用窗口封裝的代碼模塊,里面除了對接數據查詢功能,還花了不少代碼去搞窗口消息的處理和重繪之類的,當然除了浪費內存,還浪費CPU去處理那些窗口代碼,與單純的無界面后臺操作數據庫的方式而言,控件的效率肯定要打折扣,還有一個問題就是多窗口使用同一個數據庫時,處理起來也很麻煩。再說說那種捆綁數據自動顯示的弊病和問題吧。首先因為捆綁了數據源的控件都是自行去分析捆綁記錄集的字段、類型、數據條數等,并根據數據源的觸發事件將其需要顯示的信息自動顯示在數據表或輸入框中,那么就意味著這些控件都有通過消息或管道進行偵聽監控才觸發的這些更新過程,這無形中又會浪費很多內存資源和CPU資源,效率肯定也會下降。再者就是靈活性差,因為他是根據記錄集查詢出來的內容變化整體輸出或單條輸出,而不是通過代碼控制處理,碰到些想合并表格或做點表格表達式運算處理就有心無力了。所以,通常專業的商用軟件很少有人會用這種數據控件或數據捆綁技術作為數據庫操作的核心處理模式。那么我所謂的專業的商用軟件具體用的是什么技術去實現這種數據庫操作的呢?其實對于看了眾多案例的初學者來說應該也可能見過,就是使用 ADO 對象,全稱是 Microsoft?ActiveX Data Objects,在VB引用里可以找到,不過你可能找到的有很多版本,如:

具體選哪一個呢,其實都可以,保險點選個最低版本都兼容,當你勾選了一個ADO對象后選確定,然后點擊“對象瀏覽器”按鈕,然后再點開對象下拉列表,就可以看到一個新的對象 ADODB在你的工程中了,如:

這時我們可以鼠標右鍵點擊Form1窗口,在彈出的菜單選“查看代碼”編輯些初始代碼。

而在編寫代碼前,我先介紹一下 ADO 對象,ADO 對象主要是負責與數據引擎對接的一個公共接口。其中比較常用的有兩個部分,一個是鏈接對象 ADODB.Connection 和記錄集 ADODB.Recordset,然后我再分別介紹一下這兩個對象的一些功能和常用的方法與屬性:

ADODB.Connection 對象

負責鏈接目標數據庫(可以指定服務器、用戶賬號、密碼、數據庫名稱、數據庫文件地址等等信息與指定數據庫連接),還可以直接在已連接數據庫的對象上調用 Execute 方法執行 SQL 語句。

常用的方法有:Open、Execute、Close,常用的屬性有:State

ADODB.Connection.Open 方法用來連接數據庫
ADODB.Connection.Execute 方法用來在已連接的數據庫執行 SQL 語句
ADODB.Connection.Close 方法可以關閉已連接的數據庫
ADODB.Connection.State 屬性可以讀取當前的連接狀態
當然,ADODB.Connection 還有其它很多方法、屬性與事件,不過通常不常用,上面這些通常的程序夠用了,如果想深入了解別的屬性或方法,可以看看 VS6 的 MSDN 說明。

?

ADODB.Recordset?對象

負責利用以連接好的 ADODB.Connection 對查詢出來的數據進行進一步的處理,所以 ADODB.Recordset 在使用是需要關聯 ADODB.Connection 對象一起使用。

常用的方法有:Open、MoveNext、Move、Close,常用的屬性有:RecordCount、Fields、EOF等。

當然像 AddNew、UpdateBatch、MoveFirst、MoveLast、MovePrevious、Delete 等等也是比較常用的,只是如果玩 SQL 語句進行創建、查詢、插入、刪除等操作,這些方法屬性等都很少用到。

ADODB.Recordset.Open 指定 ADODB.Connection 對象查詢指定的 SQL語句
ADODB.Recordset.MoveNext 將當前記錄向下移動一條
ADODB.Recordset.Move 將當前記錄向上或向下移動到指定的條數,可以輸入負數或正數
ADODB.Recordset.Close 關閉查詢結果
ADODB.Recordset.RecordCount 取得已查詢的數據條數(要得到數據條數不建議使用該屬性,可以用SQL語句的Count聚合函數統計出數據結果,效率會更高)
ADODB.Recordset.Fields 取得已查詢的出的字段信息,包含字段名稱、類型、數據等都可以讀取或設置
ADODB.Recordset.EOF 可以在死循環里判斷是否移動到了數據結尾以結束死循環
?

有了這兩個對象后基本上就可以對數據庫進行任何操作了,之后的關鍵就是去了解 SQL 語句了,不同的數據庫在 SQL 語句的使用上會略有不同,但也是大同小異的,如 ACCESS的日期類型和MS SQLServer 的日期類型就有少許區別,ACCESS是用 #2019-12-06# 來指定日期,而 MS SQLServer 是用 '2019-12-06' 來指定日期等大同小異的區別。

現在我們可以來看看具體的使用案例了:

由于我們之前在工程里引用的 ADO 對象,所以我們可以在窗口代碼里直接定義Connection與Recordset類型的變量,如:

Private Sub Form_Load()Dim conn As ConnectionDim rs As RecordsetEnd Sub

但是,VB的對象使用是需要初始化的,所以我們還需要為這兩個對象變量進行初始化,過程如下:

Private Sub Form_Load()Dim conn As Connection ' 定義數據連接對象變量Dim rs As Recordset ' 定義記錄集對象變量Set conn = New Connection ' 初始化數據連接對象Set rs = New Recordset ' 初始化記錄集對象變量End Sub

接著我們需要先鏈接數據庫,然后才能對數據庫進行創建、查詢、修改、插入、刪除等操作,所以我們先來了解一下如何鏈接數據庫。鏈接數據庫之前有介紹,我們可以通過?Connection 的 Open 方法來連接數據庫,具體格式是:

對象.Open 字符串類型的連接語句,例如我們嘗試鏈接一個存放在 d:\1.mdb 的 ACCESS 數據庫,我們可以這樣進行連接:

Private Sub Form_Load()Dim conn As Connection ' 定義數據連接對象變量Dim rs As Recordset ' 定義記錄集對象變量Set conn = New Connection ' 初始化數據連接對象Set rs = New Recordset ' 初始化記錄集對象變量' 連接 ACCESS 數據庫conn.Open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=d:\1.mdb"End Sub

但是,即使使用了 Open 方法嘗試鏈接數據庫也未必就能鏈接成功,因為可能文件被意外移動,文件被意外修改或是磁盤出現壞道什么的導致文件丟失,作為一個專業的軟件不可能讓一個不能確定的鏈接跑之后的程序的,所以需要對鏈接狀態進行判斷,確認鏈接狀態不是關閉后才繼續跑之后的程序,否則將提示錯誤做重新鏈接或退出程序之類的處理,如:

Private Sub Form_Load()Dim conn As Connection ' 定義數據連接對象變量Dim rs As Recordset ' 定義記錄集對象變量Set conn = New Connection ' 初始化數據連接對象Set rs = New Recordset ' 初始化記錄集對象變量' 連接 ACCESS 數據庫conn.Open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=d:\1.mdb"If conn.State = 0 ThenMsgBox "連接數據庫失敗,請您確定"EndEnd If' 已經正常連接數據庫'...End Sub

在開發這種 Open、Close 程序的時候,需要養成一個良好的習慣,就是當你寫了 Open 之后,接著就想著在哪先寫好 Close 過程,如:

Private Sub Form_Load()Dim conn As Connection ' 定義數據連接對象變量Dim rs As Recordset ' 定義記錄集對象變量Set conn = New Connection ' 初始化數據連接對象Set rs = New Recordset ' 初始化記錄集對象變量' 連接 ACCESS 數據庫conn.Open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=d:\1.mdb"If conn.State = 0 ThenMsgBox "連接數據庫失敗,請您確定"EndEnd If' 已經正常連接數據庫'...' 完成所有數據操作關閉數據連接conn.Close End Sub

然后我們來進一步說一說?Connection 的 Execute 方法,通常?Execute 方法都是用作那種不需要返回,只需要執行一次SQL性操作的情況下使用,如:創建數據表、插入數據、修改數據、刪除數據時使用,所以,接下來我們嘗試在一個數據表中實現數據的插入、修改、刪除等操作。例如我們 d:\1.mdb ACCESS數據庫中有一個名為?user 的表,字段分別有 id、uid()、pwd、uname、sex,bd等,類型如圖:

然后我們嘗試插入一條數據,代碼如下:

Private Sub Form_Load()Dim conn As Connection ' 定義數據連接對象變量Dim rs As Recordset ' 定義記錄集對象變量Set conn = New Connection ' 初始化數據連接對象Set rs = New Recordset ' 初始化記錄集對象變量' 連接 ACCESS 數據庫conn.Open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=d:\1.mdb"If conn.State = 0 ThenMsgBox "連接數據庫失敗,請您確定"EndEnd If' 已經正常連接數據庫'---------- 插入數據 ----------conn.Execute "INSERT INTO `user` (`uid`,`pwd`,`uname`,`sex`,`bd`) VALUES ('sk','123','人類',1,#2019-12-06#)"' 完成所有數據操作關閉數據連接conn.Close End Sub

然后我們先確保關掉 ACCESS 的情況下嘗試運行程序,再用 ACCESS 打開數據庫看看結果,發現數據已經插入成功了:

但這時候我們會發現如果要同時插入多條數據SQL語句會很長,這時候還是直接在 Execute 方法后放字符串會很難管理字符串,所以我們可以在程序開頭多定義一個字符串變量出來專門存儲SQL語句,這樣使用起來代碼格式看起來會整潔很多:

Private Sub Form_Load()Dim conn As Connection ' 定義數據連接對象變量Dim rs As Recordset ' 定義記錄集對象變量Dim SQL As String ' 定義一個字符串變量用來存儲 SQL 語句Set conn = New Connection ' 初始化數據連接對象Set rs = New Recordset ' 初始化記錄集對象變量' 設置數據庫連接語句SQL = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=d:\1.mdb"' 連接 ACCESS 數據庫conn.Open SQLIf conn.State = 0 ThenMsgBox "連接數據庫失敗,請您確定"EndEnd If' 已經正常連接數據庫'---------- 插入數據 ----------SQL = "INSERT INTO `user` ("SQL = SQL & "`uid`,"SQL = SQL & "`pwd`,"SQL = SQL & "`uname`,"SQL = SQL & "`sex`,"SQL = SQL & "`bd`"SQL = SQL & ") VALUES "SQL = SQL & "('sk','123','人類',1,#2019-12-06#)"conn.Execute SQL' 完成所有數據操作關閉數據連接conn.Close End Sub

然后我們再嘗試一下刪除所有數據

Private Sub Form_Load()Dim conn As Connection ' 定義數據連接對象變量Dim rs As Recordset ' 定義記錄集對象變量Dim SQL As String ' 定義一個字符串變量用來存儲 SQL 語句Set conn = New Connection ' 初始化數據連接對象Set rs = New Recordset ' 初始化記錄集對象變量' 設置數據庫連接語句SQL = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=d:\1.mdb"' 連接 ACCESS 數據庫conn.Open SQLIf conn.State = 0 ThenMsgBox "連接數據庫失敗,請您確定"EndEnd If' 已經正常連接數據庫'---------- 刪除數據 ----------SQL = "DELETE FROM `user`"conn.Execute SQL'---------- 插入數據 ----------SQL = "INSERT INTO `user` ("SQL = SQL & "`uid`,"SQL = SQL & "`pwd`,"SQL = SQL & "`uname`,"SQL = SQL & "`sex`,"SQL = SQL & "`bd`"SQL = SQL & ") VALUES "SQL = SQL & "('sk','123','人類',1,#2019-12-06#)"conn.Execute SQL' 完成所有數據操作關閉數據連接conn.Close End Sub

這個時候我們再運行一次程序,會發現原先 ID 為 1 的數據變成了 ID 為 2 的數據,這是因為原來添加的那條 ID 為 1 的數據在程序一運行時就被無差別的清理掉了,然后這條?ID 為 2 數據是剛剛運行的程序才插入進去的。

然后我們再嘗試著同時加幾條數據并嘗試修改某條數據看看:

Private Sub Form_Load()Dim conn As Connection ' 定義數據連接對象變量Dim rs As Recordset ' 定義記錄集對象變量Dim SQL As String ' 定義一個字符串變量用來存儲 SQL 語句Dim SQL_INSERT As String ' 定義一個字符串變量用來存儲 SQL INSERT 語句Set conn = New Connection ' 初始化數據連接對象Set rs = New Recordset ' 初始化記錄集對象變量' 設置數據庫連接語句SQL = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=d:\1.mdb"' 連接 ACCESS 數據庫conn.Open SQLIf conn.State = 0 ThenMsgBox "連接數據庫失敗,請您確定"EndEnd If' 已經正常連接數據庫'---------- 刪除數據 ----------SQL = "DELETE FROM `user`"conn.Execute SQL'---------- 插入數據 ----------SQL_INSERT = "INSERT INTO `user` (`uid`,`pwd`,`uname`,`sex`,`bd`) VALUES "SQL = SQL_INSERT & "('sk','123','人類',1,#2019-12-06#)"conn.Execute SQLSQL = SQL_INSERT & "('ii','111','測試1',0,#2019-12-06#)"conn.Execute SQLSQL = SQL_INSERT & "('jjj','222','測試2',0,#2019-12-06#)"conn.Execute SQLSQL = SQL_INSERT & "('kk','333','測試3',0,#2019-12-06#)"conn.Execute SQL'---------- 修改數據 ----------' 指定條件為 UID 為 jjj 的數據,將其 uname 改為 TestUserName, sex 改為 1SQL = "UPDATE `user` SET `uname`='TestUserName',`sex`=1 WHERE `uid`='jjj';"conn.Execute SQL' 完成所有數據操作關閉數據連接conn.Close End Sub

然后可以發現數據庫添加了有4條數據, UID 為 jjj 的數據 uname 變成了 TestUserName:

但老是這么用ACCESS來讀數據也不是個辦法,所以當我們了解了刪除、插入、修改數據后,我們就來了解一下查詢數據的方法了,讓我們先按照步驟,先看看輸入一個查詢語句查詢數據表的過程代碼:

Private Sub Form_Load()Dim conn As Connection ' 定義數據連接對象變量Dim rs As Recordset ' 定義記錄集對象變量Dim SQL As String ' 定義一個字符串變量用來存儲 SQL 語句Dim SQL_INSERT As String ' 定義一個字符串變量用來存儲 SQL INSERT 語句Set conn = New Connection ' 初始化數據連接對象Set rs = New Recordset ' 初始化記錄集對象變量' 設置數據庫連接語句SQL = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=d:\1.mdb"' 連接 ACCESS 數據庫conn.Open SQLIf conn.State = 0 ThenMsgBox "連接數據庫失敗,請您確定"EndEnd If' 已經正常連接數據庫'---------- 刪除數據 ----------SQL = "DELETE FROM `user`"conn.Execute SQL'---------- 插入數據 ----------SQL_INSERT = "INSERT INTO `user` (`uid`,`pwd`,`uname`,`sex`,`bd`) VALUES "SQL = SQL_INSERT & "('sk','123','人類',1,#2019-12-06#)"conn.Execute SQLSQL = SQL_INSERT & "('ii','111','測試1',0,#2019-12-06#)"conn.Execute SQLSQL = SQL_INSERT & "('jjj','222','測試2',0,#2019-12-06#)"conn.Execute SQLSQL = SQL_INSERT & "('kk','333','測試3',0,#2019-12-06#)"conn.Execute SQL'---------- 修改數據 ----------' 指定條件為 UID 為 jjj 的數據,將其 uname 改為 TestUserName, sex 改為 1SQL = "UPDATE `user` SET `uname`='TestUserName',`sex`=1 WHERE `uid`='jjj';"conn.Execute SQL'---------- 查詢數據 ----------SQL = "SELECT * FROM `user`"rs.Open SQL, conn, adOpenStatic, adLockReadOnlyrs.Close' 完成所有數據操作關閉數據連接conn.Close End Sub

看到查詢語句部分很簡單,就是記錄集 rs 指定數據連接對象 conn 用已設置好的?SQL 語句查詢并返回結果,然后記錄集 rs 把存入相關屬性或對象中,如把字段相關的結果存入記錄集內的?Fields 對象中,當前是否是最后一條記錄存到 EOF 屬性中等等。所以這時候我們可以使用?RecordCount 屬性的讀取取得查詢到的數據條數,這樣就可以用 For 語句循環指定的次數,然后在每一次循環過程中向下移動一下數據就可以讀取所有的數據并輸出出來,如:

Private Sub Form_Load()Dim conn As Connection ' 定義數據連接對象變量Dim rs As Recordset ' 定義記錄集對象變量Dim SQL As String ' 定義一個字符串變量用來存儲 SQL 語句Dim SQL_INSERT As String ' 定義一個字符串變量用來存儲 SQL INSERT 語句Dim i As Long ' 定義一個整數變量用作循環語句使用Dim str_out As String ' 定義一個字符串變量用作輸出文本用Set conn = New Connection ' 初始化數據連接對象Set rs = New Recordset ' 初始化記錄集對象變量' 設置數據庫連接語句SQL = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=d:\1.mdb"' 連接 ACCESS 數據庫conn.Open SQLIf conn.State = 0 ThenMsgBox "連接數據庫失敗,請您確定"EndEnd If' 已經正常連接數據庫'...'---------- 查詢數據 ----------str_out = ""SQL = "SELECT * FROM `user`"rs.Open SQL, conn, adOpenStatic, adLockReadOnlyFor i = 1 To rs.RecordCountIf i > 1 Thenstr_out = str_out & vbCrLfEnd Ifstr_out = str_out & rs!id & vbTab & rs!uname & vbTab & rs!uid & vbTab & rs!pwdIf i < rs.RecordCount Then rs.MoveNextNext irs.Close' 完成所有數據操作關閉數據連接conn.CloseMsgBox str_out, 64, "數據"End End Sub

也可以用 Do loop 這類死循環通過讀取 EOF 屬性來讀取全部數據,如:

Private Sub Form_Load()Dim conn As Connection ' 定義數據連接對象變量Dim rs As Recordset ' 定義記錄集對象變量Dim SQL As String ' 定義一個字符串變量用來存儲 SQL 語句Dim SQL_INSERT As String ' 定義一個字符串變量用來存儲 SQL INSERT 語句Dim i As Long ' 定義一個整數變量用作循環語句使用Dim str_out As String ' 定義一個字符串變量用作輸出文本用Set conn = New Connection ' 初始化數據連接對象Set rs = New Recordset ' 初始化記錄集對象變量' 設置數據庫連接語句SQL = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=d:\1.mdb"' 連接 ACCESS 數據庫conn.Open SQLIf conn.State = 0 ThenMsgBox "連接數據庫失敗,請您確定"EndEnd If' 已經正常連接數據庫'...'---------- 查詢數據 ----------str_out = ""SQL = "SELECT * FROM `user`"rs.Open SQL, conn, adOpenStatic, adLockReadOnlyi = 1Do While Not rs.EOFIf i > 1 Thenstr_out = str_out & vbCrLfEnd Ifstr_out = str_out & rs!id & vbTab & rs!uname & vbTab & rs!uid & vbTab & rs!pwdi = i + 1If Not rs.EOF Then rs.MoveNextLooprs.Close' 完成所有數據操作關閉數據連接conn.CloseMsgBox str_out, 64, "數據"End End Sub

好了,這里就基本上算是能夠插入、修改、刪除、讀取數據庫了,如果想把查詢的內容放到數據表內,可以用一些第三方表格控件來處理,通常都支持行列設置的,自己按行列設置表格數據,這樣靈活性會很高,對于一些復雜的第三方表格控件來說,還支持合并表格,多表頭的處理,用這種方法讀寫數據會快很多。

總結

以上是生活随笔為你收集整理的关于VB访问数据库的一些经验(献给VB初学者)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。