国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
第14章 編輯SQL Server數(shù)據(jù)庫(kù)數(shù)據(jù)

14 編輯SQL Server數(shù)據(jù)庫(kù)數(shù)據(jù)

編輯SQL Server數(shù)據(jù)庫(kù)數(shù)據(jù),就是往數(shù)據(jù)庫(kù)添加新記錄、修改更新記錄和刪除不需要的記錄。我們既可以通過(guò)企業(yè)管理器編輯數(shù)據(jù)庫(kù)數(shù)據(jù),也可以通過(guò)Excel VBA編制程序?qū)崿F(xiàn)編輯數(shù)據(jù)的自動(dòng)化。

14.1 添加新記錄

添加新記錄可以使用SQLINSERT INTO語(yǔ)句,其語(yǔ)法格式如下:

INSERT INTO 數(shù)據(jù)表名(字段1,字段2,……) VALUES(1,值2,……)

如果要輸入全部字段數(shù)據(jù),那么就可以省略字段列表,即:

INSERT INTO 數(shù)據(jù)表名 VALUES(1,值2,……)

VALUES參數(shù)列表中,各個(gè)值要與前面的字段一一對(duì)應(yīng)。如果字段的數(shù)據(jù)類型是文本型或日期時(shí)間型,則參數(shù)值要用單引號(hào)“‘”括趕來(lái);如果字段的數(shù)據(jù)類型是數(shù)值型,則參數(shù)值直接為數(shù)字。

14.1.1 一次添加一條記錄

【例14-1】下面的例子是向數(shù)據(jù)表“成績(jī)”中添加一條記錄,該條記錄的各個(gè)字段數(shù)據(jù)如下:

學(xué)號(hào)   A01200601

課程代碼  200601007

成績(jī)      85

學(xué)期      2006學(xué)年第一學(xué)期

在運(yùn)行下面的程序之前,要確保已經(jīng)引用了ADO對(duì)象庫(kù)MicrosoftActive Data Objects 2.5 Library或其他版本(如Microsoft Active Data Objects 2.1 LibraryMicrosoft Active Data Objects 2.8 Library等)。同時(shí),還要根據(jù)電腦實(shí)際情況,將連接字符串中的SQL Server服務(wù)器名稱進(jìn)行變更,并輸入相應(yīng)的用戶名和密碼(如果有的話)。

Public Sub 141()

  Dim cnn As New ADODB.Connection

   '建立與指定SQL Server數(shù)據(jù)庫(kù)的連接

  cnn.ConnectionString = "Provider=SQLOLEDB;" _

       & "User ID=sa;" _

       & "password=11111;" _

       & "Data Source=THTFCOMPUTER;" _

       & "Initial Catalog=研究生管理"

   cnn.Open

    '添加新記錄

   If MsgBox("下面將向數(shù)據(jù)表<成績(jī)>添加新記錄!是否添加?", _

     vbQuestion + vbYesNo) = vbYes Then

        SQL = " insert into 成績(jī)(學(xué)號(hào),課程代碼,成績(jī),學(xué)期) " _

             &"values('A01200601','200601007',85,'2006學(xué)年第一學(xué)期')"

        cnn.ExecuteSQL

        MsgBox "數(shù)據(jù)添加成功!", vbInformation

   Else

        MsgBox "添加數(shù)據(jù)操作被取消!", vbExclamation

   End If

    '關(guān)機(jī)記錄集以及與數(shù)據(jù)庫(kù)的連接

   cnn.Close

   Set cnn = Nothing

End Sub

在這個(gè)程序中,由于是添加數(shù)據(jù)表的所有字段數(shù)據(jù),因此SQL語(yǔ)句還簡(jiǎn)化為下面的情形:

SQL = insertinto 成績(jī) values(A01200601,‘200601007,85,‘2006學(xué)年第一學(xué)期’)

14.1.2 一次添加多條記錄

在很多情況下,可能要從其他的數(shù)據(jù)表中查詢出符合條件的記錄,然后將這些記錄輸入到當(dāng)前的數(shù)據(jù)表中,這就是一次輸入多條記錄的情況。在此情況下,可以使用追加查詢的方法來(lái)輸入數(shù)據(jù)。

如果是單獨(dú)給定了要添加的記錄數(shù)據(jù),我們可以將這些數(shù)據(jù)保存到數(shù)組中,然后通過(guò)循環(huán)數(shù)組的方式向數(shù)據(jù)表中逐條添加記錄。

【例14-2】下面的例子是向數(shù)據(jù)表“成績(jī)”中添加3條記錄,其各個(gè)字段數(shù)據(jù)如下:

學(xué)號(hào)

課程代碼

成績(jī)

學(xué)期

A01200601

200601007

85

2006學(xué)年第一學(xué)期

A01200602

200601007

92

2006學(xué)年第一學(xué)期

A01200603

200601007

69

2006學(xué)年第一學(xué)期

