VB連接數據庫

Dim conn As New   ADODB.Connection   '創建一個 Connection 實例,在這裏使用New等於將Dim和Set合併爲一段代碼執行
Dim rs As ADODB.Recordset     '創建一個 Recordset 實例,不使用New 是因爲,經常需要重複使用Set,因此沒必要在這裏使用
Dim CnStr As String, Sql As String   '創建兩個字符串變量分別存放兩個集合的SQL語句代碼段


1、裝載數據庫(不屬於Recordset集合)
=============
Dim FileNamw$, DbIp$, DbName$, DbUser$, DbPw$
'以上5個字符串變量分別表示文件路徑和文件名、數據庫地址、數據庫名、數據操作員用戶名、操作員密碼

FileName = App.Path & "/'數據庫名'"
DbIp = "數據庫地址"
DbName = "數據庫名"
DbUser = "數據操作員用戶名"
DbPw = "操作員密碼"
'以上變量根據數據庫類型的不同而不同,有可能只需要1至兩個變量

'1)連接Access數據庫:
'-------------------
CnStr = "PROVIDER=microsoft.jet.oledb.3.51;persist security info =false;data source=" & FileName & ";Jet OLEDB:Database Password=" & DbPw

'2)連接Oracle數據庫:
'-------------------
CnStr = "PROVIDER=MSDAORA.1;Password=" & DbPw & ";User ID=" & DbUser & ";Data Source=" & FileName & ";Persist Security Info=True"

'其中:
'PASSWORD:       密碼
'User ID:        用戶號
'Data Source:    數據庫名
'Persist Security Info:
'Provider:

'3)連接VF的DBF庫:
'----------------
CnStr = "PROVIDER=MSDASQL.1;Persist Security Info=False;Driver={Microsoft Visual FoxPro Driver};UID=" & DbUser & ";SourceDB=" & FileName &

";SourceType=DBF;Exclusive=No;BackgroundFetch=Yes;Collate=Machine;"

'4)連接SQL的數據庫
'------------------
CnStr = "PROVIDER=MSDataShape;Data PROVIDER=MSDASQL;uid=" & DbUser & ";pwd=" & DbPw & ";DRIVER=SQL Server;DATABASE=" & DbName & ";WSID=GQSOFT;SERVER=" &

DbIP

'也可以使用這段簡易代碼 CnStr = "Provider=SQLOLEDB;Data Source=" & DbIp & ";DATABASE=" & DbName & ";UID=" & DbUser & ";pwd=" & DbPw

Conn.Open cnstr '使用 Connection 集合的 Open 方法 與數據庫建立連接

2、Recordset集合的常用方法
==========================

'1)打開一個表
'------------

Sql = "select * from 表名" 'SQL查詢語句
Set rs = New ADODB.Recordset '新建一個實例
rs.Open Sql, conn '使用 Open 方法打開數據庫中的一個表

'注意,這種打開方式只能使用 rs.MoveNext (即,向後移動行座標)而不能像其他方向,並且不能修改數據內容
'
'rs.Open Sql, conn,1 '雖然只加了個“1”,但這種方法可以向任何方向移動行座標。
'
'以下參數代表了這個可選值的含義
'0 = adOpenForwardOnly (默認值)打開僅向前類型遊標。
'1 = adOpenKeyset        打開鍵集類型遊標。
'2 = adOpenDynamic       打開動態類型遊標。
'3 = adOpenStatic        打開靜態類型遊標。
'
'雖然使用以上方法可以可以實現行座標(遊標)的任意移動,但是仍然無法寫入數據。因此需要進一步的對Open 方法進行完善

'rs.Open Sql, conn, 1, 3   '後面的3是確定讀寫權限的

'以下參數代表了這個可選值的含義
'1 = adLockReadOnly         (默認值)只讀 — 不能改變數據。
'2 = adLockPessimistic      保守式鎖定(逐個) — 在編輯時立即鎖定數據源的記錄。
'3 = adLockOptimistic       開放式鎖定(逐個) — 只在調用 Update 方法時才鎖定記錄。
'4 = adLockBatchOptimistic 開放式批更新 — 用於批更新模式(與立即更新模式相對)。
'
'2)讀寫數據
'----------
'增加一行記錄並對新記錄的內容進行修改並保存可以如下寫法
rs.AddNew '增加一行記錄
rs("...")="..."     '數據讀寫操作
...
rs.UpDate '保存寫入資料,如果使用只讀權限,則不能使用這個方法
rs.Close   '這個方法用來關閉你所代開的表,如果不使用這個方法也可以,但是數據庫仍然認爲你在對標進行鎖定,可造成數據庫負擔過重

