VB6基本數據庫應用(三):連接數據庫與SQL語句的Select語句初步

同系列的第三篇,上一篇在:http://blog.csdn.net/jiluoxingren/article/details/9455721


連接數據庫與SQL語句的Select語句初步

”前文再續,書接上一回“我就不說了(額~不知不覺間說了,失誤……)。數據庫我們已經建好了,重提一下上一章的結果,我們最後建立了一張Student的表,其中有StudentID(數字的雙精度類型)和StudentName(文本類型。補充一下,2013中有【長文本】和【短文本】,人名不會很長,根據上一章選擇儘量小的數據類型的規則,這裏就選【短文本】就可以了)。儘管我想讓大家有更多想象的空間,不過爲了好說明,還是統一一下數據庫的記錄內容吧,無論Access 2003還是2013,都是這些內容:

StudentID StudentName
123456 林則徐
562893
葉劍英
662356
黃飛鴻
添加好之後的Access界面如下:

(2003版)

(2013版)

其實數據庫裏面什麼數據都無所謂,不過我把我當前的數據庫內容告訴大家,待會代碼寫出來,運行之後的效果就顯而易見了。


那麼真正的代碼編寫就開始了。跟隨我的步伐吧。啓動VB6,新建【標準EXE】工程,這個不詳細截圖了。然後選擇【工程】菜單的【引用】菜單項,打開引用對話框,選中【Microsoft ActiveX Data Object 6.0 Library】(不是6.0也可以),如圖:


