第一卷 數據庫開發和應用

Visual Basic從初級的版本開始到現在的6.0版本,給與數據庫的訪問和操作以強有力的支持。特別是6.0版本在原有支持的Access、FoxPro和Dbase的基礎上拓展了功能,對於目前最流行的Oracle和SQL Sever數據庫以強有力的支持,與這兩個大型數據庫的接口更為方便。可以說,Visual Basic 中最吸引人的地方,同時也是人們最關心的地方,就是Visual Basic 的強大的數據庫開發功能。

本章,我們主要就Visual Basic 6.0中經典的數據庫開發技術作一介紹,通過學習讓讀者掌握Visual Basic中高級的數據庫開發知識。

第一章 VB中的數據庫概述

7.1.1 數據庫概述

數據庫應用程序分為三個部分:用戶界麵、數據庫引擎和數據庫。

用戶界麵包括一些應用程序代碼,這部分是用來讓用戶訪問數據庫並與數據庫交互的界麵,顯然該界麵允許用戶對於數據庫進行查詢、修改等操作。但是這些操作並不是用戶界麵直接向數據庫進行交換,而是通過數據庫引擎。

數據庫引擎是用來對接用戶界麵要求的操作翻譯成數據庫能夠理解的操作,而把數據庫儲存的資料介紹給用戶界麵。數據庫是由包含多個文件和表的集合,該結合提供了一定順序的大量資料。

下麵介紹一下使用數據庫常用的一些基本術語:

* 表

表是一種按行和列排列的相關信息的邏輯組,類似於工作表單。例如一張表可以包含一個學生的和多信息,姓名、年齡大小等等。

* 字段

數據庫表中的每一列稱作一個字段。表是由其包含的各種字段定義的,每個字段描述了它所包含的數據。創建一個數據庫時,為每個字段分配一個數據類型、最大長度和其他屬性。字段何以包含各種字符、數字甚至是圖形。

* 記錄

各個不同的學生的資料存放在表的行,被稱之為記錄。一般來說表在創建時,任意兩行不能相同。

* 索引

為更快的訪問數據庫,大多數數據庫都有索引。數據庫表的索引是比表搜索更快的序列。

實質上,整個數據庫的構造和使用即查詢、修改是一個很大的工程。而且數據庫的使用和類型很不一樣,在這裏隻能做簡單的介紹。

7.1.2 VB與數據庫

在本章中將重點放在應用程序界麵上。不會對引擎和數據庫做太多的介紹。

一般情況下,VB對於數據庫的訪問可有以下幾種方式:

* 訪問VB數據庫

可以直接方便的訪問VB數據庫,該數據庫主要是Access格式。

* 訪問外部數據庫

可以方便的訪問ISAM數據庫。不僅可以方便的訪問DBase、FoxPro和Paradox數據庫,還可以方便的使用索引順序方法來方便的訪問類Ascii文本文件的數據庫;

* 訪問ODBC數據庫

可以以良好的接口性能實現對於遠程大型數據庫的訪問,比如對於Oracle和SQL Sever遠程數據庫的訪問和操作。

在設計過程中可以靈活的對以上幾種方式的進行訪問和操作。

第二章 第一個數據庫程序

在Visual Basic 6.0中的缺省工具箱上有一個數據控件--Data控件,同時TextBox控件和Label控件都是Data控件的束縛控件,在程序設計過程中,可以把這兩個控件捆綁到Data控件上,這樣,在程序運行的過程中,就可以利用TextBox控件和Label控件顯示數據庫中的數據。

下麵就以一個示例程序來說明,如何在程序設計和運行的過程中,協調TextBox控件、Label控件和Data控件來顯示數據庫中的內容。具體的程序設計步驟如下所示:

1.開始工作

首先,在Visual Basic 的集成開發環境中用鼠標選擇"文件"菜單中"新建工程"選項,在屏幕上就會彈出一個如圖7-1所示的"新建工程"對話框。

