VB6基本數據庫應用(四):數據的提取,新增和修改

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


數據的提取,新增和修改

這一章的內容跟SQL沒關係了,目前爲止SQL的任務已經完成,就是爲我們打開一個記錄集。當然以後你會見識到他強大的能力。

 

先說一下界面怎麼配置,提取出來的數據總是要顯示的。爲了簡單,我將使用兩個List並排在一起顯示數據。一個List顯示一個字段的內容,本來就只有StudnetIDStudentName兩個字段,所以顯示起來很方便,也容易理解。一步步來吧。當前的窗體我們沒做過任何調整,我一直覺得默認的字體太小了,改一下,改成小四,如下圖所示:

改完點擊確定再開始佈置控件,那麼標準控件的字體會跟隨窗體默認爲小四(只有標準控件是這樣,也就是VB已啓動就有的控件,不包括ActiveX控件,因爲ActiveX控件的內部實現方式不盡相同,可能沒有設置和容器,即窗體同步)

放置Label1Label2ListBox1ListBox2。如下圖擺放:


分別修改Label1Label2Caption屬性爲“StudentID"”StudentName“。兩個List就不動了。待會輸出的時候是按照List1的第一行和List2的第一行在一起是一個記錄,List1的第二行和List2的第二行在一起又是另一個記錄這樣看的。

 

在介紹了ADOList1ConnectionRecordset對象之後,我繼續介紹需要用到的第三個對象Field,由第一章的介紹我們知道這是字段對象,我們將通過它的Value屬性取回當前記錄的某一個字段的值,這就是實現的原理。

 

這個對象不需要像之前的那兩個那樣set xxx=new XXX來創建,因爲這個對象和記錄集是掛鉤的,當Recordset對象成功調用Open之後,Recordset對象就會自行創建Fields(字段集)對象以及Field對象。可能大家要暈了,怎麼又多一個Fields(字段集)對象??要記住整套ADO對象是等級式的,ConnectionRecordsetFields再到Field。之所以要出現一個Fields對象,是因爲很明顯,多數時候字段都不止一個,爲了能夠管理所有的字段,Fields對象就相當於管理者。我們通常都是使用字段名作爲索引要求Fields對象返回對應的Field對象引用的。

 

既然我們明白了原理,那麼多說無益,代碼一來我表述的不清楚的就迎刃而解了。當前暫且不使用按鈕神馬的,還是在Load裏寫代碼即可,接着以前的代碼

VB代碼開始:

 '數據的提取
List1.AddItem rec.Fields("StudentID").Value
    'Fields對象,括號裏的是索引(Index),索引填寫的內容爲字段的名稱
    'Item屬性是Fields對象的默認屬性,他的一個參數就是Index
    'Fields("Student")表示一個Field對象
    'Fields("Student")等價於
    'rec.Fields.Item ("Student")或
    'rec.Fields! ("Student")
    '!表示默認屬性

    
List2.AddItem rec.Fields("StudentName").Value

VB代碼結束:

代碼運行的結果如圖:


和當初數據庫的內容對比一下:


沒錯,第一行確實是這個。那麼其他呢??實際上Recordset對象提供Move,MoveFirst,MoveLast,MoveNext,MovePrevious方法來讓我們來回移動記錄,分別是讓我們指定的條目,第一條,最後一條,下一條或上一條成爲當前的記錄。這樣我們就很方便了。同時,Recordset對象提供EOF屬性讓我們判斷當前記錄是否已經是最後一條記錄了,當Eof爲True時即爲最後一條記錄。這樣我們稍微修改一下代碼就能讓全部的記錄顯示出來,將上面的代碼修改如下:

VB代碼開始:

'數據的提取
Do Until rec.EOF = True
    List1.AddItem rec.Fields("StudentID").Value
        'Fields對象,括號裏的是索引(Index),索引填寫的內容爲字段的名稱
        'Item屬性是Fields對象的默認屬性,他的一個參數就是Index
        'Fields("Student")表示一個Field對象
        'Fields("Student")等價於
        'Fields.Item ("Student")或
        'Fields! ("Student")
        '!表示默認屬性,是默認屬性的缺省表示法,對所有的對象都適用,但不建議使用

        
    List2.AddItem rec.Fields("StudentName").Value
    '移動下一條記錄爲當前記錄

    rec.MoveNext
Loop

VB代碼結束

這樣就能全部顯示出來了,結果如下:


當我們做好了顯示。我們就必須考慮一下怎麼新增,之所以不說怎麼編輯,這是因爲編輯和新增很像,少個語句而已。來說怎麼新增吧。


新增的原理先說一下。就是調用Recordset對象的AddNew屬性,然後通過給Field的Value屬性賦值,然後調用Recordset對象的Updata方法就可以更新了。要更新,當前就不能再僅用List和Label了,加點東西吧,在List1和List2下面各加一個文本框,分別就對應StudentID和StudentName的數據,然後加一個CommandButton,改Caption爲“新建”。改好的界面如下:


知道了原理,我們直接出代碼吧,在新建按鈕的Click事件中添加如下代碼:

VB代碼開始:

Private Sub Command1_Click()
'指示當前爲新建模式
rec.AddNew
'爲Field的Value賦值以確定新的紀錄的各個字段的內容
rec.Fields("StudentID").Value = Text1.Text
rec.Fields("StudentName").Value = Text2.Text
'更新表
rec.Update


'----------------------------
'下面代碼讓新增的數據顯示出來
'----------------------------
'移動最後一條記錄爲當前記錄

rec.MoveLast
'在List中添加當前新增的記錄
List1.AddItem rec.Fields("StudentID").Value
List2.AddItem rec.Fields("StudentName").Value
End Sub

VB代碼結束

在Text1輸入156443(其實可以是隨便的數字,多少位都可以,量你不會超過308位,也就是StudentID字段所設置Double類型所支持的1.79769313486231*(10^308) 的正值這個數量級),在Text2輸入霍金(其實也是隨便什麼都可以的),然後單擊“新建”,結果如圖:


在“下面代碼讓新增的數據顯示出來”這句註釋的後面,是讓新增的數據顯示在兩個List上的代碼,新增的數據總是在最後一條記錄的,所以我使用MoveLast語句移到最後就可以了。實際上在新增之後能夠立即調用MoveLast語句移到最後一條記錄然後讀取出來顯示,這也說明了Updata方法之後數據就已經保存了,不需要額外的保存。


而至於編輯,那就簡單了,僅僅是比新增少了一個AddNew方法的調用。通過Recordset對象提供的Move,MoveFirst,MoveLast,MoveNext,MovePrevious方法來移動記錄到當前記錄,然後直接爲Field的Value屬性賦值,然後和新增一樣調用Update方法就可以了。這裏就不再贅述。


下一章將講述如何篩選數據初步,屆時我們將再次體會到SQL:Select語句強大的能力。本套教程未完,待續。  

下一章:數據的查找與篩選 http://blog.csdn.net/jiluoxingren/article/details/9739069


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