在運(yùn)行下面的程序之前,要確保已經(jīng)引用了ADO對(duì)象庫(kù)MicrosoftActive Data Objects 2.5 Library或其他版本(如Microsoft Active Data Objects 2.1 Library、Microsoft Active Data Objects 2.8 Library等)。同時(shí),還要根據(jù)電腦實(shí)際情況,將連接字符串中的SQL Server服務(wù)器名稱進(jìn)行變更,并輸入相應(yīng)的用戶名和密碼(如果有的話)。

Public Sub 142()

  Dim cnn As New ADODB.Connection

  Dim myColumn As Variant, myValue1 As Variant, myValue2 As Variant

  Dim myValue3 As Variant, myValue4 As Variant

  Dim i As Integer

  Dim myStr As String

   '建立與指定SQL Server數(shù)據(jù)庫(kù)的連接

  cnn.ConnectionString = "Provider=SQLOLEDB;" _

       & "User ID=sa;" _

       & "password=11111;" _

       & "Data Source=THTFCOMPUTER;" _

       & "Initial Catalog=研究生管理"

   cnn.Open

    '添加新記錄

   If MsgBox("下面將向數(shù)據(jù)表<成績(jī)>添加新記錄!是否添加?", _

     vbQuestion + vbYesNo) = vbYes Then

     myColumn = "(學(xué)號(hào),課程代碼,成績(jī),學(xué)期)”"

     myValue1 = Array("A01200601", "A01200602","A01200603")

     myValue2 = Array("200601004", "200601004","200601007")

     myValue3 = Array(85, 92, 69)

     myValue4 = Array("2006學(xué)年第一學(xué)期","2006學(xué)年第一學(xué)期", "2006學(xué)年第一學(xué)期")

     For i = 0 To UBound(myValue1)

         myStr = "values("

         myStr = myStr & "'" & myValue1(i) &"','" & myValue2(i) _

               & "'," &myValue3(i) & ",'" & myValue4(i) & "')"

         SQL = "insert into 成績(jī) " & myColumn & " "& myStr

         cnn.Execute SQL

     Next i

     MsgBox "數(shù)據(jù)添加成功!", vbInformation

   Else

      MsgBox "添加數(shù)據(jù)操作被取消!", vbExclamation

   End If

    '關(guān)閉記錄集以及與數(shù)據(jù)庫(kù)的連接

   cnn.Close

   Set cnn = Nothing

End Sub

14.1.3 將工作表的數(shù)據(jù)添加到數(shù)據(jù)庫(kù)

將工作表的數(shù)據(jù)添加到數(shù)據(jù)庫(kù),可以采用【例14-2】的方法,循環(huán)工作表的各行數(shù)據(jù)并向數(shù)據(jù)表添加數(shù)據(jù)。

【例14-3】下面的例子是將工作表的數(shù)據(jù)添加到數(shù)據(jù)表“成績(jī)”中,工作表數(shù)據(jù)如圖14-1所示。

在運(yùn)行下面的程序之前,要確保已經(jīng)引用了ADO對(duì)象庫(kù)MicrosoftActive Data Objects 2.5 Library或其他版本(如Microsoft Active Data Objects 2.1 Library、Microsoft Active Data Objects 2.8 Library等)。同時(shí),還要根據(jù)電腦實(shí)際情況,將連接字符串中的SQL Server服務(wù)器名稱進(jìn)行變更,并輸入相應(yīng)的用戶名和密碼(如果有的話)。

Public Sub 143()

  Dim cnn As New ADODB.Connection

  Dim i As Integer

  Dim myStr As String

   '建立與指定SQL Server數(shù)據(jù)庫(kù)的連接

  cnn.ConnectionString = "Provider=SQLOLEDB;" _

       & "User ID=sa;" _

       & "password=11111;" _

       & "Data Source=THTFCOMPUTER;" _

       & "Initial Catalog=研究生管理"

   cnn.Open

    '添加新記錄

    If MsgBox("下面將把工作表的數(shù)據(jù)添加到數(shù)據(jù)表<成績(jī)>!是否添加?", _

     vbQuestion + vbYesNo) = vbYes Then

     myColumn = "(學(xué)號(hào),課程代碼,成績(jī),學(xué)期)”"

     For i = 2 To Range("A65536").End(xlUp).Row

         myStr = "values("

         myStr = myStr & "'" & Cells(i, 1) &"','" & Cells(i, 2) _

               & "'," &Cells(i, 3) & ",'" & Cells(i, 4) & "')"

         SQL = "insert into 成績(jī) " & myColumn & " "& myStr

         cnn.Execute SQL

     Next i

     MsgBox "數(shù)據(jù)添加成功!", vbInformation

   Else

      MsgBox "添加數(shù)據(jù)操作被取消!", vbExclamation

   End If

    '關(guān)閉記錄集以及與數(shù)據(jù)庫(kù)的連接

   cnn.Close

   Set cnn = Nothing

End Sub