圖7-1 新建工程對話框

在"新建工程"對話框中選擇"標準EXE"選項,單擊"確定"按鈕,在Visual Basic 中就新建了一個標準的工程文件,同時打開了一個空白的窗體。

窗體的屬性設置如下所示:

Begin Visual Basic.Form Form1

BorderStyle = 3

Caption = "數據庫瀏覽程序:"

MaxButton = 0

MinButton = 0

Moveable = 0

ScaleHeight = 4590

ScaleWidth = 6885

ShowInTaskbar = 0

StartUpPosition = 2

End

經過以上屬性設置後的窗體具有如下所示的特性:

* 程序運行過程中,窗體位於屏幕的中央,並且用戶不能夠移動窗體;

* 窗體的標題欄中顯示文本"數據庫瀏覽程序";

* 窗體的標題欄中沒有最大化和最小化按鈕,隻有關閉按鈕;

* 在程序運行的過程,用戶不能夠改變窗體的大小。

在本示例程序中,由於要利用利用數據控件Data及其束縛控件(TextBox控件和Label控件)進行數據顯示操作,所以在程序設計的過程中要向空白的窗體上添加一個Data控件、四個Label控件和四個TextBox控件,它們的作用在後麵會加以敘述,添加數據顯示控件後的窗體如圖7-2所示。

圖7-2 添加數據顯示控件後的窗體

添加到窗體上的各個控件的屬性設置如下所示:

Begin Visual Basic.TextBox Text4

DataField = "Address"

DataSource = "Data1"

Height = 495

Left = 2280

Top = 1800

Width = 3375

End

Begin Visual Basic.TextBox Text3

DataField = "Telephone"

DataSource = "Data1"

Height = 495

Left = 2280

Top = 2520

Width = 3375

End

Begin Visual Basic.TextBox Text2

DataField = "Company

Name"

DataSource = "Data1"

Height = 495

Left = 2280

Top = 1080

Width = 3375

End

Begin Visual Basic.TextBox Text1

DataField = "Name"

DataSource = "Data1"

Height = 495

Left = 2280

Top = 360

Width = 3375

End

Begin Visual Basic.Data Data1

Align = 2

Connect = "Access"

DatabaseName = "D:\MicrosoftVisualStudio\Visual Basic98\

Biblio.mdb"

ReadOnly = 0

RecordsetType = 1

RecordSource = "Publishers"

Visible = 0

End

Begin Visual Basic.Label Label4

Caption = "公司地址:"

End

Begin Visual Basic.Label Label3

Caption = "公司電話:"

End

Begin Visual Basic.Label Label2

Caption = "公司全名:"

End

Begin Visual Basic.Label Label1

Caption = "名稱:"

End

添加到窗體上的各個控件的作用如下所示:

* Data控件:在程序設計和運行的過程中,為用戶和數據庫中間提供一個接口,通過這個接口,用戶可以對數據庫進行操作;

* Label控件:在程序運行的過程中顯示固定的提示文本"名稱:"、"公司全名:"、"公司地址:"和"公司電話";

* Text1控件:在程序運行的過程中,顯示指定數據庫位置的名稱信息;

* Text2控件:在程序運行的過程中,顯示指定數據庫位置的公司名稱信息;

* Text3控件:在程序運行的過程中,顯示指定數據庫位置的公司電話信息;

* Text4控件:在程序運行的過程中,顯示指定數據庫位置的公司地址信息。

2.添加控製按鈕

從前麵數據控件的屬性設置中我們可以看出,在程序運行的過程中,數據控件是處於不可見狀態的,為了能夠在數據控件隱藏的條件下也能夠瀏覽數據庫,就要向項目中添加控件按鈕。

注意:

* 數據庫控件是一種隱性控件,和我們在前麵學習的可視化控件不同。

為此,在程序設計的過程中,向窗體上添加四個CommandButton控件,它們的屬性設置如下所示:

Begin Visual Basic.CommandButton Command4

Caption = "最後一條記錄"

Height = 495

Left = 3840

Top = 3960

Width = 1815

End

Begin Visual Basic.CommandButton Command3

Caption = "後一條記錄"

Height = 495

Left = 960

Top = 3960

Width = 1815

End

Begin Visual Basic.CommandButton Command2

Caption = "前一條記錄"

Height = 495

Left = 3840

Top = 3240

Width = 1815

End

Begin Visual Basic.CommandButton Command1

Caption = "第一條記錄"

Height = 495

Left = 960

Top = 3240

Width = 1815

End

添加控製按鈕後的窗體如圖7-3所示。

圖7-3 添加按鈕控件後的窗體

添加到窗體上的四個控製按鈕的作用如下所示:

* Command1按鈕:在程序運行的過程中,顯示當前數據庫中的第一條記錄;

* Command2按鈕:在程序運行的過程中,顯示當前數據庫中的前一條記錄;

* Command3按鈕:在程序運行的過程中,顯示當前數據庫中的後一條記錄;

* Command4按鈕:在程序運行的過程中,顯示當前數據庫中的最後一條記錄。

3.程序初始化

在本示例程序中,所謂程序的初始化,指的就是為窗體事件Private Sub Form_Load()添加響應代碼。

在程序設計的過程中,首先用鼠標雙擊窗體上的空白處,在屏幕上就會彈出一個代碼窗口,在代碼窗口的對象列表中選擇窗體Form,在對應的事件列表中選擇窗體的初始化事件Private Sub Form_Load(),打開的代碼編輯窗口如圖7-4所示。

圖7-4 代碼編輯窗口

在代碼編輯窗口把光標移動到Private Sub Form_Load()事件的處理過程中,並且添加如下所示的程序初始化代碼:

Private Sub Form_Load()

Form1.Data1.DatabaseName = "D:\Microsoft Visual Studio\Visual Basic98\Biblio.mdb"

'設置打開的數據庫路徑及名字

Form1.Data1.RecordSource = "Publishers"

'設置顯示數據源

Form1.Text1.DataField = "name"

Form1.Text2.DataField = "company name"

Form1.Text3.DataField = "telephone"

Form1.Text4.DataField = "address"

'設置文本框顯示字段名稱

Form1.Command1.Enabled = True

Form1.Command2.Enabled = False

Form1.Command3.Enabled = True

Form1.Command4.Enabled = True

'設置控件的有效狀態

End Sub

窗體Private Sub Form_Load()事件中的代碼在對話框窗體被激活的初期就被執行,程序首先會通過語句Form1.Data1.DatabaseName = "D:\Microsoft Visual Studio\Visual Basic98\ Biblio.m-db"和Form1.Data1.RecordSource = "Publishers"設置了打開的數據庫路徑、名字及顯示數據源,然後程序通過Form1.Text1.DataField = "name"等四條語句設置了文本框顯示字段的名稱。

技巧:

* 在程序初始化的最後,通過四條語句設置了按鈕的有效狀態。

經過程序初始化後的運行窗體如圖7-5所示。

圖7-5 程序初始化後的運行窗體

4.響應按鈕操作

在窗體上放置有四個按鈕控件,它們是在數據控件處於不可見的狀態執行數據瀏覽操作,為此,在程序設計的過程中,首先用鼠標激活程序設計的代碼窗口,在代碼窗口的對象列表中分別選擇按鈕Command1、Command2、Command3和Command4,在對應的事件列表中選擇按鈕的響應事件Private Sub Command1_Click()、Private Sub Command2_Click()、Private Sub Command3_Click()和Private Sub Command4_Click(),把光標移動到事件處理過程中,並且添加如下所示的響應代碼:

Private Sub Command1_Click()

Form1.Data1.Recordset.MoveFirst

End Sub

Private Sub Command2_Click()

If Not Form1.Data1.Recordset.BOF Then

