2024年4月25日发(作者:)
维普资讯
ol 霪
l Visual
Basic 6.0开发数据库应用程序的几个实用
{
li
;
黄
(新疆钢铁学校,新疆
英
鸟鲁木齐830022)
i
Visual Basic是Microsoft公司推出的的32位Windows应
用程序开发工具。它提供了开发Microsoft Windows(R 应用程
中提供用户对数据集需满足的条件的设置、如获取当前表含
有的字段,以及如何选取需要的字段?(4)如何实现根据用户
序的最迅速、最简捷的方法。不论是Microsoft Windows应用程
序的资深专业开发人员还是初学者,Visual Basic都为他们提
供了整套工具,以方便开发应用程序。Visual Basic 6.0作为一
种成熟的开发工具,从设计新型的用户界面到利用其它应用
的选择情况动态生成数据输出窗体?(5)如何实现各窗体的切
换?
针对第一个问题,首先,进入VB集成环境,创建一个新
工程,选择“工程”菜单,“添加窗体”选项,在弹出的窗口选择
“新建”,在可选项中选择“ODBC登录”,单击“打开”后出现
“ODBC登录”窗体,可以看见工程中增加了窗体名称为fr-
mODBCLogon的窗体。这个窗体是中文版VB 6.0提供给程序
员直接调用的,窗体的控件及代码都已经设计好了。察看该窗
体上各控件的属性和代码,在Form_Load()事件中看见如下代
码:
Private Sub Form
_
程序的对象、从处理文字图像到使用数据库,Visual Basic提
供了完成这些工作的所有工具。与C++Bulider、Delphi、
Power Bulider等快速开发工具一样,Visual Basic支持许多公
共的编程结构和语言元素。在开发数据库应用程序方面,vi.
sual Basic 6.0提供了许多工具以满足针对数据库编程的需
要,例如数据绑定控件、设计器以及诸如格式化对象等技术。
通常用VB6.0实现访问数据库的方法包括:通过VB 6.0
的“VB数据窗体向导”、ADO控件与Dbgrid控件、DataCombo、
DataList等控件的绑定、VB 6.0 Data Envoriment以及VB 6.0
Load()
GetDSNsAndDrivers
End Sub
集成开发环境配合VB6.0外接程序中的“可视化数据管理
器”等。采用这些方法和控件能够实现数据库应用程序设计,
其中调用了GetDSNsAndDrivers子过程。该过程就是获取
当前系统中可用ODBC数据源的程序。在这里要注意的是必
只是对数据库的操作不够灵活,比如在程序中要确定需要打 须在模块级变量声明中添加如下代码:
开数据库的ODBC数据源等。针对这一情况,作者编写了一个
Option Explicit
可以通过人机交互,由用户自由选择ODBC数据源、数据库、
数据集(表)、数据项(字段),而且返回信息界面可根据用户不
同选择动态调整的“通用ODBC数据库访问程序”,具体过程
Private
“ODBC32
.
Declare Function SQLDataSources Lib
DLL” (ByVal henv&,ByVal fDirection%,ByVal
szDSN¥,ByVal cbDSNMax%,pcbDSN%,ByVal szDescription
限于篇幅在此不便详叙,本文仅就实现过程中遇到的问题和
几个解决技巧加以说明。
这个程序包含三个窗体,第一个为“ODBC登录”窗体。该
窗体用于通过人机对话完成用户与ODBC数据源的连接。由
于连接信息是用户在程序运行期间输入的,因此,用户可以选
择任何一个已在本机配置好的ODBC数据源,同时针对每一
个数据源,用户可以选择任意可访问(有访问权限)的数据
¥,ByVal cbDescriptionMax%,pcbDescription%)As Integer
Private
.
Declare Function SQLAllocEnv%Lib
“ODBC32
DLL”env&)
Const SQL_SUCCESS As Long=0
Const SQL_FETCH_NEXT As Long=l
因为在GetDSNsAndDrivers()中调用的SQLAllocEnv()、
SQLDataSources()等子过程是在ODBC32.DLL中定义的。此外
库。第二个窗体为“数据窗体设计”窗体。该窗体用于向用户提
还可以看到用于输入用户密码的文本框txtPWD的Password—
供对数据集(表)、数据项(字段)的选择,同时允许用户在此设 Char属性为空。这就意味着用户输入的密码为明码了,所以
定需要访问的纪录必须满足的条件。这些功能,既增加了用户
必须修改。我把该属性改为“★”,即用户输入密码时,屏幕上
文本框中显示的是相应数目的“★”符号。通过查看该窗体的
代码我们可以看出该窗体只具有提供用户选择ODBC数据源
及获取连接ODBC数据源字符串的功能,我们在使用中还需
自己添加代码来完成与ODBC数据源的连接。具体工作是这
的选择性,又能加强程序的针对性,可以更好地满足用户需
求。第三个窗体为“数据窗”窗体。它的功能是向用户输出满足
其设定的条件的纪录。该窗体可根据用户设定的不同条件,动
态生成满足该条件的窗体结构。
为了实现上述三个窗体及其功能,需要解决以下几个问
题:(1)如何获取当前系统所配置的ODBC数据源以及如何连
样的:在工程菜单选择“引用”,再在弹出的对话窗中选择
“Microsoft ActiveX Data Objects 2.0 Library”和“Microsoft DAO
接到数据源?(2)如何取得当前数据库中所有的表的表名及其
列表;用户如何从列表中选取需要访问的表?(3)如何在程序
36
Objects 3.6 Library”两项可用的引用,并在该窗体的“模块声
明”部分添加代码:
新I气象2002年第25卷第3期
维普资讯
Public db As Connection
再在cnl”按钮的click事件中添加如下代码:
.
再在“确定”按钮的代码段:Private Sub cmdOK
Click()中
添加如下代码:
Set db=New Connection
db.CursorLocation adUseClient
Private Sub cnl_』=lick()
TextWhere.Text=…’
TextWhere.SetFocus
End Sub
db.Open(sADOConnect)
此外还需在Form2窗体上再加入两个ListBox框分别命
名为List1和List2。通过Listl列表框来获取当前表中含有的
所有字段的列表;通过List2列表框纪录用户选定的字段列
同时删除程序段中不需要的代码段:如:MsgBox等,加入
简单的出错处理,这样第一个问题就顺利解决了。
对于第二个问题,首先在工程中添加一个窗体命名为
Form2,在该窗体上加入一个ComboBox框,名为:combol,再在
frmODBClogon窗体的“确定”按钮中添加如下代码:
Dim mydb As Database
Dim mytab As TableDef
表。为实现这两项功能,需要分别在两个列表框的DblClick()
事件中添加如下代码:
Private Sub Listl
DblClick()
_
List2.Addhem List1.Text
List1.RemoveItem(List1.Listlndex)
End Sub
etS mydb=OpenDatabase(vbNullString,0,0,sDAOCon-
nect)
Form2.comtab.Clear
For Each mytab In mydb.TableDefs
Form2.comtab.Addhem mytab.Name
Next
该程序段的功能是:当用户双击List1列表框中列出的某
字段名时,表示该字段已被选中,并希望出现在程序最终输出
窗体上,因此,该字段记入List2列表框,同时从Listl列表框
中删除,以免用户重复误选。
Private Sub List2
DblClick()
_
其中OpenDatabase方法的定义在“Microsoft DAO Objects
3.6 Library”中,OpenDatabase方法原型为OpenDatabase
(dbname,options,read—only,connect)。“For each…in..
List1.Addhem List2.Text
istL2.RemoveItem(List2.Listlndex)
End Sub
next”语句的用法请参考有关VB6.0教材。至此获取当前数
据库中所有的表的表名及其列表的工作就完成了。选取表时,
使用Combo1.text属性即可。
该程序段的功能是:当用户双击List2列表框中列出的某
字段名时,表示该字段已被选中,并且该字段不希望出现在程
序最终输出窗体上,因此,该字段被从List2列表框中删除,同
被时记入Listl列表框中,以便用户随后选取。
这样第三个问题也解决了。
第三个问题的解决办法为:在Form2窗体上加一个
TextBox命名为TextWhere,用户设置查询条件时可在Tex.
tWhere文本框中 接输入,但输入内容必须符合标准SQL语
言中的“where”子句的规范。另外加入两个命令按钮,分别命
针对第四个问题,实现方法是在程序窗体设计阶段,在主
窗体Forml上事先设计好程序最终输出窗体的布局,然后再
情况动态加载输出数据的相应控件。
具体实现过程是:
名为okl和cn1。确认输入正确后按“okl”按钮,否则选“cnl” 在程序代码中根据用户选择的字段数,字段名、各字段长度等
按钮重新输入条件。为此在“okl”按钮的click事件中需要添
加如下代码:
Private Sub okl-!=lick()
Dim strWhere As Sting r
Dim i As Integer
首先,在Form1窗体上加入两个Label控件:Labts和
Labto,修改其Caption属性为空和“状态统计”,修改Labts的
index属性为0,再在窗体上加入两个textBox控件,分别命名
为:textif-eld和texttotal。修改textifeld的index属性为0,这是很
On Error GoTo myerror
Set adoRs=New Recordset
strWhere = “ ”&TextWhere
Text
.
重要的一点,这样就相当于隐式声明了一个名为textifeld的
文本框数组,对于Labts的index属性也是同样的道理。这样
.
adoRs.Open“select★from”&eomtab
Text&strWhere,
的设计就可以在程序代码中通过:load textileld(i)以及l0ad
Labts(i)命令动态生成第i个文本框(textBox)控件和第i个
frmODBCLogon.db,adOpenStatic,adLockOptimistic
Dim myfie As Field
etS myRs=adoRs
For Each myfie In myRs.Fields
标签(Labe1)控件。此外,再根据用户的具体需要在Form1窗
体上加入若干个CommandButton按钮。如本程序中加入了5
个按钮,分别命名为:“刷新”、“下一个”、“前一个”、“返回”、
List1.Addhem myfie.Name
Next
“结束”。调整好Form1窗体上各个控件的初始位置。这样
Form1窗体就设计完了。随后再在form2窗体上加入一个
CommandButton按钮,修改其Caption属性为“确定”。双击该按
钮,在Click事件中添加下代码:
Private Sub combOk
Click()
_
Exit Sub
myerror:
MsgBox Err.Description
End Sub
VisuaI Basic 6.0开冀藏量库应用程序的几个实用技巧——黄英
Dim i As Integer
37
维普资讯
On Error GoTo myerror
Form2.Hide
Form1.Show
For i=l To List2.ListCount—l
mODBClogon窗体和Form2窗体以及Form1窗体间的切换我
就是通过如下方法实现的。首先,程序运行初始从住窗体到显
示“ODBC登录窗体”,这是通过Form1的form
load()事件来完
成的。响应该事件的的代码如下:
Private Sub Form
Load Form1.TextFields(i)
Load Form1.Labts(i)
Load()
Form1.Hide
frmODBCLogon.Show
End Sub
Form1.TextFields(i).Top=Form1.TextFields(i—1)
.
Top+285
Form1.Labts(i).TOp=Form1.Labts(i—1).TOp+
285
其次,从fmODBClrogon窗体切换到Form2窗体,是通过
在fmODBClrogon窗体中的“确定”按钮中添加代码来完成的:
Form1.TextFields(i).Visible=True
Form1.Labts(i).Visible=True
Next
fmODBCLogon.Hide r
Form2.Show
最后,从Form2窗体切换到Forml窗体,是通过在Form2
窗体的combOk按钮的Click()事件中添加如下代码实现的:
Form2.Hide
frmODBCLogon.Hide
Form1.Show
’在forml窗体上动态生成若干个Label控件和textBox
控件’
Form1.TextTota1.Top=Form1.TextFields(List2.ListCount
—
l1.Top+300
Form1.Labto.Top=Form1.Textota1.TTop
以上,就是采用Visual Basic实现“通用ODBC数据库访
Form1.Cmend.Top=Form1.TextTota1.Top+300
Form1.Command1.Top=Form1.Cmend.Top
Form1.Command2.TOp=Form1.Cmend.TOp
Form1.Command3.TOp=Form1.Cmend.Top
Form1.Command4.Top=Form1.Cmend.Top
For i=0 To List2.ListCount一1
问程序”时遇到的一些问题和采取的解决办法。
使用该程序,用户可以访问同一数据源绑定的数据库中
的相关的表,也可在使用过程中随时通过人机交互界面更改
要访问的数据源、数据库、表、字段等内容。该程序经过编译后
可运行干任意一台配置了ODBC的windows 98、windows NT
工作站。当然,这个程序也还有许多可以改进和加强的地方,
比如,可以在程序中增加对数据库进行修改、增、删等操作的
功能,这样才算是一个完全意义上的“通用访问ODBC数据库
的程序”。
Form1.Labts(i).Caption=List2.List(i)
Form1.TextFields(i).Text=adoRs.Fields(List2.List
(i))
Form1.TextFields(i).width=Len(adoRs.Fields
(List2.List(i)))★300
Next
动态调整f0rml窗体上各控件的位置’
Form1.TextTotal_Text= “Cun_ent Record:”&adoRs
.
AbsolutePosition&“/Total”&adoRs
RecordCount&
.
“Records”
Exit Sub
myerror:
MsgBox Err.Description
End Sub
上述程序段的功能主要是向“数据窗体”动态添加需要的
控件,以及取得用户最终需要的数据。具体各行程序代码的功
能请参见程序段中的各注释行。这样就解决了动态生成数据
输出窗体的技术问题。当然,要使数据输出窗体的功能完善,
还需要对前面提到的Forml窗体上的另外5个CommandBut—
ton按钮,分别就其Click事件编写相应的代码。由于这部分代
码相对较为简单这里就不一一列出了。
最后一个问题只需记住任何时候保证你的程序中只有一
个窗体是可见的,其它窗体均处于不可见状态(如:调用hide
方法或者使visible=False)就行了。比如在我的程序中fr-
38
新疆气象2002年第25卷第3期
发布评论