大鳥的學習樂園
          路漫漫其修遠兮,吾將上下而求索
          posts - 26,comments - 27,trackbacks - 0

           

          下面是我所掌握的使用ADO對數據庫操作的一些常用方法,主要是提供給初學者作為參考,有不對的地方請指正。如有補充不勝榮幸

          準備工作

          ========

          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 '返回列數

          posted on 2008-11-26 07:30 大鳥 閱讀(310) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 五指山市| 进贤县| 金阳县| 拜泉县| 文成县| 信丰县| 新乐市| 光泽县| 牟定县| 七台河市| 潍坊市| 九龙城区| 满城县| 罗甸县| 隆昌县| 合山市| 太白县| 元氏县| 曲阳县| 新余市| 临颍县| 天镇县| 正镶白旗| 长治市| 宾川县| 财经| 监利县| 邹城市| 兴安盟| 长沙市| 台安县| 肇庆市| 平邑县| 高州市| 大新县| 遂溪县| 崇礼县| 芦溪县| 上思县| 青海省| 宽城|