? ? ? ? ? ? ?做完學生管理系統,經過師傅的驗收,發現對最初的概念了解相當不深刻!又反過頭對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
總結來說,建立連接分三步走戰略:打開–執行(增刪改查)–關閉
?以上就是數據庫的建立與鏈接問題的內容,更多相關內容請關注PHP中文網(www.php.cn)!