14.1.4 如何為某字段插入空值(NULL

空值是指字段的數(shù)據(jù)值未知,既不是0,也不是零長(zhǎng)度的字符串(零長(zhǎng)度的字符串看起來(lái)好象沒(méi)有數(shù)據(jù))。在企業(yè)管理器中輸入空值需要按【Ctrl+0】組合鍵,此時(shí)該字段數(shù)據(jù)顯示為“<NULL>”,但當(dāng)光標(biāo)移到該字段時(shí),“<NULL>”就消失了。

為某字段插入空值,就是直接將該字段值設(shè)置為“<NULL>”。

【例14-4】下面的例子是往數(shù)據(jù)表“研究生”中添加一個(gè)新記錄,數(shù)據(jù)如下所示:

在運(yùn)行下面的程序之前,要確保已經(jīng)引用了ADO對(duì)象庫(kù)MicrosoftActive Data Objects 2.5 Library或其他版本(如Microsoft Active Data Objects 2.1 LibraryMicrosoft Active Data Objects 2.8 Library等)。同時(shí),還要根據(jù)電腦實(shí)際情況,將連接字符串中的SQL Server服務(wù)器名稱進(jìn)行變更,并輸入相應(yīng)的用戶名和密碼(如果有的話)。

Public Sub 144()

  Dim cnn As New ADODB.Connection

  Dim rs As New ADODB.Recordset

   '建立與指定SQL Server數(shù)據(jù)庫(kù)的連接

  cnn.ConnectionString = "Provider=SQLOLEDB;" _

       & "User ID=sa;" _

       & "password=11111;" _

       & "Data Source=THTFCOMPUTER;" _

       & "Initial Catalog=研究生管理"

   cnn.Open

    '添加新記錄

   If MsgBox("下面將向數(shù)據(jù)表<成績(jī)>添加新記錄!是否添加?", _

     vbQuestion + vbYesNo) = vbYes Then

         SQL = "insert into 研究生 values('A04200603','祝麗萍','' " _

              & " '2007-9-1','A01200602',null,'A03001')"

         cnn.Execute SQL

         MsgBox "數(shù)據(jù)添加成功!", vbInformation

   Else

         MsgBox "添加數(shù)據(jù)操作被取消!", vbExclamation

   End If

    '關(guān)閉記錄集以及與數(shù)據(jù)庫(kù)的連接

   cnn.Close

   Set cnn = Nothing

End Sub

運(yùn)行上面的程序,然后打開數(shù)據(jù)表,可以看到在數(shù)據(jù)表中添加了這個(gè)新記錄,它的“研究方向”字段是一個(gè)空值NULL,如圖14-2所示。

14.2 修改更新記錄

有時(shí)候可能需要修改數(shù)據(jù)庫(kù)中的數(shù)據(jù)。此時(shí),就需要用到SQLUPDATE語(yǔ)句,其語(yǔ)法結(jié)構(gòu)如下:

UPDATE 數(shù)據(jù)表名 SET 字段1=新值1,字段2=新值2,……WHERE 條件

14.2.1 一次修改一條記錄

【例14-5】下面的例子是將數(shù)據(jù)表“研究生”中的學(xué)號(hào)為“A02200601”的“研究方向”由目前的空值改為“證券投資”。

在運(yùn)行下面的程序之前,要確保已經(jīng)引用了ADO對(duì)象庫(kù)MicrosoftActive Data Objects 2.5 Library或其他版本(如Microsoft Active Data Objects 2.1 Library、Microsoft Active Data Objects 2.8 Library等)。同時(shí),還要根據(jù)電腦實(shí)際情況,將連接字符串中的SQL Server服務(wù)器名稱進(jìn)行變更,并輸入相應(yīng)的用戶名和密碼(如果有的話)。

Public Sub 145()

  Dim cnn As New ADODB.Connection

  Dim rs As New ADODB.Recordset

   '建立與指定SQL Server數(shù)據(jù)庫(kù)的連接

  cnn.ConnectionString = "Provider=SQLOLEDB;" _

       & "User ID=sa;" _

       & "password=11111;" _

       & "Data Source=THTFCOMPUTER;" _

       & "Initial Catalog=研究生管理"

   cnn.Open

    '添加新記錄

   If MsgBox("下面將修改數(shù)據(jù)表<研究生>的記錄!是否修改?", _

     vbQuestion + vbYesNo) = vbYes Then

         SQL = "update 研究生 set 研究方向=‘證券投資’ where 學(xué)號(hào)=A02200601"

         cnn.Execute SQL

         MsgBox "數(shù)據(jù)添加成功!", vbInformation

   Else

         MsgBox "添加數(shù)據(jù)操作被取消!", vbExclamation

   End If

    '關(guān)閉記錄集以及與數(shù)據(jù)庫(kù)的連接

   cnn.Close

   Set cnn = Nothing

End Sub

運(yùn)行上面的程序,然后打開數(shù)據(jù)表,可以看到學(xué)號(hào)為“A02200601”的“研究方向”由目前的空值改為“證券投資”,如圖14-3所示。

14.2.2 一次修改多條記錄

UPDATE語(yǔ)句中,使用WHERE子句,我們可以一次修改多個(gè)滿足條件的記錄。

【例14-6】下面的例子是將數(shù)據(jù)表“成績(jī)”中的選修編碼為“200601003”課程的分?jǐn)?shù)都加5分。