OK,要引用的只有這個,按確定吧。看吧,並不麻煩。首先,我們來認識幾個對象,按下F2(或者選擇【視圖】菜單的【對象瀏覽器】菜單項,將【<所有庫>】改成【ADODB】,這樣我們就能查看剛纔我們引用的那個庫(那個庫就名爲ADODB,完整的名稱是ActiveX Data Object DataBase,簡稱ADO。以後我將使用ADO這個簡稱)對象瀏覽器如圖:


可以看到左變有一列,許多黃色的圖標那一列就是對象的名稱(具體的對象瀏覽器的用法參見這篇文章:單擊這裏)。選擇了ADODB這個庫之後,我們來看一下其中的Connection這個類,如下圖:

Connection,意爲“連接”,所以它的作用就是連接數據庫,他最常用的方法就是Open(當然最後要搭配Close方法了)。通過上圖,我們就可以查看到Open方法有4個參數。每個參數都帶有[],[]表示的是可選參數,不過真正的可選是後面三個,第一個的可選是有條件的,天底下哪有那麼方便的事啊~。既然後面三個參數是可選的,那請無視他好了。我們來討論第一個參數,第一個參數是ConnectionString,字符串(String)類型。這裏我們要傳入的數據有一定的格式,舉例如下:


有密碼形式:
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=E:\Sample.mdb;Jet OLEDB:Database Password=123456;Persist Security Info=False

沒有密碼形式:

Provider=Microsoft.Jet.OLEDB.4.0;Data Source=E:\Sample.mdb;Persist Security Info=False


這個對於Access的數據庫都是差不多這樣用的,要改的就是紅色字的部分。前面那個是數據庫的路徑,後面那個是密碼。雖然大多這樣用,不過還是要告訴大家這句話到底是什麼意思,不然大家學的不明不白。“Provider=”是開頭,Provider意爲“提供者”,這裏指的是數據庫引擎,後面接着的“Microsoft.Jet.OLEDB.4.0”就是數據庫引擎的名稱。“Data Source=”表示的是數據源,那當然後面毫無疑問接的是數據庫的目錄了。然後的“Jet OLEDB:Database Password=”是向數據庫引擎指明數據庫的密碼是這個。最後的“
Persist Security Info=False”是關於數據庫安全性的說明,說明數據庫引擎是否在打開數據庫之後保存安全性信息,實際上簡單來說就是是不是把密碼保存下來,不解釋了,設置爲False就是了。


如果要看看其他的數據庫引擎,可以選擇【工程】菜單的【部件】菜單項,選擇其中的【Microsoft ADO Data Control 6.0 (SP6)】,然後按照這個地址裏的介紹去操作。不過這裏我要說的是,我所說的數據庫操作是全代碼控制的,不要看着到控件就想去轉成用控件,有不少找到我希望我幫忙的人,都反映這個控件有這樣那樣的問題,所以我不建議使用它。


好,解釋了這些之後,我們來寫代碼,連接數據庫的代碼很簡單,如下:

VB代碼開始:

Dim Cnn As ADODB.Connection

Dim rec As ADODB.Recordset

Private Sub Form_Load()'創建新的Connection對象

Set Cnn = New ADODB.Connection

'注意要記住該數據庫目錄爲你數據庫文件當前的位置

Cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=E:\Sample.mdb;Persist Security Info=False"

End Sub

VB代碼結束:

一般數據庫在整個程序的運行中連接一次就夠了,所以寫在Load事件裏,或者寫在Main函數裏(如果是設置了從Main函數啓動的話)。就當前的代碼而言,如果連接上了,窗口就顯示出來,因爲Load裏面的代碼成功執行完了嘛,只不過顯示出來之後就沒有別的變化了,不着急,慢慢來。如果沒有找到數據庫的話,就會發生錯誤號爲-2147467259的錯誤。如下圖:


留意上圖的盤符,我將數據庫文件放在E盤根目錄下,而故意將盤符改成C盤,這樣大家就能夠看到如果找不到數據庫文件會怎麼樣。大家知道就行,這個就別試了。


SQL語句之Select語句初步

連接好之後我們就要嘗試讀取數據庫的內容了。看到這個子標題,大家可能一頭霧水,不知道來龍去脈,雖然我說過我要使用SQL語句來操作數據庫,可是這明明是在VB的環境裏,怎麼用SQL呢?甚至有人會害怕,我並不會SQL啊,怎麼辦,我要去先把SQL學了再來看嗎??


回來吧你~跑那麼遠幹嘛?放心,在VB裏一樣可以用SQL,說他行他就行,不行也得行。不會SQL?其實在VB裏操作數據庫集會幾個簡單的SQL語句就是了,我這裏會詳細解釋我用到的SQL語句。下面開始吧。這一節要講述的是SQL:Select語句(以後我要表述SQL的語句的時候,我都會在前面加上“SQL:”以示和VB的語句進行區分),不是VB裏的Select Case多重選擇語句。SQL:Select語句是一個非常強大的語句,它包含有複雜的語法,可以實現許多的功能,包括最基本的,也是這個語句的目的,就是提取數據,還有條件篩選,排序等等。這個語句的使用,在我的SQL書立刻使用了整整一章去說啊,所以放心,我不會在這一章教程裏將他的功能說完;也請定下心來,複雜的語句也有簡單的用法。先來點簡單的開開胃。SQL:Select語句的最最基本的語法如下:


SELECT fieldnamelist FROM tablename


我習慣了SQL語句的關鍵字全部大寫,其實SQL對大小寫不敏感,你大寫也可以,小寫也可以。這不是SQL:Select語句的完整語法,少了很多東西的,不過這是SQL:Select語句能夠起作用的最簡短的語法。來解釋一下參數,fieldnamelist 是字段名列表。有些時候我們提取數據並不需要一個記錄的全部字段,雖然我說過Access中一行,也就是一個就是一個整體,但是就像一個班集體不需要全部人在一起做值日(別跟我擡槓說大掃除,我暈……尷尬)一樣,確實我們用的時候不一定每一次都要一個記錄的全部字段。這個列表就是提供字段選擇的功能。就之前建立的數據庫爲例(其實在做這個教程裏,如無特殊的說明都是這樣),Student表有StudentID和StudentName兩個字段,我只要StudentName字段就夠了,那我可以在fieldnamelist 的位置填寫StudentName。如果我兩個都要就兩個都寫,之間用逗號隔開。我怎麼一說可能馬上有人來氣,如果我有100個字段,我全要,那我真的把100個字段名抄上去啊??怎麼可能怎麼笨,對於全部字段都要這個情況,SQL提供了一個很簡單的辦法,就是在fieldnamelist 的位置輸入一個*,就是這樣代替了所有的字段名。


然後再來說一下tablename,這是表的名稱。不解釋了,當前的當然是Student了。其實這個語句這樣看起來很簡單,按照英文直接翻譯就是“從tablename表選擇fidenamelist裏的這些字段”。提醒一下英語不好的童鞋,這裏是FROM(從……),不是FORM(表單),別打VB的Form(VB裏譯作窗體)打順手了(好吧,我承認我經常打錯)。SQL:Select語句最簡單的用法解釋完了,可是在VB的環境裏這個語句要寫在哪呢?有沒有留意剛纔數據庫連接時候給出的源代碼,上面還有一個聲明:

VB代碼開始:

Dim rec As ADODB.Recordset

VB代碼結束:

這個聲明在連接數據庫的時候沒用上。先別急着往下看,認真看這個聲明,有個單詞很熟悉的,忘了?看看第一篇數據庫基礎那裏,那裏我說到了一個叫做“記錄集”的名詞,還記得他的英文嗎?沒錯,就是Recordset。在這VB裏,Recordset是ADO的一個對象,他就是負責啓動記錄集功能,打開表的。我們要用到的也是Recordset的Open方法,請自行打開對象瀏覽器查看它的聲明,這裏我直接解釋參數的含義了。


同樣Recordset的Open方法的所有參數都帶有[],都是可選的,不過都說了天下沒那麼方便的事,只有後三個是真正可以省略的,前面兩個還是要填的。


第一個參數是Source,沒指明類型。他可以接受很多的東西,例如……一個SQL語句文本。哈哈,SQL語句是在這裏用的,以後我所說到的SQL語句絕大多數是以文本的形式傳入這裏。第二個參數是ActiveConnection,意爲“活動的連接”,那我們之前不是創建了一個名爲Cnn的Connection對象嗎,就是他了,直接把Cnn傳進去就是了。後面的三個參數雖然現在忽略,後面還是會說的。那麼好作爲演示,我就在Load事件裏,剛纔連接數據庫的代碼後面加入打開數據集的代碼,如下:

VB代碼開始:

'創建新的Recordset對象

Set rec = New ADODB.Recordset

'打開student表的全部字段

'adOpenKeyset, adLockOptimistic。鍵集遊標和開放式鎖

'爲了下一章能夠正常增刪改,所以這裏用的是鍵集遊標

'在第十篇中簡介了這兩個參數的用法

rec.Open "SELECT * FROM Student", Cnn,adOpenKeyset, adLockOptimistic


VB代碼結束:

表是打開了,接着就是到真正把數據拿出來的時候了,賣個關子。在下一章,我將講述數據的提取,新增和修改。本系列教程未完,待續。


下一章:數據的提取,新增和修改 http://blog.csdn.net/jiluoxingren/article/details/9633139

發佈了47 篇原創文章 · 獲贊 178 · 訪問量 56萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章