1. 程式人生 > >VB6基本資料庫應用(三):連線資料庫與SQL語句的Select語句初步

VB6基本資料庫應用(三):連線資料庫與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://iask.sina.com.cn/h-fk

瀋陽性病醫院哪家好