1. 程式人生 > >資料庫的建立與連結問題

資料庫的建立與連結問題

             做完學生管理系統,經過師傅的驗收,發現對最初的概念瞭解相當不深刻!又反過頭對5例項簡單看了一下,老師常說,學習最重要的是反覆,通過這次觀看,重新對基本概念有所瞭解。

首先看幾個專業名詞:ADO---activex data object動態資料物件通過OLE DB(object linking and embed中文:物件連線與嵌入,是底端程式介面)實現對不同資料的訪問。

當時師傅問我關於ADO的物件時,一下子懵了,原來我們在建立資料庫定義的connection,recordset等都是ado 的物件,它共有7個物件,在這次的學生資訊管理系統中最常見的就是上面那倆,3個獨立物件:recordset,connection,command!還有4個附屬物件:field,parameter,property,error

OLE DB由3個部分組成:資料提供者,資料消費者,服務元件。資料提供者是類似於SQL Serser,ODBC提供資料的程式,VB建立的程式就是一種典型的資料消費者,它是利用資料提供者提供的資料建立的資料應用程式。服務元件負責連線資料提供者與資料消費者。

五例項當中應用了vb外界程式的視覺化管理器建立的micrsoft access資料庫(其檔案字尾名為.mdb),而學生資訊管理系統的資料庫是利用SQL Sever建立的(字尾名為.sql),資料庫類的應用程式第一步是建立資料庫!第二步,建立ADO引用,在vb程式裡直接點選工程下的引用選擇microsoft activex data objects 2.6 library即可!第三步,用程式碼建立連線。下面讓我們看一下資料庫的不同連線方式對比:

1.直接連線access資料庫

dim Objcn as new connection,objRs as new recordset

objcn.connectionstring="Prvider=Microsoft.jet.OLEDB.3.5.1;" & _

"data sourse=資料遠檔案路徑"         '連線資料提供者與資料來源

objcn.open

       strSQL=“select ……from …… where……”

set objrs.activeconnection=objcn   '將資料庫記錄集與資料來源相匹配

objrs.open(strSQL)      '記錄集開啟

       .                       ‘進行資料庫的增刪改查操作

objcn.close         ‘關閉資料庫

set objrs=Nothing

set objcn=Nothing

2. 利用ODBC連線access資料庫,ODBC有3種資料來源連線方式,分別為使用者DNS,系統DNS,檔案DNS,學生資訊管理系統利用的正是檔案DNS的新增。

set objcn=new connection

objcn.open="dsn=資料庫檔名"

set objrs=new recordset

                .

objcn.close

set objrs=nothing

set objcn=nothing

3.利用ado data控制元件建立資料庫連線,這種方法相對簡單,只要從控制元件屬性裡面進行連線即可。

看完了5例項的連線方法,解析一下對學生管理系統連線於登陸時的程式碼:

1.在登陸窗體中,為走向專業化,往往資料庫的登入名設定為系統使用者名稱,所以在登陸窗體的使用者名稱部分自動獲得系統使用者,在開頭部分呼叫API函式:

Private Declare Function GetUsername Lib "advapi32.dll" Alias "GetUserNameA" (ByVal lpBuffer As String, nSize As Long) As Long

窗體載入部分獲得系統使用者名稱:

Private Sub Form_Load()
    Dim sbuffer As String
    Dim lsize As Long
    
    sbuffer = Space$(255)  '因無法確定系統使用者名稱的長度,先開闢一個255(最大值)空格字元控制元件
    lsize = Len(sbuffer)   'lsize盛放sbuffer字串的真是長度
    Call GetUsername(sbuffer, lsize) 
    'api中字串作函式,需要提前確定大小
    
    If lsize > 0 Then
        txtusername.Text = Left$(sbuffer, lsize)
    Else
        txtusername.Text = vbNullString
        '沒有字串
    End If
    
    ok = False
    micount = 0  ’用於登陸次數的標記
 End Sub

2.在確認按鈕中建立連線:

Private Sub cmdOK_Click()
    Dim txtSQL As String
    Dim mrc As ADODB.Recordset '用於儲存資料來源記錄集
    Dim MsgText As String


    
    UserName = ""     '先將登入名滯空
    If Trim(txtusername.Text = "") Then     '確認使用者名稱輸入框不為空
        MsgBox "沒有這個使用者,請重新輸入使用者", vbOKOnly + vbExclamation, "警告"
        txtusername.SetFocus
    Else
        txtSQL = "select * from user_info where user_id ='" & txtusername.Text & "'"
        Set mrc = ExecuteSQL(txtSQL, MsgText)    '
 呼叫模組當中的executesql函式建立資料庫連線
        If mrc.EOF Then
            MsgBox "沒有這個用
戶,請重新輸入使用者", vbOKOnly + vbExclamation, "警告"
            txtusername.SetFocus
        Else                                    '確認密碼
            If Trim(mrc.Fields(1)) = Trim(txtpassword.Text) Then
                ok = True
                mrc.Close
                Me.Hide
                UserName = Trim(txtusername.Text)
                frmmain.Show
            Else
                MsgBox "輸入密碼不正確,請重新輸入!", vbOKOnly + vbExclamation, "警告"
                txtpassword.SetFocus
                txtpassword.Text = ""
            End If
        End If
    End If
    
    micount = micount + 1          '值允許3次輸入
    If micount = 3 Then
        Me.Hide
    End If
    Exit Sub
    
End Sub
 

3.理解一下執行函式excutesql函式的連線方式。

Public Function ConnectString() As String
    ConnectString = "FileDSN=student.dsn;UID=sa;PWD=123" '檔案源,登入名,驗證密碼
End Function
Public Function ExecuteSQL(ByVal SQL As String, MsgString As String) As ADODB.Recordset


   Dim cnn As ADODB.Connection
   Dim rst As ADODB.Recordset
   Dim sTokens() As String
   
   'On Error GoTo ExecuteSQL_Error
   
   sTokens = Split(SQL) '該函式定義將sql語句中的詞以空格為分解符分解開放進一個數組裡
   Set cnn = New ADODB.Connection '實體化,連線資料來源
   cnn.Open ConnectString     '開啟資料來源
   
   If InStr("INSERT,DELETE,UPDATE", UCase$(sTokens(0))) Then       '比較確定sql資料開始單詞是否為增,刪,改
      cnn.Execute SQL   '執行SQL語句
      MsgString = sTokens(0) & " query successful"
      '雖然MsgString不是返回值,但傳遞方式是ByRef,實參地址和這個地址相同
   Else
      Set rst = New ADODB.Recordset    '例項化記錄集
      rst.Open Trim$(SQL), cnn, adOpenKeyset, adLockOptimistic   '開啟要執行的內容sql,連線資料來源,遊標型別:鍵集遊標,視窗值固定大小
      '得到臨時表,遊標指向第一條記錄
      'get RecordCount,
      Set ExecuteSQL = rst
      MsgString = "查詢到" & rst.RecordCount & _
         " 條記錄 "
   End If
   
ExecuteSQL_Exit:  ‘關閉連線
   Set rst = Nothing
   Set cnn = Nothing
   Exit Function
   
ExecuteSQL_Error:
   MsgString = "查詢錯誤: " & _
      Err.Description
   Resume ExecuteSQL_Exit
End Function

總結來說,建立連線分三步走戰略:開啟--執行(增刪改查)--關閉