同系列的第四篇,上一篇在:http://blog.csdn.net/jiluoxingren/article/details/9474661
數據的提取,新增和修改
這一章的內容跟SQL沒關係了,目前爲止SQL的任務已經完成,就是爲我們打開一個記錄集。當然以後你會見識到他強大的能力。
先說一下界面怎麼配置,提取出來的數據總是要顯示的。爲了簡單,我將使用兩個List並排在一起顯示數據。一個List顯示一個字段的內容,本來就只有StudnetID和StudentName兩個字段,所以顯示起來很方便,也容易理解。一步步來吧。當前的窗體我們沒做過任何調整,我一直覺得默認的字體太小了,改一下,改成“小四”,如下圖所示:
改完點擊確定再開始佈置控件,那麼標準控件的字體會跟隨窗體默認爲小四(只有標準控件是這樣,也就是VB已啓動就有的控件,不包括ActiveX控件,因爲ActiveX控件的內部實現方式不盡相同,可能沒有設置和容器,即窗體同步)
放置Label1和Label2;ListBox1和ListBox2。如下圖擺放:
分別修改Label1和Label2的Caption屬性爲“StudentID:"和”StudentName“。兩個List就不動了。待會輸出的時候是按照List1的第一行和List2的第一行在一起是一個記錄,List1的第二行和List2的第二行在一起又是另一個記錄這樣看的。
在介紹了ADO的List1的Connection和Recordset對象之後,我繼續介紹需要用到的第三個對象Field,由第一章的介紹我們知道這是字段對象,我們將通過它的Value屬性取回當前記錄的某一個字段的值,這就是實現的原理。
這個對象不需要像之前的那兩個那樣set xxx=new XXX來創建,因爲這個對象和記錄集是掛鉤的,當Recordset對象成功調用Open之後,Recordset對象就會自行創建Fields(字段集)對象以及Field對象。可能大家要暈了,怎麼又多一個Fields(字段集)對象??要記住整套ADO對象是等級式的,Connection到Recordset到Fields再到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