VB.NET通訊錄源代碼

利用VB.NET製作通訊錄(使用ACCESS數據庫)

一、創建應用程序TXL

創建基於VB.NetWindows應用程序TXL,保存到指定的文件夾下。

二、創建數據庫

1、創建ACCESS數據庫TXL,在數據庫中創建表txl,結構如下

spacer.gif

將表保存到應用程序TXL所在的文件夾下

spacer.gif

2、可以在數據庫中輸入測試用的數據

三、創建應用程序界面

1、創建應用程序界面如下圖所示

spacer.gif

2、各控件的命名規則

除標籤、GroupBox外,其他都是漢語拼音首字母大寫,從上到下,從左到右依次爲:

XMCSRQZZXZZQQ1QQ2EMail1EMail2MSNZPSJLTJJLSYTXGJLXYTBCJLWJLSCJL

四、創建數據連接

1、添加OleDbDataAdapter數據適配器

spacer.gif

打開窗體設計界面,在工具箱的常欄(其他欄也可以)的空白區域單擊鼠標右鍵,選擇【選擇項】,在彈出的選擇工具箱對話框中找到OleDbDataAdapter,如下圖所示

spacer.gif

先在篩選器中輸入ole,然後在對話框中勾選OleDbDataAdapter,單擊確定按鈕即可。這時在工具箱的常規欄中多了一個OleDbDataAdapter,如下圖所示:

spacer.gif

2、添加數據適配器到窗體

spacer.gif

拖動OleDbDataAdapter控件到窗體,此時會自動彈出數據適配器配置嚮導對話框,在對話框中單擊【新建連接】按鈕。在彈出的添加連接對話框中,單擊更改按鈕如下圖所示:

spacer.gif

在彈出的更改數據源對話框中選擇Microsoft Access數據庫文件,如下圖所示:

spacer.gif

單擊確定按鈕,然後出現添加連接對話框,單擊瀏覽按鈕找到項目文件夾下剛剛創建的TXL數據庫,然後單擊測試連接按鈕,如果出現測試連接成功字樣則數據源添加成功!!

注意:如果測試連接時出現 未指定的錯誤 ,這時把VB.NetAccess全部關閉再重新打開VB.Net程序,應該可以連接成功,個人感覺應該是併發連接過多的問題

spacer.gif

單擊確定按鈕關閉添加連接對話框,此時可以看到如下圖所示的連接字符串,即

Provider=Microsoft.Jet.OLEDB.4.0;DataSource=|DataDirectory|\TXL.mdb

注意:這裏的DataDirectory是指應用程序所在的文件夾,即項目文件夾下的Bin文件夾的下DebugRelease文件夾(若應用程序是調試版本則在Debug下,是發佈版則在Release下)。

spacer.gif

然後在數據適配器配置嚮導對話框中單擊下一步按鈕,此時會彈出是否複製數據文件到項目輸出目錄中的對話框,單擊按鈕

spacer.gif

接下來會提示數據庫已經在項目中,是否覆蓋,選擇否(數據庫文件保存在項目文件夾中,所以不需要覆蓋)

spacer.gif

在選擇命令類型部分直接按默認選項,然後單擊下一步按鈕即可。

spacer.gif

在生成SQL語句對話框中,單擊查詢生成器按鈕,如下圖所示:

spacer.gif

在查詢生成器界面,將txl表添加到查詢設計器中,並勾選所有列,如下圖所示。然後單擊確定按鈕關閉查詢設計器,返回到生成SQL語句界面。

spacer.gif

在查詢設計器關閉後返回到生成SQL語句對話框界面時,單擊下一步按鈕則會彈出生成結果對話框,如下圖所示:此時系統已經自動生成了對數據庫進行選擇、插入、更新和刪除相對應的語句,用戶不需要再爲此擔心。

spacer.gif

單擊完成按鈕關閉對話框即可。此時系統會自動添加一個OleDbConnection控件到窗體下部。

3、生成數據集

右鍵單擊OleDbDataAdapter,在彈出的對話框上單擊生成數據集項,然後彈出生成數據集對話框,保持默認單擊確定按鈕即可,此時系統會自動添加DataSet11到窗體下部。

spacer.gifspacer.gif

4、綁定數據到控件

.Net中大部分控件都可以進行綁定。可以進行數據綁定的控件都具有DataBindings屬性,其中的Text部分是指該控件進行數據綁定後顯示的內容,Tag是作爲內部存儲的部分(個人認爲)。將XM文本框的DataBindings部分的Text設置爲項目數據源下的Form1列表實例的DataSet11下的txl表的姓名字段,如下圖所示:

spacer.gif

可以按照此方法,將其他控件(除照片)外分別綁定到相應的字段上。

5、編寫代碼完成數據的顯示

此時如果直接運行程序則會發現界面上並沒有預料的數據出現。原因在於未將數據填充到數據集中。

