VB 数据库操作
VB 数据库操作对很多初学者朋友感到比较吃力,目前教材中的实例对数据
库操作都比较单一,很多朋友提议我做一个包括浏览、添加、修改、删除功能的
数据库操作实例,下面这个实例就是一个这样的数据库操作实例。
《书库管理系统》是一个最简单的数据库操作实例,它包括浏览、添加、
修改、删除功能的数据库操作,使用数据链接控件 Adodc 链接数据库、数据显示
控件 MSHFlexGrid 显示数据库中的记录。
在新建工程时工具箱中是没有 Adodc 控件和 MSHFlexGrid 控件的,我们必
须点击菜单中的【工程】-【部件】,在对话框中勾选“Microsoft ADO Data Control
6.0 (SP6)”和“Microsoft Hierarchical FlexGrid Control 6.0 (SP4)”,最
后点击【确定】,这样 Adodc 控件和 MSHFlexGrid 控件就已经放置在工具箱中了。
其中 Adodc 控件的 ConnectionString 属性值是:
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=家庭书架.mdb;Persist
Security Info=False",它设置链接了“家庭书架.mdb”这个 Access 数据库,
RecordSourc 属性值是:"select 图书登记表.ID,图书登记表.名称,图书登记
表.书号,图书登记表.作者,图书登记表.出版社,图书登记表.出借状态,出借记
录.借书人,出借记录.电话,出借记录.地址,图书登记表.备注,图书登记表.出借
记录 from 图书登记表,出借记录 where 图书登记表.ID=出借记录.zhuID
ORDER BY 图书登记表.ID",因为在“家庭书架.mdb”数据库中包含"图书登记表
"和"出借记录"二个数据表,这是多表链接的典型的 SQL 语句。Adodc 的这二个
属性值在 VB 的属性窗口进行编辑,你可以将上述属性值直接输入到相应的属性
中,设置 Visible 的值为 False,目的是在运行中不显示这个控件,其他属性默
认值即可。
MSHFlexGrid 控件的名称我们修改为 MS1,它的属性设置稍稍比较麻烦:
首先将它的 DataSource 属性在属性窗口设置为"Adodc1";
然后在对象窗口右击控件,在下拉菜单中点击【属性】,在“通用”标签
中修改行为 3,修改列为 11,修改固定行为 0,修改固定列为 0,如果数据链接
没有问题,在属性的“带区”标签中可以看到列标题和列名称已经设置了,其他
属性页的属性可以容许默认值,中点击【确定】即可。
另外在属性窗口设置 MSHFlexGrid 控件的 BackColorBkg 属性为
&H00FFE0E0&,这个属性是控件底色的设置,然后设置 BackColorFixed 属性为
&H00C0FFFF&,这个属性是控件数据显示标题的底色。其他默认值即可。
最后放置三个按钮,一个标签,三个 Frame 控件,在 Frame1、Frame2、Frame3
控件中分别放置 9 个标签(数组),8 个文本框,一个下拉选择框,一个按钮,
在 Frame2、Frame3 控件中分别放置一个标签,设置这个标签的 Visible 值为
False,其他设置参考下图:
设置和调整控件如上图后,设置数据库,在程序目录新建一个 Access 数据
库,修改数据库的名称为“家庭书架.mdb”,新建二个数据表,分别是:“图书
登记表”和“出借记录”:
在“图书登记表”中添加字段:“ID”为自动编号、主键,“名称”为文
本、大小 50,“书号”为文本、大小 30,“作者”为文本、大小 40,“出版社”
为文本、大小 60,“出借状态”为文本、大小 20,“出借记录”为数字、长整
型,“备注”为文本、大小 50;
在“出借记录”中添加字段:“ID”为自动编号、主键,“zhuID”为数字、
长整型,“名称”为文本、大小 50,“借书人”为文本、大小 20,“电话”为
文本、大小 20,“地址”为文本、大小 50。
数据库设置成功。
最后点击【视图】-【代码窗口】输入下面的代码:
'模块级变量
Dim ZFC As String
Dim ROSX As Integer
'-------------------------------------
'添加记录事件
Private Sub Command1_Click()
'添加记录
Dim FL As String, XID As Long
FL = App.Path & "\家庭书架.mdb"
Set conn = OpenDatabase(FL)
strSQL = "Select * From 图书登记表"
Set rs = conn.OpenRecordset(strSQL)
rs.AddNew
rs!名称 = Text1(0).Text
rs!书号 = Text1(1).Text
rs!作者 = Text1(2).Text
rs!出版社 = Text1(3).Text
rs!出借状态 = Combo1.Text
rs!备注 = Text1(7).Text
If Combo1.Text = "出借" Then rs!出借记录 = 1
rs.Update
rs.Close
Set rs = Nothing
strSQL = "Select * From 图书登记表 Order By ID Desc"
Set rs = conn.OpenRecordset(strSQL)
XID = rs!ID
rs.Close
Set rs = Nothing
strSQL = "Select * From 出借记录"
Set rs = conn.OpenRecordset(strSQL)
If Combo1.Text = "出借" Then
rs.AddNew
rs!zhuID = XID
rs!名称 = Text1(0).Text
rs!借书人 = Text1(4).Text
rs!电话 = Text1(5).Text
rs!地址 = Text1(6).Text
rs.Update
Else
rs.AddNew
rs!zhuID = XID
rs!名称 = ""
rs!借书人 = "没有出借"
rs!电话 = "无"
rs!地址 = "无"
rs.Update
End If
rs.Close
Set rs = Nothing
conn.Close
MsgBox "记录添加成功!"
Unload Me
书库管理.Show
End Sub
'-------------------------------------
'修改记录事件
Private Sub Command2_Click()
'修改记录
If Val(Label4.Caption) = 0 Then
MsgBox "没有选择要修改的记录!"
Exit Sub
End If
Dim FL As String
FL = App.Path & "\家庭书架.mdb"
Set conn = OpenDatabase(FL)
strSQL = "Select * From 图书登记表 Where ID=" & Val(Label4.Caption) & ""
Set rs = conn.OpenRecordset(strSQL)
rs.Edit
rs!名称 = Text2(0).Text
rs!书号 = Text2(1).Text
rs!作者 = Text2(2).Text
rs!出版社 = Text2(3).Text
rs!出借状态 = Combo2.Text
rs!备注 = Text2(7).Text
If Combo2.Text = "出借" Then rs!出借记录 = 1
rs.Update
rs.Close
Set rs = Nothing
strSQL = "Select * From 出借记录 Where zhuID=" & Val(Label4.Caption) &
""
Set rs = conn.OpenRecordset(strSQL)
If Combo2.Text = "出借" Then
If Not rs.EOF Then
rs.Edit
rs!名称 = Text2(0).Text
rs!借书人 = Text2(4).Text
rs!电话 = Text2(5).Text
rs!地址 = Text2(6).Text
rs.Update
Else
rs.AddNew
rs!zhuID = Val(Label4.Caption)
rs!名称 = Text2(0).Text
rs!借书人 = Text2(4).Text
rs!电话 = Text2(5).Text
rs!地址 = Text2(6).Text
rs.Update
End If
Else
If Not rs.EOF Then
rs.Edit
rs!名称 = Text2(0).Text
rs!借书人 = "没有出借"
rs!电话 = "无"
rs!地址 = "无"
rs.Update
Else
rs.AddNew
rs!zhuID = Val(Label4.Caption)
rs!名称 = Text2(0).Text
rs!借书人 = "没有出借"
rs!电话 = "无"
rs!地址 = "无"
rs.Update
End If
End If
rs.Close
Set rs = Nothing
conn.Close
MsgBox "记录修改成功!"
Label4.Caption = ""
Unload Me
书库管理.Show
End Sub
'-------------------------------------
'添加记录连接
Private Sub Command3_Click()
Frame1.Visible = True
Frame2.Visible = False
Frame3.Visible = False
ZFC = "添加"
For i = 0 To 7
Text1(i).Text = ""
Next i
Combo1.Text = ""
Command1.Visible = True
Label5.Caption = "现在正在添加图书资料"
End Sub
'-------------------------------------
'修改记录连接
Private Sub Command4_Click()
Frame1.Visible = False
Frame2.Visible = True
Frame3.Visible = False
ZFC = "修改"
For i = 0 To 7
Text2(i).Text = ""
Next i
Combo2.Text = ""
Label4.Caption = ""
Command2.Visible = True
Label5.Caption = "现在正在修改图书资料"
End Sub
'-------------------------------------
'删除记录连接
Private Sub Command5_Click()
Frame1.Visible = False
Frame2.Visible = False
Frame3.Visible = True
ZFC = "删除"
For i = 0 To 7
Text3(i).Text = ""
Next i
Combo3.Text = ""
Label1.Caption = ""
Command6.Visible = True
Label5.Caption = "现在正在删除图书资料"
End Sub
'-------------------------------------
'删除记录事件
Private Sub Command6_Click()
'删除记录
Dim SS As Integer
SS = MsgBox("确实要删除这个记录吗?", vbOKCancel, "删除确认!")
If SS = 1 Then
If Val(Label1.Caption) = 0 Then
MsgBox "没有选择要修改的记录!"
Exit Sub
End If
Dim FL As String, XID As Long
FL = App.Path & "\家庭书架.mdb"
Set conn = OpenDatabase(FL)
strSQL = "Select * From 图书登记表 Where ID=" & Val(Label1.Caption) & ""
Set rs = conn.OpenRecordset(strSQL)
rs.Delete
rs.Close
Set rs = Nothing
strSQL = "Select * From 出借记录 Where zhuID=" & Val(Label1.Caption) &
""
Set rs = conn.OpenRecordset(strSQL)
rs.Delete
rs.Close
Set rs = Nothing
conn.Close
MsgBox "记录删除成功!"
Unload Me
书库管理.Show
Else
MsgBox "取消了删除记录!"
End If
End Sub
'-------------------------------------
'页面启动事件
Private Sub Form_Load()
Dim strSQL As String
Frame1.Visible = False
Frame2.Visible = False
Frame3.Visible = False
Label5.Caption = "现在正在浏览图书资料"
MS1.BackColorBkg = &HFFE0E0
End Sub
'-------------------------------------
'点击 MSHFlexGrid 控件中记录的事件
Private Sub MS1_Click()
Dim i As Integer, COLX As Integer
COLX = MS1.Col
ROSX = MS1.Row
If ZFC = "添加" Then
For i = 0 To 7
Text1(i).Text = ""
Next i
Combo1.Text = ""
ElseIf ZFC = "修改" Then
Text2(0).Text = MS1.TextMatrix(ROSX, 1)
Text2(1).Text = MS1.TextMatrix(ROSX, 2)
Text2(2).Text = MS1.TextMatrix(ROSX, 3)
Text2(3).Text = MS1.TextMatrix(ROSX, 4)
Combo2.Text = MS1.TextMatrix(ROSX, 5)
Text2(4).Text = MS1.TextMatrix(ROSX, 6)
Text2(5).Text = MS1.TextMatrix(ROSX, 7)
Text2(6).Text = MS1.TextMatrix(ROSX, 8)
Text2(7).Text = MS1.TextMatrix(ROSX, 9)
Label4.Caption = MS1.TextMatrix(ROSX, 0)
Label5.Caption = "已经选择记录准备修改"
ElseIf ZFC = "删除" Then
Text3(0).Text = MS1.TextMatrix(ROSX, 1)
Text3(1).Text = MS1.TextMatrix(ROSX, 2)
Text3(2).Text = MS1.TextMatrix(ROSX, 3)
Text3(3).Text = MS1.TextMatrix(ROSX, 4)
Combo3.Text = MS1.TextMatrix(ROSX, 5)
Text3(4).Text = MS1.TextMatrix(ROSX, 6)
Text3(5).Text = MS1.TextMatrix(ROSX, 7)
Text3(6).Text = MS1.TextMatrix(ROSX, 8)
Text3(7).Text = MS1.TextMatrix(ROSX, 9)
Label1.Caption = MS1.TextMatrix(ROSX, 0)
Label5.Caption = "已经选择记录准备删除"
ElseIf ZFC = "" Then
CL = MS1.Col
For i = 1 To MS1.Cols
MS1.Col = i - 1
MS1.CellBackColor = vbWhite
Next i
MS1.Col = CL
End If
MS1.Col = C0LX
MS1.CellBackColor = &H119911
End Sub
'-------------------------------------
'离开该行时将该行的颜色恢复为白色的事件
Private Sub MS1_LeaveCell()
Dim i As Integer
Dim CL As Integer
'离开该行时将该行的颜色恢复为白色
CL = MS1.Col
For i = 1 To MS1.Cols
MS1.Col = i - 1
MS1.CellBackColor = vbWhite
Next i
MS1.Col = CL
End Sub
下面是出现运行的情况: