VBGood网站全文搜索 Google

搜索VBGood全站网页(全文搜索)
首页 - 经验之谈 - 走进VB6啃一块骨头
发表评论(0)作者:不详, 平台:VB6.0+Win98, 阅读:10444, 日期:2001-07-05
走进VB6啃一块骨头
我们在玩《仙剑奇侠传》时,要是不能保存数据,那么非得挑灯夜战三昼夜才能玩完,可见数据存储之重
要性。爱好编程的CFAN是不会放过数据文件的,下面跟着我驰骋吧!我们先吃一个哈密瓜,开门即来编一传统的比较有代表性的程序,不可不看的哟!
程序分为一个表单cfanvb.frm,一个模块cfanvb.bas。一个表单程序。程序的表单中有五个命令按钮,从上到下分别命名为Cmdnew、Cmdsave,Cmdtxt、cmdlookfor、Cmdexit,标题分别为&New、&Save、&Txt、&Lookfor、&Exit;还有三个文本框,名称分别为Textname、Textage、Textsex;还有三个标签。
程序的功能
功能1:能存储你所输入的每一条完整记录,并创造数据库文件nas.db。
功能2:能按输入的姓名字段查找记录并显示。
功能3:将所有记录按NAME字段排序制成文本文件nas.txt,以便打印、修改。
程序运行情况
先后输入八条记录,name字段分别为李继华、朱茵、小巩、朱朱、李丽丽、黄庆、Tom、Kate,并一一存储(按Save按钮,存储第一条记录前,Txt按钮为灰色,即不可激活态);点击【Txt】按钮,会出现【文本已经建好】提示框(文本的各项是按姓名顺序排列的,name分别为Kate、Tom、小巩、朱朱、朱茵、李丽丽、李继华、黄庆);在Textname文本框中输入上面任一姓名,点击【Lookfor】按钮即可得到其他的字段(年龄、性别)情况,如果不为此八人,则显示【not find】提示框。此程序运行后可以建立一个名为Nas.db的数据库文件和一个名为Nas.txt的文本文件。

Cfanvb.bas模块代码为:
Type nas 注释:定义记录类型
name As String * 6 注释:姓名
age As String * 3 注释:年龄
sex As String * 4 注释:性别
End Type
Type nasindex 注释:定义另一记录类型
name As String * 6 注释:姓名
number As Integer 注释:记录号
End Tyep
Public among As nas 注释:定义公共变量
public index() As nasindex 注释:定义枚举索引数组
Public totalnum As Integer 注释:定义总记录数