在窗體的Form_Load事件中添加如下事件處理代碼

Public Class Form1

    PrivateSub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) HandlesMyBase.Load

        OleDbDataAdapter1.Fill(DataSet11,"txl") '此處的表名txl與界面上進行綁定時應該一致

        ZP.ImageLocation= DataSet11.Tables("txl").Rows(0).Item("照片")

    EndSub

End Class

6、完成記錄移動

要想實現記錄的移動,需要使用BindingManagerBase來實現綁定數據控件與數據集之間的關聯和移動。因爲記錄移動過程中各個按鈕都需要使用,所以需要在窗體作用範圍內聲明該變量。

同時在記錄移動的過程中,照片框要根據數據集中記錄的位置中保存的照片文件的路徑來加載相應的圖片文件,此時需要從記錄集的數據表中取出相應行的照片位置,然後將之加載的圖片框中。

Public Class Form1

   Dim bmdata AsBindingManagerBase

    '首記錄按鈕事件處理程序

    PrivateSub SJL_Click(ByValsender As System.Object, ByVal e AsSystem.EventArgs) Handles SJL.Click

        bmdata.Position = 0 '第一條記錄

        ZP.ImageLocation = DataSet11.Tables("txl").Rows(bmdata.Position).Item("照片") '照片需要單獨處理

    EndSub

    '上一條按鈕事件處理程序

    PrivateSub SYT_Click(ByValsender As System.Object, ByVal e AsSystem.EventArgs) Handles SYT.Click

        Ifbmdata.Position > 0 Then '當記錄未到首部時可以向前移動一條,並顯示照片

            bmdata.Position = bmdata.Position -1

            ZP.ImageLocation =DataSet11.Tables("txl").Rows(bmdata.Position).Item("照片")

        EndIf

    EndSub

    '下一條按鈕事件處理程序

    PrivateSub XYT_Click(ByValsender As System.Object, ByVal e As System.EventArgs)Handles XYT.Click

        Ifbmdata.Position < bmdata.Count - 1 Then '當記錄未到尾部時可以向後移動一條並顯示照片

            bmdata.Position =bmdata.Position + 1

            ZP.ImageLocation =DataSet11.Tables("txl").Rows(bmdata.Position).Item("照片")

        EndIf

    EndSub

    '尾記錄按鈕事件處理程序

    PrivateSub WJL_Click(ByValsender As System.Object, ByVal e AsSystem.EventArgs) Handles WJL.Click

        bmdata.Position =bmdata.Count - 1

        ZP.ImageLocation =DataSet11.Tables("txl").Rows(bmdata.Position).Item("照片")

End Sub

End Class

7、數據庫的進一步處理

對於要處理的數據庫來說,應當保持當前的數據爲最新的。在前面添加數據源到項目中時,系統詢問是否將數據庫複製到輸出目錄中,當時選擇的結果爲。在測試程序運行過程中可以發現,如果用戶對數據庫的內容作爲改動(如插入、刪除或更新了數據),下次程序再運行時又和原始的狀態一樣。這並不是程序的錯誤,而是數據庫複製時選項未設置好。如果設置爲始終複製,則不管程序運行時如何改變,下次程序運行時仍會將項目文件夾下的數據庫複製到輸出目錄,此時會將剛剛修改過的數據庫變爲原始數據庫,這種狀態直到將整個程序發佈之後纔會正常。所以此處需要選擇,如果較新則複製,這樣當原始數據庫的數據比輸出文件夾中的數據庫數據更新時纔會複製(第一次時因爲輸出文件夾下沒有數據庫,所以會直接複製;以後輸出文件夾中的數據庫內容較新,而項目文件夾中的數據庫內容則較舊所以不會再進行復制,也就不會出現覆蓋掉新內容的情況了)。

spacer.gif

五、實現數據處理功能

1、編寫綁定數據到控件的通用過程

這個過程用於實現將數據集中的數據綁定到數據集的數據表txl的相應列上。因爲已經在界面上完成了綁定工作,所以這個過程只用作編寫代碼完成綁定的參考。

    PrivateSub BindDataToControl()

        XM.DataBindings.Add("text", DataSet11, "txl.姓名")

        CSRQ.DataBindings.Add("text", DataSet11, "txl.出生日期")

        ZZ.DataBindings.Add("text", DataSet11, "txl.住址")

        XZZ.DataBindings.Add("text", DataSet11, "txl.現住址")

        QQ1.DataBindings.Add("text", DataSet11, "txl.QQ1")

        QQ2.DataBindings.Add("text", DataSet11, "txl.QQ2")

        MSN.DataBindings.Add("text", DataSet11, "txl.MSN")

        EMail1.DataBindings.Add("text", DataSet11, "txl.EMail1")

        EMail2.DataBindings.Add("text", DataSet11, "txl.EMail2")

    EndSub

 2、編寫設置控件是否可用的通用過程

 PrivateSub EnableControl(ByValflag As Boolean)


        XM.Enabled = flag

        CSRQ.Enabled = flag

        ZZ.Enabled = flag

        XZZ.Enabled = flag

        QQ1.Enabled = flag

        QQ2.Enabled = flag

        EMail1.Enabled = flag

        EMail2.Enabled = flag

        MSN.Enabled = flag

        ZP.Enabled = flag


    EndSub

