一次解析文件2行-英雄云拓展知识分享
118
2023-11-07
【摘要】 本书摘自《Excel VBA+SQL数据管理与应用模板开发》一书中第4章,第4节,韩小良著。
4.4 通过窗体对数据进行维护: 一个简单示例
在实际的工作表维护中,需要经常对数据进行修改、添加、删除等操作,若在 代码中修改就非常不方便了,况且也不是这么做数据管理的。此时,可以设计一个 用户窗体,通过窗体界面来添加数据、查询数据、修改数据和删除数据等。关于窗 体及控件的介绍,请参阅第6章的内容。
数据表结构请参阅前面的图4-1。
4.4.1 设 计 用 户 窗 体
下面是一个简单的窗体示例,可以实现数据的浏览、保存、查询、修改、删除等功能
6个文本框的名字被命名为了字段的名称,这样便于识别、引用字段和引用文本框。 9 个命令按钮的名称和标题(Caption)是一样的,这样也便于使用命令按钮。
在启动窗体时,自动建立与工作簿的连接,查询工作表所有数据,以便可以通过单击窗 口底部的4个浏览按钮来浏览每个合同的信息。窗体的初始化程序如下:
'定义窗体模块级变量
Dim cnn As New ADODB.Connection
Dim rs AsADODB.Recordset
Dim ws As Worksheet
Dim Ctr As Variant
Private Sub UserForm_Initialize)
Dim SQL As String
'指定工作表
Set ws = ThisWorkbook.Worksheets("合同信息")
'指定控件数组
Ctr= Array("合同号","合同名称","供货单位","合同金额","签订日期","交货日期")
'建立与工作簿的连接
With cnn
.Provider ="microsoft.ace.oledb.12.0"
. ConnectionString ="Extended Properties=Excel 12.0;"_
&" Data Source=" & ThisWorkbook.FullName
.Open
End With
'查找所有数据
SQL=" select * from [合同信息$]"
Set rs = New ADODB.Recordset
rs.Open SQL, cnn, adOpenKeyset, adLockOptimistic
End Sub
4.4.3 浏览数据
窗体底部是4个浏览按钮,单击它们可以分别查看某条合同数据。这4个游览按钮的 Click 事件程序代码如下:
Private Sub 第一条_Click0
rs.MoveFirst
If rs.BOF =True Then Exit Sub
Dim i As Integer
Fori=0 To UBound(Ctr)
Me.Controls(Ctr(i)).Value =rs.Fields(i)
Next i
End Sub
Private Sub 上一条_Click0
rs.MovePrevious
If rs.BOF =True Then Exit Sub
Dim i As Integer
Fori=0 To UBound(Ctr)
Me.Controls(Ctr(i).Value =rs.Fields(i)
Next i
End Suh
Private Sub 下一条_Click0
rs.MoveNext
If rs.EOF =True Then Exit Sub
Dim i As Integer
Fori=0 To UBound(Ctr)
Me.Controls(Ctr(i).Value =rs.Fields(i)
Nexti
End Sub
Private Sub 最末条_Click(
rs.MoveLast
If rs.EOF =True Then Exit Sub
Dim i AsInteger
Fori =0 To UBound(Ctr)
Me.Controls(Ctr(i). Value =rs.Fields(i)
Next i
End Sub
当在窗体中输入了一个新合同数据后,单击“保存”按钮,就将数据保存到工作表中。这里, 我们使用 Recordset 对象的 AddNew 方法来保存数据。程序代码如下:
Private Sub 保存_Click0
Dim i AsInteger
With rs
.AddNew
Fori =0 To UBound(Ctr)
.Fields(i).Value = Me.Controls(Ctr(i). Value
Next i
.Update
End With
MsgBox "保存成功!"
End Sub
单击“查询”按钮,就可以查询并显示指定的合同号信息,这里我们以“合同号”为关 键字段来查询。程序代码如下:
Private Sub 查询_Click)
DimID As String, SQL As String,i As Integer
Dim rsx As New ADODB.Recordset
'清空窗体中的旧数据
Fori =0 To UBound(Ctr)
Me.Controls(Ctr(i).Value =""
Next i
'指定合同号
ID=InputBox(" 请输入要查询的合同号:","输入合同号")
'查询指定的合同
SQL="select*from [合同信息$]where 合同号='"'&ID&"""
rsx.Open SQL,cnn,adOpenKeyset,adLockOptimistic
'将查询出的数据显示到窗体中
If rsx.RecordCount =0 Then
MsgBox" 没有查找指定合同号的信息!"vbCritical,"查询"
Exit Sub
End If
Fori=0 To UBound(Ctr)
Me.Controls(Ctr(i).Value =rsx.Fields(i)
Next i
rsx.Close
Set rsx =Nothing
End Sub
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们 18664393530@aliyun.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~