cfanvb.frm表单的代码为:
Option Explicit 注释:强制变量必须进行正规声明
Const nasdb="\nas.db" 注释:定义常量数据库文件名
Const nastxt="\nas.txt" 注释:定义文本文件名
Function search(findtxt) As Integer 注释:Function过程,寻找某一姓名findtxt,得出记录号search
Dim front As Integer 注释:定义变量
Dim behind As Integer
Dim findnum As Integer
Dim middle As Integer
front=1
behind = totalnum 注释:定义初始值
findnum = 0
Do While front <= behind And findnum = 0
middle = (front + behind)\2 注释:用二分法查找
If findtxt = Rtrim(index(middle).name) Then 注释:找到此记录
findnum = middle
ElseIf findtxt > index(middle).name Then
front=middle + 1 注释:要找的记录在middle之后
Else
behind = middle - 1 注释:要找的记录在middle之前
End If
Loop
search=findnum 注释:如找到,则找到的记录号为search;否则,search为0
End Function
Sub createindex() 注释:为所有记录建立索引
Dim I As Integer, change As nasindex, j As Integer
For I = I To totalnum
Get #1,I,among 注释:读出第I条记录
index(I).name=among.name 注释:此记录的name字段赋予索引I的name字段
index(I).number = I 注释:记录号赋予索引I的number字段
Next I
For I =l to totalnum -1
For j=I +1 To totalnum
If index(I).name > index(j).name Then
change = index(I)
index(I)=index(j)
index(j)=change
End If
Next j
Next I 注释:对索引数组排序,使index(I).name Fnd Sub
Private Sub Cmdexit_Click()
Close #1 注释:关闭文件1
End 注释:结束
End Sub
Private Sub Cmdlookfor_Click() 注释:查找
Dim which As Integer
Dim findit As Integer
which = search(textname.Text) 注释:调用search()
If which > 0 Then 注释:which > 0 表明查找到
findit = index(which).number
Get #1, findit,among 注释:由记录号读出记录
with among
textname =.name 注释:将此记录的各字段显示于文本框
Textage =.age
Textsex =.sex
End With
Else
MsgBox "can注释:t find it" , 48,"lookfor" 注释:否则没找到提示信息
End If
End Sub
Private Sub cmdnew_Click() 注释:所有文本框清空
textname =""
Textage = ""
Textsex =""
textname.SetFocus 注释:textname文本框得到输入焦点
End Sub
Private Sub Cmdsave_Click()
totalnum = totalnum + 1 注释:记录数加1
If totalnum > 0 Then Cmdtxt.Enabled = True 注释:使Cmdtxt按钮由灰色变成可激活
With among 注释:将各文本框内容存于记录
.name=textname.text
.age=Textage.Text
.sex = Textsex.Text
End With
Put #1,totalnum,among 注释:将记录加入#1
ReDim index(totalnum) 注释:重新定义枚举数组
createindex 注释:调用过程重新建立索引
textname ="" 注释:清空文本框,激活textname
Textage = ""
Textsex =""
textname.SetFocus
End Sub
Ptivate Sub Cmdtxt_Click() 注释:建立文本文件
Dim I
Dim message1 As String, message2 As String
Open nastxt For Output As #2 注释:打开文本,接受输出
For I=1 To totalnum
Get #1, index(I).number,among 注释:读记录
With among
Print #2," "; Ucase(Trim.(.name))
Print #2,"age: "; .age 注释:用Print语句建立文本
Print #2, "sex: "; .sex
End With
Next I
Close #2 注释:关闭文本文件
textname.SetFocus
message1="文本nas.txt已经建好"
message2 ="file"
MsgBox$ message1, 64, message2 注释:显示文本已建好对话框
End Sub
Private Sub Form_Load() 注释:程序运行装人表单时的事件
Open nasdb For Random As #1 注释:打开数据库
Len = Len(among)
totalnun = LOF(1)/ Len(among) 注释:计算记录数
If totalnum > 0 Then
ReDim index(totalnum) 注释:定义枚举索引数组
createindex 注释:建立索引
Else
Cmdtxt.Enabled = False 注释:禁止Cmdtxt按钮
End If
End Sub
我们通过以上程序,可以得出哪些启示呢?
1.文件可分为文本文件(一般为顺序存取格式,本程序为cfanvb.txt)和随机存取文件(本程序为cfan
vb.db)。
2.随机存取文件由一些固定长度的记录组成,建立好索引后,能在不读入其他记录的情况下,直接跳到某一记录。
3.在文本文件中使用的语句:
(1)Open filename For output(append) As #numberoutput:创建一个新文件并准备写入数据;
append:打开一个已存在的文件并准备写入数据于文件的结尾。
(2)Print #number,[data1;data2;data3...]
它可将一个或多个没有分隔的字符串输出到指定文件#filenumber, “print #filename,”表示输出一空行。
(3)Write #number,data1,data2,data3...
它可将一行数据写入一个已经打开的文件,并提供“,”作间隔。
(4)Open filename For Input As #number
它为读数据而打开一个文件。
4.随机存取文件常用语句:
(1)Open filename For Random As #number Len=recordlength
以随机方式打开一既可以读又可以写的文件,其中recordlength为文件记录的字节数。
(2)Put #number,recordnumber,record(写入)
Get #number,recordnumber,record(读出)
其中,#number文件已经打开,"recordnumber指明要写入(或读出)的位置,record指那条记录。
本文介绍了处理数据的一些传统方法和基本知识,根据本程序的思路,你可制作出自己喜欢的小程序。其实VB6还有更简单的处理数据的方法,留待以后介绍。希望我烧的骨头汤能适合大家口味。