大鳥的學(xué)習(xí)樂園
          路漫漫其修遠(yuǎn)兮,吾將上下而求索
          posts - 26,comments - 27,trackbacks - 0

          使用ADO控件可以方便的在VB6中訪問ODBC數(shù)據(jù)庫,但是通過直接放置ADODS控件來獲得ADO的數(shù)據(jù)連接比較麻煩,我們可以在VB工程中創(chuàng)建一個(gè)公共數(shù)據(jù)模塊,將ADO控件的初始化、建立連接、關(guān)閉連接等操作都寫到函數(shù)中,這樣就可以在工程的其他模塊中共享調(diào)用這個(gè)ADO連接。
          一次完整的ADO調(diào)用操作分為如下幾個(gè)步驟:
          1.打開ADO到數(shù)據(jù)庫的連接,初始化ADO RECORDSET集。
          2.通過寫入SQL語句執(zhí)行查詢并返回查詢結(jié)果RECORDSET集;或者可以通過寫入SQL語句執(zhí)行相應(yīng)數(shù)據(jù)庫操作。
          3.釋放RECORDSET集,關(guān)閉數(shù)據(jù)庫連接。
          需要注意的是,每個(gè)動(dòng)態(tài)創(chuàng)建的ADO同時(shí)只能被一個(gè)過程調(diào)用,如果需要進(jìn)行多表并行操作,可能需要在公共數(shù)據(jù)模塊中建立多個(gè)動(dòng)態(tài)ADO。
          下面是相關(guān)的代碼:

          '-----------------------------------------------------------------
          '如下代碼保存在名為my.bas的工程模塊中
          Public CONN As Adodb.Connection        '定義ADO CONNECTION對象
          Public RS As Adodb.Recordset           '定義ADO RECORDSET對象
          '****************************
          '打開數(shù)據(jù)庫連接
          '****************************
          Function ConnOpen()                   
            Dim ASTR As String
            Set CONN = New Adodb.Connection
            ASTR = GetDatabasePath  'MDB文件數(shù)據(jù)庫路徑
            CONN.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & ASTR & ";Persist Security Info=False"
            '本例的ODBC連接為JET4.0的直接到MDB文件的連接,如果使用ODBC數(shù)據(jù)源可以使用如下CONNECTION串:
            'Provider=MSDASQL.1;Password="";Persist Security Info=True;Data Source=數(shù)據(jù)源名稱;Initial Catalog=數(shù)據(jù)表庫名稱
            CONN.Open
            Set RS = New Adodb.Recordset
            With RS Do
              ActiveConnection = CONN
              CursorType = adOpenDynamic
              LockType = adLockOptimistic
            End With
          End Function
          '****************************
          '關(guān)閉數(shù)據(jù)庫
          '****************************
          Function ConnClose()                       
             Set RS = Nothing
             CONN.Close
             Set CONN = Nothing
          End Function

          '**********************************************************
                 獲得數(shù)據(jù)庫路徑
          本例數(shù)據(jù)庫保存在程序目錄下的DBS子目錄中,名為db1.mdb
          '**********************************************************
          Public Function GetDatabasePath() As String
              Dim sPath As String
              If Right$(App.Path, 1) = "\" Then
                  sPath = App.Path + "dbs\"
              Else
                  sPath = App.Path + "\dbs\"
              End If
             
              GetDatabasePath = sPath + "db1.mdb"
          End Function
          'End of my.bas
          '-----------------------------------------------------------------

          如下示例代碼為my.bas的使用方法:
          '-----------------------------------------------------------------
          '使用RS對象執(zhí)行SELECT語句
          'TableName和FieldName分別為表名和字段名
          '查詢結(jié)果保存在數(shù)組s中
          Private Sub RunSelectCommand()
              Dim s(99) as String
              Dim i as Integer
              i=0
              Call my.ConnOpen
                  my.RS.Open "SELECT * FROM TableName"
                  While Not RS.EOF
                      i=i+1
                      If Not isNull(my.RS!FieldName) Then s(i)=Cstr(my.RS!FieldName)
                      RS.MoveNext
                  Wend
              Call my.ConnClose
          End Sub
          '使用CONN對象執(zhí)行UPDATE/DELETE/INSERT語句
          'SQL語句放在變量sSQL中
          Private Sub RunSqlCommand()
              Dim sSQL as String
              Call my.ConnOpen
                  my.CONN.Execute sSQL
              Call my.ConnClose
          End sub
          '對于DATAGRID和DATAREPORT這些需要DATASOURCE的控件可以做如下操作
          '使用SELECT語句打開RS的數(shù)據(jù)集
          Set OBJ.Datasource=my.RS
          '---------------------------------------------------------------------
          這個(gè)方法對于開發(fā)簡單小型的MIS系統(tǒng)很實(shí)用,也可以在報(bào)表和數(shù)據(jù)表中使用,缺點(diǎn)是在多表操作和函數(shù)嵌套調(diào)用時(shí),一個(gè)動(dòng)態(tài)ADO對象不能同時(shí)執(zhí)行兩個(gè)工作,后一個(gè)寫入的SQL語句會(huì)覆蓋先寫入的SQL語句,當(dāng)在回到前一個(gè)過程時(shí),會(huì)因?yàn)樽侄握也坏蕉鲥e(cuò)。因此如果可能需要進(jìn)行多表操作,可以嘗試多定義幾個(gè)CONN 和RS對象。

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

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


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 新和县| 澎湖县| 海口市| 凤凰县| 元氏县| 互助| 龙胜| 延吉市| 博爱县| 白朗县| 石渠县| 雅安市| 日土县| 正定县| 周口市| 邯郸市| 康定县| 三河市| 龙海市| 柳林县| 全州县| 长顺县| 天峻县| 昌邑市| 上饶县| 临海市| 灵川县| 中西区| 舒兰市| 呼和浩特市| 富裕县| 四平市| 青神县| 游戏| 嘉善县| 滨海县| 乐昌市| 河曲县| 乳源| 仁布县| 黄山市|