Form1.Data1.Recordset.MovePrevious

Else

Form1.Data1.Recordset.MoveFirst

End If

End Sub

......

Private Sub Command4_Click()

Form1.Data1.Recordset.MoveLast

End Sub

在程序運行的過程中,當用戶單擊窗體上的"第一條記錄"按鈕、"前一條記錄"按鈕、"後一條記錄"按鈕 和"最後一條記錄"按鈕時,就會激活控件的Private Sub Command1_Click()、Private Sub Command2_Click()、Private Sub Command3_Click()和Private Sub Command4_Click()事件,程序就會通過數據控件Recordset方法中的MoveFirst方法、MovePrevious方法、MoveNext方法和MoveLast方法在當前的數據庫中分別顯示第一條記錄、前一條記錄、後一條記錄和最後一條記錄。

5.響應數據控件事件

注意:

* 在窗體上放置有四個按鈕,但是有兩個按鈕值得注意--"前一條記錄"按鈕和"後一條記錄"按鈕。

如果數據庫的指針移動到數據庫的開頭或數據庫的結尾,那麼單擊"前一條記錄"按鈕和"後一條記錄"按鈕時,程序就不能夠正常的顯示數據庫中的內容。為了避免以上錯誤的發生,在程序設計的過程中,首先用鼠標激活程序設計的代碼窗口,在代碼窗口的對象列表中選擇數據控件Data1,在對應的事件列表中選擇數據控件響應事件Private Sub Data1_Validate(Action As Integer, Save As Integer),把光標移動到事件處理過程中,並且添加如下所示的響應代碼:

Private Sub Data1_Validate(Action As Integer, Save As Integer)

If Form1.Data1.Recordset.BOF Then

Form1.Command2.Enabled = False

Else

Form1.Command2.Enabled = True

End If

If Form1.Data1.Recordset.EOF Then

Form1.Command3.Enabled = False

Else

Form1.Command3.Enabled = True

End If

End Sub

在程序運行的過程中,當用戶完成一次對數據庫的有效操作後,就會激活數據控件的Private Sub Data1_Validate(Action As Integer, Save As Integer)事件,然後程序通過兩條條件語句來設置"前一條記錄"按鈕和"後一條記錄"按鈕的有效狀態,由於實行了動態跟蹤的技術,所以避免了數據庫顯示錯誤的發生。

6.運行程序

按照附後的源程序清單添加剩餘的程序代碼。

用鼠標選擇菜單"文件"中的"保存"來存儲文件,然後在鍵盤上按下功能鍵F5運行程序,程序運行結果如圖7-6所示。

圖7-6 程序運行結果

附程序完整源代碼如下所示:

程序清單

VERSION 6.00

Begin Visual Basic.Form Form1

BorderStyle = 3

Caption = "Form1"

ClientHeight = 4590

ClientLeft = 45

ClientTop = 330

ClientWidth = 6885

LinkTopic = "Form1"

MaxButton = 0

MinButton = 0

Moveable = 0

ScaleHeight = 4590

ScaleWidth = 6885

ShowInTaskbar = 0

StartUpPosition = 2

End

Attribute Visual Basic_Name = "Form1"

Attribute Visual Basic_GlobalNameSpace = False

Attribute Visual Basic_Creatable = False

Attribute Visual Basic_PredeclaredId = True

Attribute Visual Basic_Exposed = False

Private Sub Command1_Click()

Form1.Data1.Recordset.MoveFirst

'移動到第一條記錄

End Sub

Private Sub Command2_Click()

If Not Form1.Data1.Recordset.BOF Then

'如果沒有到達數據庫開頭

Form1.Data1.Recordset.MovePrevious

'移動到前一條記錄

Else

'如果到達了數據庫開頭

Form1.Data1.Recordset.MoveFirst

'移動到第一條記錄

End If

End Sub

Private Sub Command3_Click()

If Not Form1.Data1.Recordset.EOF Then