2、對數據進行篩選和排序
=======================
Sql = "select * from 表名" 'SQL查詢語句
'以上爲打開一個表的所有內容

Sql = "select top 50 * from 表名" 'SQL查詢語句
'以上爲只打開前50行的記錄

Sql = "select top 50 列名1,列名2,列名5 from 表名" 'SQL查詢語句
'以上爲只打開前50行的記錄,並且只打開第1、2、5列數據

Sql = "select * from 表名 where 列名1='" & 字段 & "'" 'SQL查詢語句
'以上爲一個簡單的篩選,表示打開的內容必須符合[列名1='" & 字段 & "'"]的內容
'需要注意的是,數據庫列的類型必須匹配,比如字符串類型需要以單引號括起
'而數字類型則不能用單引號括起
'另外SQL語句還支持通配符,例如 列名1 like '%" & 字段 & "%'" 表示包含[字段]
'在表達式中的匹配
'? _(下劃線) 任何單一字符
'* or %         零個或多個字符
'#              任何單一數字(0 — 9)
'[charlist]     任何在字符表中的單一字符
'[!charlist]    任何不在字符表中的單一字符
'注:根據數據庫的不同?、_和*、%的應用有所差別,比如SQL只使用% 和 _ 分別代表多個字符和單一字符

Sql = "select * from 表名 where 列名1='" & 字段 & "' ORDER BY 字段1 ASC" '對查詢結果進行升序排列
Sql = "select * from 表名 where 列名1='" & 字段 & "' ORDER BY 字段1 DESC"   '對查詢結果進行降序排列
Sql = "select * from 表名 where 列名1='" & 字段 & "' ORDER BY 字段1 DESC, ORDER BY 字段2 DESC"   '對查詢結果進行多維降序排列(速度奇慢,不推薦使用)

3、Recordset集合的常用屬性方法
==============================
rs.BOF         '是否遊標在最上邊
rs.EOF         '是否遊標在最下邊
rs.RecordCount     '記錄集的行數(如果使用像前類型的遊標,可能返回不準確)
rs.AddNew     '新建一行記錄
rs.Update     '保存當前行被修改的記錄
rs.Delete     '刪除當前行
rs.Close     '關閉記錄集

4、Fields集合的一些屬性的解釋
=============================
'以下爲簡寫,正常情況需要rs.Fileds.。。。但是Fields屬於Recordset的一個默認集合,因此可以省略

rs()   '括號內可以是列名也可以是列的序號例如:rs("姓名")、rs(3) 都是是可以的

rs(3).Name   '返回列名
rs(3).Type   '返回列的類型
rs(3).value '返回當前行的值
rs.Fields.Count '返回列數

   補充:

ADO打開EXCEL示例

Dim Conn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim i As Integer
Dim sql As String

Private Sub Form_Load()
On Error Resume Next
strName = "f:/book.xls"    'EXCEL文件名
strSheetName = "sheet1"    'EXCEL表名

Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False;Data Source=" & strName & ";Extended Properties='Excel 8.0;HDR=Yes'"                 '連接EXCEL文件

sql = "select * from [" & strSheetName & "$]"                        '打開EXCEL表
rs.Open sql, Conn, 3, 3

MsgBox rs.RecordCount
Do Until rs.EOF
      For i = 0 To rs.Fields.Count - 1
      List1.AddItem rs.Fields.Item(i).Name
      If Not IsNull(rs.Fields.Item(i).value) Then
      List2.AddItem rs.Fields.Item(i).value
      Else
      rs.Update
      rs.Fields.Item(i).value = "peter" & i
      rs.Update
      End If
      Next i
rs.MoveNext
Loop
End Sub

發佈了20 篇原創文章 · 獲贊 3 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章