在運(yùn)行下面的程序之前,要確保已經(jīng)引用了ADO對(duì)象庫(kù)MicrosoftActive Data Objects 2.5 Library或其他版本(如Microsoft Active Data Objects 2.1 LibraryMicrosoft Active Data Objects 2.8 Library等)。同時(shí),還要根據(jù)電腦實(shí)際情況,將連接字符串中的SQL Server服務(wù)器名稱進(jìn)行變更,并輸入相應(yīng)的用戶名和密碼(如果有的話)。

Public Sub 146()

  Dim cnn As New ADODB.Connection

   Dim rs As New ADODB.Recordset

   '建立與指定SQL Server數(shù)據(jù)庫(kù)的連接

  cnn.ConnectionString = "Provider=SQLOLEDB;" _

       & "User ID=sa;" _

       & "password=11111;" _

       & "Data Source=THTFCOMPUTER;" _

       & "Initial Catalog=研究生管理"

   cnn.Open

    '添加新記錄

   If MsgBox("下面將修改數(shù)據(jù)表<研究生>的記錄!是否修改?", _

     vbQuestion + vbYesNo) = vbYes Then

         SQL = "update 成績(jī) set 成績(jī)=成績(jī)+5 where 課程代碼=200601003 "

         cnn.Execute SQL

         MsgBox "數(shù)據(jù)添加成功!", vbInformation

   Else

         MsgBox "添加數(shù)據(jù)操作被取消!", vbExclamation

   End If

    '關(guān)閉記錄集以及與數(shù)據(jù)庫(kù)的連接

   cnn.Close

   Set cnn = Nothing

End Sub

運(yùn)行上面的程序,然后打開數(shù)據(jù)表,可以看到選修編碼為“200601003”課程的分?jǐn)?shù)都被加了5分,如圖14-4所示(請(qǐng)與圖14-5所示修改前的數(shù)據(jù)進(jìn)行比較)。

14.3 刪除記錄

在某些情況下,可能需要直接從數(shù)據(jù)庫(kù)中刪除一些記錄,這可以由DELETE FROM語(yǔ)句來(lái)完成,其語(yǔ)法如下:

DELETE FROM 數(shù)據(jù)表名 WHERE 條件表達(dá)式

如果在DELETE FROM語(yǔ)句中不加任何條件,那么就會(huì)刪除整個(gè)數(shù)據(jù)表的數(shù)據(jù),僅僅留下一個(gè)空白的沒(méi)有任何記錄的數(shù)據(jù)表。

由于數(shù)據(jù)一旦刪除將無(wú)法恢復(fù),因此在用DELETE FROM語(yǔ)句刪除數(shù)據(jù)時(shí)要特別慎重,最好設(shè)置一個(gè)緩沖,例如設(shè)置一個(gè)是否刪除數(shù)據(jù)的詢問(wèn)框,并將默認(rèn)按鈕設(shè)置為“否”。

14.3.1 一次刪除一條記錄

【例14-7】下面的例子是將數(shù)據(jù)表“研究生”中的學(xué)號(hào)為“A02200601”的記錄刪除。

在運(yùn)行下面的程序之前,要確保已經(jīng)引用了ADO對(duì)象庫(kù)MicrosoftActive Data Objects 2.5 Library或其他版本(如Microsoft Active Data Objects 2.1 LibraryMicrosoft Active Data Objects 2.8 Library等)。同時(shí),還要根據(jù)電腦實(shí)際情況,將連接字符串中的SQL Server服務(wù)器名稱進(jìn)行變更,并輸入相應(yīng)的用戶名和密碼(如果有的話)。

在運(yùn)行下面的程序之前,要確保已經(jīng)引用了ADO對(duì)象庫(kù)MicrosoftActive Data Objects 2.5 Library或其他版本(如Microsoft Active Data Objects 2.1 Library、Microsoft Active Data Objects 2.8 Library等)。同時(shí),還要根據(jù)電腦實(shí)際情況,將連接字符串中的SQL Server服務(wù)器名稱進(jìn)行變更,并輸入相應(yīng)的用戶名和密碼(如果有的話)。

14.3.2 一次刪除多條記錄

DELETE語(yǔ)句中,使用WHERE子句,我們可以一次刪除多個(gè)滿足條件的記錄。

【例14-8】下面的例子是將數(shù)據(jù)表“研究生”中的所有研究方向?yàn)榭罩档挠涗泟h除。

在運(yùn)行下面的程序之前,要確保已經(jīng)引用了ADO對(duì)象庫(kù)MicrosoftActive Data Objects 2.5 Library或其他版本(如Microsoft Active Data Objects 2.1 Library、Microsoft Active Data Objects 2.8 Library等)。同時(shí),還要根據(jù)電腦實(shí)際情況,將連接字符串中的SQL Server服務(wù)器名稱進(jìn)行變更,并輸入相應(yīng)的用戶名和密碼(如果有的話)。

