谈谈VB的数据库编程方式
成都 郑剑敏
VB全称Visual Basic,是微软公司推出的基于Basic语言的可视化编程环境,以其简单易学功能强大而倍受广大电脑爱好者的青睐。
VB的数据库编程方面按其难易程度可分为三类(由易到难);
●使用数据库控制项和绑定控制项
●使用数据库对象变量进行编程
●直接调用ODBC2.0API
在使用VB进行数据库编程时,通常,会首先选择三种基本方法之一来进行数据库应用程序的方案设计, 现在就将以上三种设计方法的适应范围及其优缺点进行一个比较。
1 使用数据库控制项和绑定控制项
1.1 优点
它是三种方法中编码量最小的
不必了解CDBC2.0API的细节
允许使用标准的和第三方厂商制订的控制项
简化了错误处理
支持所有的动态集方法及属性
1.2 缺点
不能存取快照对象(snapshop)对象或表格对象(都属于记录集对象)
不能存取数据库集合,比如表定义(TableDefs)字段(Fieds),索引( Indexes)及查询定义(QueryDefs)
只能存取部分ODBC2.0管理函数
不能进行真正的事务处理
有限的错误诊断功能
1.3 应用
对中小规模的数据库表(通常少于一千条记录)只进行简章的浏览操作
基本SQL查询所对应的结果集长度有限(通常结果集的记录数小于一百, 这些记录从一个或两个长度有限的表中检索出来)
应用程序的数据输入/输出项较少(通常只涉及一个或两个长度有限的表、并且表中的字段数在10个左右且不具有关系完整性限制
2 使用数据库对象变量进行编程
2.1 优点
可以在程序中存取ODBC2.0的管理函数
可以控制多种记录集类型:Dynaset、Snapshop及Table记录集合对象
可以存取存储过程和查询动作
可以存取数据库集合对象,例如TableDefs、Fields、Indexes及QueryDefs具有真正的事务处理能力 , 包括启动事务 ( Begintrans) 、 提交事务(CommitTrans)及回滚事务(Rollback)
2.2 缺点
比使用数据控制项的方法编码量较大
只能进行间接的错误处理和错误恢复
对每个数据库操作没有细粒度的控制
对结果集和包含结果集的内丰资源的操作受到限制
同直接使用ODBC2.0API函数的方法相比性能较低
2.3 应用
应用程序需要在执行期间动态地建立表、字段及索引
应用程序涉及同步更新几张表(但在逻辑上保持一致性)的复杂事务
应用程序使用结果集而不是Dynaset的窗体(FORMS),例如Snapshots或Tables,这里是设计要考虑的关键
应用程序的表非常大,多于1000条记录
应用程序具有复杂的数据输入/输出项,它涉及许多内部相关的字段并且包括数据库参照完整性或一致性规则
应用程序需要执行一些额外的操作和对结果集的查询后处理, 尤其是需要很高的数据格式化显示
应用程序需要利用复杂的ODBC管理功能以选择、配置、校验及建立各种数据源
应用程序需要在执行期间“显示”数据库的基本结构
应用程序需要使用复杂的多码索引方式来检索或更新记录
3 直接调用ODBC2.0API
3.1 优点
可以直接参与结果集的开发、管理及规范化
对结果集游标提供了更多的控制,并且提供了更多的游标类型和执行动作
能够确定ODBC驱动程序及SQL的一致性级别
可以更好地控制Windows的执行调度及资源利用
其他方面同其他方法差不多,因此这种方法很可能具有最好的性能
3.2 缺点
较其他两种方法需要大量的代码
代码复杂并且要求程序员具有编制API调用的经验
在网络上Visual Basic运行期间库的错误处理缺乏安全性,因此代码运行期间出现的错误所造成的后果会非常严重
3.3 应用
如果系统环境为客户机/服务器模式下的大规模多用户环境,那么应用程序必须都能够准确地解决可能出现的系统错误和失败
应用程序强调资源使用,这里如何对内存、 网络服务器资源进行直接控制是首要的考虑因素
应用程序使用超大规模数据库,例如数据库表可能包含几万或几十万条记录
VB访问数据库方法简介
南京河海大学 陈鹏
Visual Basic(简称VB)是一种可视化的、事件驱动型的Windows应用程序开发工具,它在GUI设计、绘图、制表、运算、通信和多媒体开发方面都具有简单易行、功能强大等优点,所以越来越受到开发人员的亲睐。同时,VB在数据库开发方面也具有Foxpro所远不能及的强大功能。VB能够读取和访问Access、Excel、DbaseX、Foxpro、Btrieve和ODBC等多种数据库,并能利用VB自身所带的数据库引擎创建Access数据库。所以VB在管理信息系统(MIS)的开发和建设方面得到了是益广泛的应用。现在,笔者就VB应用数据库的一些方法作一简单的介绍。
VB访问数据库通常有三种途径:第一,通过数据库控制控件Data Control访问;第二,通过VB提供的数据库对象变量编程访问;第三,通过ODBC接口访问ODBC API函数。在这三种方法中,第一种方法操作起来最方便、灵活、易于掌握,同时也最能体现Visual Basic面向对象的特色,故这里以Foxpro2.5的数据库为例,介绍数据库控制控件(Data Control)访问数据库的方法与步骤:
一、 在Form窗口中加入Data Control控件
用鼠标在工具窗口的Data Control控件按钮上双击左键,该对象即出现在Form窗口的中间(控件名为Data1),用鼠标调整好控件的大小及位置。如工具箱中无此控件,可打开主菜单的Tools/Custom,在列表中选中Microsoft Data Control复选框,确认后即可将此控件加入到工具箱中去。
二、 设置联接库
用鼠标单击Data1,按下F4,打开属性窗口,设置Connect属性为Foxpro2.5,设置DatabaseName 为c:\foxprow\student.dbf(假设磁盘上已有这个文件)。
三、 加入字段显示、编辑控件(数据库捆绑控件)
在Form窗口中加入DGrid控件,如不在此控件,可打开主菜单Tools/Custom,在列表中选择Apex Data BroundGrid复选框,确认后即可向工具箱中加入此控件。在Form窗口中单击选中此控件(DGrid1),按下F4打开属性窗口,设置Datasource属性为Data1,在Form窗口中用鼠标右键单击控件DGrid1,选择 Retrieve Fields;再用鼠标右键单击控件DGrid1,选择Edit,用鼠标调整控件及有关字段大小;再用鼠标右键单击控件DGrid1,选择Properties(属性),在弹出窗口中,选择Colums标签,在下拉列表中选Colum1,将Caption属性改为“学号”,选择Colum2,Caption属性改为“姓名”,选择Colum3、4将Caption属性改为“性别”、“专业”,按下“确定”按钮。
再向Form窗口中加入一个按钮控件,将Caption属性设置为“退出”,双击该控件(Command1),在代码窗口中写入“END”,存盘。
此时,一个具备数据库读写、浏览功能的应用程序就建立了,按下F5运行,通过单击Data1的各按钮即可看出当前记录的变化情况。
在此基础上,我们还可以借助数据库控制控件的有关属性和方法进行更灵活的操作和控制。
1、 设置Data1.Visiable=False’将控件设为不可见
2、 将按钮Command2,3,4,5,6,7的Caption属性分别设置为“追加”、“首记录”、“上一条”、“下一条”、“尾记录”、“删除”,双击各按钮,分别写入事件代码:
Sub Command1-Click() ’关闭应用程序
End
End Sub
Sub Command2-Click() ’追加记录
Data1.Recordset .Addnew
Data1.Recordset .Update
Data1.Recordset .MoveLast
End Sub
Sub Command3-Click() ’移向首记录
Data1.Recordset .MoveFirst
End Sub
Sub Command4-Click() ’移向上一条记录
Data1.Recordset .MovePrevius
If Data1.Recordset .Bof Then
Data1.Recordset .MoveFirst
End If
End Sub
Sub Command3-Click() ’移向尾记录
Data1.Recordset .MoveLast
End Sub
Sub Command4-Click() ’移向下一条记录
Data1.Recordset .MoveNext
If Data1.Recordset .Eof Then
Data1.Recordset .MoveLast
End If
End Sub
除此之外,数据库控制控件还有Bookmark、RecordCount等许多属性与方法,能对数据库进行各种方便的操作。
由此可见,数据库控制控件具有数据库操作方面的强大功能。另外,数据库控制控件的RecordSource 属性可用一个SQL语句赋值,以此来有效地调用SQL语句,从而发挥SELECT语句强大的功能,更使数据库控制控件(Data Control)锦上添花。
真正删除数据库的记录
大家知道,缺省情况下,VB 删除记录只是把记录作上个删除标志而已,并没有真正删除。要真正删除记录,你可以使用 VB 提供的以下方法:BeginTrans、CommitTrans、RollBack。其中,BeginTrans 方法开始记录数据库的变动,CommitTrans 方法确认数据库的变动,而 RollBack 方法则可以恢复被删除或修改的记录。它们可以嵌套使用。因此,要恢复被删除的记录,应该在使用 BeginTrans 方法之后及使用 CommiTrans 方法之前使用 RollBack 方法。