數據庫的建立與鏈接問題

? ? ? ? ? ? ?做完學生管理系統,經過師傅的驗收,發現對最初的概念了解相當不深刻!又反過頭對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)!

? 版權聲明
THE END
喜歡就支持一下吧
點贊13 分享