武汉水利电力大学动力系
郑志波 郭巧菊
---- Visual Basic(以下简称VB)的出现,极大简化了以前显得相当复杂的Windows程序编程,只需要极少量的代码,就能实现标准Windows应用程序。VB具有很强的数据库管理功能,利用数据控件和数据库管理窗口,可直接建立或处理Microsoft Aclearcase/" target="_blank" >ccess格式的数据库,并提供强大的数据存储和检索功能。同时,Visual Basic还能直接编辑和访问其它外部数据库,如Btrieve、dBASE、FoxPro、Paradox等,这些数据库格式都可以用Visual Basic编辑和处理。
---- 在进行数据库(Database)结构设计时,为数据库管理的方便,我们在很多表(Table)中都会用到一个没有具体实际意义、但可以用来标识每条记录(Record)的字段(Field),不妨设该字段名为“ID”。 由于ID字段是用来唯一标志记录的,各条记录必须保证不能重复,因此,它不能由用户输入。很多程序员在设计时会将该字段定义为Long数据类型,并使其“自动生成字段”(自动累加)属性为真(True),这样当添加一条新记录时,系统就会在该字段上自动输入一个与其它记录不同的值。这种处理方法可以保证每条记录的标识号均不相同,但是对ID字段,系统只是进行简单的处理:计数器加1,添加新记录时,取最大计数值加1作为新记录的标识号,而不会考虑有记录已被删除,给程序跟踪数据库记录的变化会带来一些麻烦。笔者结合自身编程实践,给出一种简单的处理方法,很好的解决了这个问题。下面给出一个具体实例。
---- 新建一个数据库,比如“C:Test.mdb”,添加名为“测试”的表,并在表中添加两个字段ID、Any,其中ID定义为Long类型数据,并定义为主关键字;Any 定义为Text类型。添加几条记录(如表1-1所示):
ID Any
1 第一
3 第二
4 第三
表1-1
---- 激活Visual Basic 开发环境,新建一工程,在缺省窗体代码窗口添加以下代码:
Option Explicit
Private db As Database
Private rec As Recordset
Private Sub Form_Load()
Dim x As Integer 注释:循环计数器
Dim intID As Integer 注释:用来作为新记录的 ID 号
Dim sSql As String
注释: 为SQL 语句设置文本。
sSql = "SELECT * FROM [测试] ORDER BY [ID]"
注释: 打开数据库
Set db = DBEngine.OpenDatabase("c:Test.mdb")
注释: 创建新的记录集对象。
Set rec = db.OpenRecordset(sSql, dbOpenDynaset)
‘记录集非空
If Not rec.EOF Then
rec.MoveLast
rec.MoveFirst
For x = 1 To rec.RecordCount Step 1
注释:-------------------------------------------------------+
注释: 获取空余最小 ID 号:
注释: 从 1 开始搜索,若记录计数器 x 不等于 ID 字段值 ,
注释: 则取该序号作为 ID值,并跳出循环,若一直匹配,则取大于
注释: 计数器当前值的最小值作为 ID值
注释:--------------------------------------------------------
If x < > rec.Fields("ID") Then
intID = x
Exit For
End If
intID = x + 1
rec.MoveNext
Next x
End If
With rec
.AddNew
注释: 记录集为空则 intID 为 0,新记录的 ID 值置为 1
注释: 非空则返回空余最小ID号
.Fields("ID") = IIf(intID, intID, 1)
.Fields("Any") = " 新记录" & CStr(intID)
.Update
.Bookmark = .LastModified
End With
‘关闭记录集及数据库
rec.Close
db.Close
End Sub
---- 因为程序中使用了数据库引擎,还需添加对 DAO3.51 的引用。选择VB开发环境“工程”菜单下的“引用”菜单项,弹出“引用”对话框,选中“Microsoft DAO 3.51 Object Library” 即可。
---- 运行该程序,会添加“ID”为 2 的记录(ID号为1 的记录已经存在),关闭程序,然后再次运行程序,程序自动添加“ID”为 5 的记录(ID号为1、2、3、4 的记录均已经存在)。手工删除一条记录,比如ID 为3的记录,再次运行程序,程序会将新记录的ID 号取为3。使用这种处理方法,程序能自动检测出被删除记录的ID 号,并在添加新记录时使用空出的ID号,而不用不断向上累加,给记录处理带来一定的方便。
---- 以上程序在Windows95 系统, Visual Basic 6.0(中文企业版)开发环境调试运行通过。