Public Sub 148()

  Dim cnn As New ADODB.Connection

  Dim rs As New ADODB.Recordset

   '建立與指定SQL Server數(shù)據(jù)庫(kù)的連接

  cnn.ConnectionString = "Provider=SQLOLEDB;" _

       & "User ID=sa;" _

       & "password=11111;" _

       & "Data Source=THTFCOMPUTER;" _

       & "Initial Catalog=研究生管理"

   cnn.Open

    '刪除記錄

   If MsgBox("下面將刪除數(shù)據(jù)表<研究生>的記錄!是否修改?", _

     vbQuestion + vbYesNo + vbDefaultButton2) = vbYes Then

         SQL = "delete from 研究生 where 研究方向 isnull "

         cnn.Execute SQL

         MsgBox "數(shù)據(jù)刪除成功!", vbInformation

   Else

         MsgBox "刪除數(shù)據(jù)操作被取消!", vbExclamation

   End If

    '關(guān)閉記錄集以及與數(shù)據(jù)庫(kù)的連接

   cnn.Close

   Set cnn = Nothing

End Sub

14.3.3 刪除數(shù)據(jù)表的全部記錄

如果在DELETE FROM語(yǔ)句中不加任何條件,那么就會(huì)刪除整個(gè)數(shù)據(jù)表的數(shù)據(jù),僅僅留下一個(gè)空白的沒(méi)有任何記錄的數(shù)據(jù)表。

【例14-9】下面的例子是將數(shù)據(jù)表“研究生”中的所有記錄刪除。

在運(yùn)行下面的程序之前,要確保已經(jīng)引用了ADO對(duì)象庫(kù)MicrosoftActive Data Objects 2.5 Library或其他版本(如Microsoft Active Data Objects 2.1 LibraryMicrosoft Active Data Objects 2.8 Library等)。同時(shí),還要根據(jù)電腦實(shí)際情況,將連接字符串中的SQL Server服務(wù)器名稱進(jìn)行變更,并輸入相應(yīng)的用戶名和密碼(如果有的話)。

Public Sub 149()

  Dim cnn As New ADODB.Connection

  Dim rs As New ADODB.Recordset

   '建立與指定SQL Server數(shù)據(jù)庫(kù)的連接

  cnn.ConnectionString = "Provider=SQLOLEDB;" _

       & "User ID=sa;" _

       & "password=11111;" _

       & "Data Source=THTFCOMPUTER;" _

       & "Initial Catalog=研究生管理"

   cnn.Open

    '刪除記錄

   If MsgBox("下面將刪除數(shù)據(jù)表<研究生>的所有記錄!是否修改?", _

     vbQuestion + vbYesNo + vbDefaultButton2) = vbYes Then

         SQL = "delete from 研究生 "

         cnn.Execute SQL

         MsgBox "數(shù)據(jù)刪除成功!", vbInformation

   Else

         MsgBox "刪除數(shù)據(jù)操作被取消!", vbExclamation

   End If

    '關(guān)閉記錄集以及與數(shù)據(jù)庫(kù)的連接

   cnn.Close

   Set cnn = Nothing

End Sub

14.4 編輯數(shù)據(jù)綜合應(yīng)用案例

下面我們介紹如何利用窗體對(duì)SQL Server數(shù)據(jù)庫(kù)數(shù)據(jù)進(jìn)行瀏覽和編輯。本案例的數(shù)據(jù)表為“研究生管理”的“導(dǎo)師”;本案例的文件名為“例14-10.xls”。

14.4.1 設(shè)計(jì)窗體結(jié)構(gòu)

導(dǎo)師管理窗體如圖14-6所示。用戶窗體的名稱為“UserForm1”,Caption屬性設(shè)置為“導(dǎo)師管理”。

在窗體上插入3個(gè)框架Frame1、Frame2Frame3,其Caption屬性分別設(shè)置為“院系導(dǎo)師瀏覽”、“導(dǎo)師基本數(shù)據(jù)”和“編輯數(shù)據(jù)”。

在框架Frame1內(nèi)插入1個(gè)TreeView控件,基名稱為TreeView1,用于顯示在“導(dǎo)師”數(shù)據(jù)表內(nèi)各個(gè)院系名稱以及導(dǎo)師名稱。

在框架Frame2內(nèi)插入5個(gè)標(biāo)簽和5個(gè)文本框,5個(gè)標(biāo)簽用于對(duì)5個(gè)文本框的功能進(jìn)行說(shuō)明,其Caption屬性分別設(shè)置為“導(dǎo)師編號(hào)”、“姓名”、“性別”、“職稱”和“院系編號(hào)”;5個(gè)文本框用于顯示或輸入導(dǎo)師的基本信息數(shù)據(jù),其名稱分別設(shè)置為“導(dǎo)師編號(hào)”、“姓名”,“性別”、“職稱”和“院系編號(hào)”。