3、編寫保存數據到數據庫的通用過程

將數據保存到數據庫時,首先需要將BindingManagerBase對象的當前編輯結束,然後調用數據適配器的Update方法來實現數據集到數據庫的更新過程。

   PublicSub SaveChanges()  '更新數據集自定義過程

        bmdata.EndCurrentEdit()   '停止當前的任何編輯

       OleDbDataAdapter1.Update(DataSet11)

    End Sub

4、完成添加、修改、保存和刪除記錄按鈕事件處理程序

1)添加記錄按鈕事件處理程序

添加記錄時首先需要將控件可用,然後需要結束BindingManagerBase的當前編輯狀態,記照片爲空,最後需要添加一個新行到BindingManagerBase中。

    PrivateSub TJJL_Click(ByValsender As System.Object, ByVal e AsSystem.EventArgs) Handles TJJL.Click

        EnableControl(True) '使控件可用

        bmdata.EndCurrentEdit() '結束現有編輯

        ZP.ImageLocation = ""

        bmdata.AddNew() '添加新行

    EndSub

(2)保存記錄按鈕事件處理程序

保存時必須結束當前編輯,這一步非常重要。只有結束BindingManagerBase的當前編輯狀態,其添加新行操作纔算結束,這樣在數據集的數據表中才會增加相應的新行,纔可以將新行的照片列設置爲圖片框中圖片的位置(如果是修改的話則不會出現問題);之後再將數據集的內容更新回數據庫即可。

保存記錄回數據庫時,照片信息與其他數據不一樣,不是綁定的,因此在保存之前,首先需要將照片對應的文件信息保存到數據集的數據表的相應行的對應列之後才能保存回數據庫。

    PrivateSub BCJL_Click(ByValsender As System.Object, ByVal e AsSystem.EventArgs) Handles BCJL.Click

       bmdata.EndCurrentEdit()

       DataSet11.Tables("txl").Rows(bmdata.Position).Item("照片") = ZP.ImageLocation

        SaveChanges() '保存更改

        EnableControl(False) '恢復控件不可用

    EndSub

(3)修改記錄按鈕事件處理程序

這一步比較簡單,就是讓控件可用,此時用戶可以修改,然後保存即可。

    PrivateSub XGJL_Click(ByValsender As System.Object, ByVal e As System.EventArgs)Handles XGJL.Click

        EnableControl(True) '控件可用

    EndSub

(4)刪除記錄按鈕事件處理程序

刪除記錄之後,需要將照片顯示爲與當前記錄相符的內容。

    PrivateSub SCJL_Click(ByValsender As System.Object, ByVal e AsSystem.EventArgs) Handles SCJL.Click

        bmdata.RemoveAt(bmdata.Position)'刪除當前位置元素

        SaveChanges()

        ZP.ImageLocation =DataSet11.Tables("txl").Rows(bmdata.Position).Item("照片")

    End Sub

5、雙擊照片框實現加載圖片事件處理程序

首先需要在工具箱的對話框項內拖動一個OpenFileDialog控件到窗體上。在代碼中設置其只能打開.jpg圖片文件,如果用戶在文件框中選擇了圖片文件則將之加載的圖片框中。此過程需要與保存記錄按鈕事件處理程序相輔

    PrivateSub ZP_DoubleClick(ByValsender As System.Object, ByVal e AsSystem.EventArgs) Handles ZP.DoubleClick

        OpenFileDialog1.Filter = "圖片文件(*.jpg)|*.jpg|所有文件(*.*)|*.*"

        OpenFileDialog1.ShowDialog()

        IfOpenFileDialog1.FileName <> ""Then

            ZP.ImageLocation =OpenFileDialog1.FileName

        EndIf

    End Sub

6、修改窗體加載事件處理程序

窗體加載時只顯示數據,此時不能編輯數據。

    PrivateSub Form1_Load(ByValsender As System.Object, ByVal e AsSystem.EventArgs) Handles MyBase.Load

        OleDbDataAdapter1.Fill(DataSet11,"txl") '此處的表名txl與界面上進行綁定時應該一致

        ZP.ImageLocation =DataSet11.Tables("txl").Rows(0).Item("照片") '初始時照片顯示爲第一條記錄的內容

        bmdata =BindingContext(DataSet11, "txl") '創建BindingManagerBase對象

        EnableControl(False) '所有控件不能用

    End Sub


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章