在框架Frame3內(nèi)插入4個(gè)命令按鈕,其名稱屬性和Caption屬性均分別設(shè)置為“重置窗口”、“輸入新記錄”、“修改記錄”和“刪除記錄”。

在窗體的右下角插入一個(gè)命令按鈕,其名稱屬性和Caption屬性均設(shè)置為“關(guān)閉窗口”,Cancel屬性設(shè)置為True。

14.4.2 設(shè)計(jì)程序代碼

1)首先定義如下的模塊級(jí)變量:

dim cnn as New ADODB.Connection

Dim myArray As Variant

2)為用戶窗體設(shè)置Initialize事件,當(dāng)啟動(dòng)窗體時(shí),建立與SQL Server數(shù)據(jù)庫(kù)服務(wù)器的“研究生管理”數(shù)據(jù)庫(kù)的連接,查詢獲取該數(shù)據(jù)庫(kù)數(shù)據(jù),然后將這些院系名和導(dǎo)師名設(shè)置給TreeView1控件,并顯示出來(lái)。程序代碼如下:

Private Sub UserForm_Initialize()

   myarray = Array("導(dǎo)師編號(hào)", "姓名", "性別","職稱", "院系編號(hào)")

    '建立與指定SQL Server數(shù)據(jù)庫(kù)的連接

   cnn.ConnectionString = "Provider=SQLOLEDB;" _

       & "User ID=sa;" _

       & "password=11111;" _

       & "Data Source=THTFCOMPUTER;" _

       & "Initial Catalog=研究生管理"

   cnn.Open

   Call 設(shè)置節(jié)點(diǎn)

End Sub

這里,子程序“設(shè)置節(jié)點(diǎn)”的功能是查詢“院系”數(shù)據(jù)表和“導(dǎo)師”數(shù)據(jù)表,為TreeView1控件設(shè)置節(jié)點(diǎn),程序代碼如下:

Public Sub 設(shè)置節(jié)點(diǎn)()

  Dim rsx As New ADODB.Recordset

  Dim rs1 As New ADODB.Recordset

  Dim n As Integer

  Dim mySchool As String, SQL As String

   '查詢?cè)合稻幪?hào)和名稱

  Set rsx = cnn.Execute("院系")

   '設(shè)置TreeView1控件的有關(guān)屬性

  With TreeView

       .Nodes.Clear           '清除所有節(jié)點(diǎn)

       .LineStyle = tvwrootlines '顯示節(jié)點(diǎn)之間的樹形線

       .Style = tvwtreelinesplusminuspicturetext  '顯示"+","-"號(hào)

       .Indentation = 20       '間距20

   End With

    'TreeView1控件添加一級(jí)節(jié)點(diǎn)(數(shù)據(jù)庫(kù)名稱)

   TreeView1.Nodes.Add , , "key0", "院系"

    'TreeView1控件添加二級(jí)節(jié)點(diǎn)(數(shù)據(jù)庫(kù)名稱)

    n= 1

   Do While Not rsx.EOF

       TreeView1.Nodes.Add "key0",4,"key" _

           & trim(str(n)),_

           Trim (rsx.Fields("院系名")) & "(" &Trim(rsx.Fields("院系編號(hào)")) & ")"

       '查詢每個(gè)數(shù)據(jù)庫(kù)的所有數(shù)據(jù)表

       pn = n

       n = n + a

       '查詢獲取每個(gè)院系的所有導(dǎo)師名單,并設(shè)置為三級(jí)節(jié)點(diǎn)

        mySchool = Trim(TreeView1.Nodes(n).Text)

       mySchool = Mid(mySchool, InStr(mySchool, "(") + 1)

       mySchool = Left(mySchool, Len(mySchool) - 1)

       SQL = "select * from 導(dǎo)師 where 院系編號(hào)='" & mySchool & "' order by 導(dǎo)師編號(hào)"

       Set rs1 = cnn.Execute(SQL)

       Do While Not rs1.EOF

          TreeView1.Nodes.Add "key" & Trim(Str(pn)), 4, _

                "key" &Trim(Str(n)), Trim(rs1.Fields("姓名"))_

                & "(" &Trim(rs1.Fields("導(dǎo)師編號(hào)")) & ")"

           n = n + 1

           rs1.MoveNext

       Loop

       rsx.MoveNext

    Loop

    '展開二級(jí)節(jié)點(diǎn)

   treeveiw1.Nodes(1).Expanded = True

   Set rs = Nothing

   Set rsx = Nothing

End Sub

3)為TreeView1控件設(shè)置NodeClick事件,當(dāng)單擊其中的某個(gè)導(dǎo)師名稱時(shí),就在窗體右邊的文本框中顯示該導(dǎo)師的基本信息數(shù)據(jù)。程序代碼如下:

Private Sub TreeView1_NodeClick(ByVal nodeAs MSComctlLib.node)

    On Error Resume Next

    Dim rs2 As New ADODB.Recordset

    Dim i As Integer

    Dim SQL As String, mySchool As String, myTeacher As String

    '查詢選定的數(shù)據(jù)表

    mySchool = Trim(node.Parent.Text)

    mySchool = Mid(mySchool, Istr(mySchool, "(") + 1)

    mySchool = Left(mySchool, Len(mySchool) - 1)

    myTeacher = Trim(node.Text)

    myTeacher = Mid(myTeacher, InStr(myTeacher, "(") + 1)

    myTeacher = Left(myTeacher, Len(myTeacher) - 1)

   SQL = "select * from 導(dǎo)師" _

        & "where 院系編號(hào)='" & mySchool & "' and 導(dǎo)師編號(hào)='" & myTeacher & "'"

   rs2.Open SQL, cnn, adOpenDynamic, adLockOptimistic

    'ListView1控件中顯示選擇數(shù)據(jù)表的全部記錄數(shù)據(jù)

   If rs2.BOF And rs2.EOF Then Exit Sub

   For i = 0 To UBound(myArray)

       If inmull(rs2.Fields(i)) Then

           Me.Controls(myArray(i)).Value = ""

       Else

           Me.Controls(myArray(i)).Value = Trim(rs2.Fields(i))

       End If

   Next i

   rs2.Close

   Set rs2 = Nothing

End Sub

4)為【重置窗口】按鈕設(shè)置Click事件,當(dāng)單擊此按鈕,就清空文本框中的數(shù)據(jù)。程序代碼如下:

Private Sub 重置窗口_Click()

   Dim i As Integer

   For i = 0 To UBound(myArray)

       Me.Controls(myArray(i)).Value = ""

   Next i

End Sub

5)為【輸入新記錄】按鈕設(shè)置Click事件,當(dāng)單擊此按鈕,就將文本框中的導(dǎo)師記錄保存到數(shù)據(jù)庫(kù)中。在保存數(shù)據(jù)之前,系統(tǒng)將檢查是否在文本框中都已經(jīng)輸入了數(shù)據(jù),以及輸入的數(shù)據(jù)長(zhǎng)度是否超過(guò)了數(shù)據(jù)庫(kù)規(guī)定的長(zhǎng)度,此外,系統(tǒng)還將檢查在數(shù)據(jù)庫(kù)中是否已經(jīng)存在了指定的導(dǎo)師編號(hào)。保存數(shù)據(jù)后,系統(tǒng)將刷新TreeView1控件的節(jié)點(diǎn)。程序代碼如下:

Private Sub 輸入新記錄_Click()

   Dim i As Integer

   Dim myNo As String, SQL As String, myStr As String

   Dim rs As ADODB.Recordset

    '判斷是否在文本框中輸入了數(shù)據(jù)

   For i = 0 To UBound(myArray)

       If Me.Controls(myArray(i)).Value = "" Then

          MsgBox Me.Controls(myArray(i)).Name & " 不能為空!", vbCritical, "警告"

          Exit Sub

       End If

   Next i

    '判斷輸入的數(shù)據(jù)長(zhǎng)度是否超過(guò)了規(guī)定的長(zhǎng)度

   Set rs = cnn.Execute("導(dǎo)師")

   For i = 0 To rs.Fields.Count - 1

        If Len(Me.Controls(myArray(i)).Value) >rs.Fields(i).DefinedSize Then

           MsgBox "字段<" &Me.Controls(myArray(i)).Name _

                & ">的長(zhǎng)度已經(jīng)進(jìn)過(guò)了數(shù)據(jù)庫(kù)規(guī)定的長(zhǎng)度!" _

                & "下面將自動(dòng)截短!", vbCritical

           Me.Controls(myArray(i)).Value = Left(Me.Controls(myArray(i)).Value, _

                rs.Fields(i).DefinedSize)

           Exit Sub

       End If

   Next i

    '判斷該導(dǎo)師編號(hào)是否已經(jīng)存在

   myNo = 導(dǎo)師編號(hào).Value

   SQL = "select 導(dǎo)師編號(hào) from 導(dǎo)師 where 導(dǎo)師編號(hào)='" & myNo & "'"

   Set rs = cnn.Execute(SQL)

   If rs.EOF And rs.BOF Then

       MsgBox "下面將把該導(dǎo)師數(shù)據(jù)保存到數(shù)據(jù)庫(kù)!", vbExclamation

       myStr = "values("

       myStr = myStr & "'" & 導(dǎo)師編號(hào).malue& "','" & 姓名.Value _

           & "','" & 性別.Value& "','" & 職稱.Value & "','" & 院系編號(hào).Value & "')"

       SQL = "insert into 導(dǎo)師" & myStr

       cnn.Execute SQL

       MsgBox "數(shù)據(jù)添加成功!", vbInformation

   Else

       MsgBox "該導(dǎo)師編號(hào)已經(jīng)存在!請(qǐng)重新設(shè)置編號(hào)!", vbCritical, "警告"

   End If

   Set rs = Nothing

   Call 設(shè)置節(jié)點(diǎn)

   Call 重置窗口_Click

End Sub

6)為【修改記錄】按鈕設(shè)置Click事件,當(dāng)單擊此按鈕,就將文本框中的導(dǎo)師記錄作為修改后的數(shù)據(jù)保存到數(shù)據(jù)庫(kù)中。修改數(shù)據(jù)后,系統(tǒng)將刷新TreeView1控件的節(jié)點(diǎn)。程序代碼如下:

Private Sub 修改記錄_Click()

   Dim myNo As String, SQL As String, myStr As String

   If MsgBox("下面將把該導(dǎo)師數(shù)據(jù)保存到數(shù)據(jù)庫(kù)!是否進(jìn)行修改?", _

        vbQuestion + vbYesNo) = vbYes Then

        SQL = "update 導(dǎo)師 set" _

            & "導(dǎo)師編號(hào)='" & 導(dǎo)師編號(hào).Value & " '," _

            & "姓名='" & 姓名.Value & "'," _

            & "性別='" & 性別.Value & "'," _

            & "職稱='" & 職稱.Value & "'," _

            & "院系編號(hào)='" & 院系編號(hào).Value & "'," _

            & "where 導(dǎo)師編號(hào)='" & 導(dǎo)師編號(hào).Value & "'"

   cnn.Execute SQL

       MsgBox "數(shù)據(jù)修改成功!", vbInformation

    Else

       MsgBox "修改數(shù)據(jù)操作被取消!", vbExclamation

   End If

   Call 設(shè)置節(jié)點(diǎn)

   Call 重置窗口_Click

End Sub

7)為【刪除記錄】按鈕設(shè)置Click事件,當(dāng)單擊引按鈕,就將文本框中的指定的導(dǎo)師編號(hào)記錄從數(shù)據(jù)庫(kù)中刪除。刪除數(shù)據(jù)后,系統(tǒng)將刷新TreeView1控件的節(jié)點(diǎn)。程序代碼如下:

Private Sub 刪除記錄_Click()

   Dim myNo As String, SQL As String, myStr As String

   If MsgBox("下面將把該導(dǎo)師數(shù)據(jù)從數(shù)據(jù)庫(kù)中刪除!是否刪除?", _

        vbQuestion + vbYesNo) = vbYes Then

        SQL = "delete from 導(dǎo)師 where 導(dǎo)師編號(hào)='"& 導(dǎo)師編號(hào).Value & " '"

   cnn.Execute SQL

       MsgBox "數(shù)據(jù)刪除成功!", vbInformation

    Else

       MsgBox "刪除數(shù)據(jù)操作被取消!", vbExclamation

   End If

   Call 設(shè)置節(jié)點(diǎn)

   Call 重置窗口_Click

End Sub

8)為【關(guān)閉窗口】按鈕設(shè)置Click事件,當(dāng)單擊此按鈕時(shí),就關(guān)閉窗體,程序代碼如下:

Private Sub 關(guān)閉窗口_Click()

   cnn.Close

   Set cnn = Nothing

   Unload uwerform1

End Sub

14.4.3 應(yīng)用說(shuō)明

1)啟動(dòng)窗體,如圖14-7所示。

2)單擊窗體左邊TreeView1控件中的院系下的某個(gè)導(dǎo)師名稱,就在窗體右邊的文本框中顯示該導(dǎo)師的基本信息數(shù)據(jù),如圖14-8所示。

3)單擊【重置窗口】按鈕,清除文本框的數(shù)據(jù),然后輸入新的導(dǎo)師信息數(shù)據(jù),如圖14-9所示,單擊【輸入新記錄】按鈕,就將該導(dǎo)師的信息數(shù)據(jù)保存到數(shù)據(jù)庫(kù)中,如圖14-10所示。

4)通過(guò)單擊窗體左邊TreeView1控件中的院系下的某個(gè)導(dǎo)師名稱,在窗體右邊的文本框中顯示該導(dǎo)師的基本信息數(shù)據(jù),然后對(duì)需要的數(shù)據(jù)進(jìn)行修改,單擊【修改記錄】按鈕,就可以對(duì)數(shù)據(jù)庫(kù)中指定編號(hào)的導(dǎo)師記錄進(jìn)行修改。

5)通過(guò)單擊窗體左邊TreeView1控件中的院系下的某個(gè)導(dǎo)師名稱,在窗體右邊的文本框中顯示出該導(dǎo)師的基本信息數(shù)據(jù),然后單擊【刪除記錄】按鈕,就可以從數(shù)據(jù)庫(kù)中將該編號(hào)的導(dǎo)師記錄刪除。

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
Excel 根據(jù)工作表批量更新Access數(shù)據(jù)庫(kù)并向數(shù)據(jù)庫(kù)添加不存在的記錄(不使用循環(huán))
將數(shù)據(jù)庫(kù)記錄數(shù)據(jù)全部導(dǎo)入到excel工作表
Excel、VBA與MySQL交互
vba 連接數(shù)據(jù)庫(kù)(vba中主要提供了3種數(shù)據(jù)庫(kù)訪問(wèn)接口)
Vb 6.0與SQL Sever建立連接
VB ACCESS數(shù)據(jù)庫(kù)的修改、刪除、添加
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服