Visual Basic对数据库表中的记录进行操作时,虽然可以对表中全部记录或部分记录进行连续的处理。但是在处理过程中,总是按顺序逐条记录进行的。因此对于表来说,在任一时刻,总是只有一条记录是数据处理的当前对象,它或者正等待处理,或者正被处理,这个记录称为当前记录。当用户打开一个表或者说使用对象的方法建立一个新的
Recordset对象时,表中的第一条记录就是当前记录。
由来
FoxPro对表的操作是以记录为单位的,那么在对表进行操作时必须明确当前正在对表的哪条记录进行操作,为此,这里就需要引进一个当前记录的概念,当前记录的概念与当前工作区、当前盘、
当前目录等概念类似,它是指表中当前可操作的记录。当前记录是可以改变的,即当前记录是一个动态的概念。为了标识当前记录,这里还需要引进一个记录指针的概念,所谓记录指针是指系统内部用以指向当前记录的一种标志,记录指针所指向的记录即为当前记录。通过记录指针的定位、移动,可将记录指针移动到预定的位置上,即使预定的记录成为当前记录。
表文件刚打开时,记录指针指向1号记录,即第l条记录是当前记录。
规律
任何一个记录都有可能成为当前记录,也就是讲“当前记录”在操怍数据库的过程中会不断地变化。不过这种变化既有规律,又可以人为地指定。
规律变化
(1)当刚刚打开一个数据库时,当前记录就是数据库中的第一条记录。
(2)当执行完一个dBASEⅢ命令后,该命令最后操作过的记录便成为当前记录,这一记录便成为下一个命令操作的对象。下面以实例来说明。
操作 说明
.USE XSCJK↙ 打开数据库XSCJK
.LIST NEXT 2↙ 从当前记录开始显示2个记录
屏幕显示结果如下:
上面显示的结果是从第1条记录开始的,而“LIST NEXT 2”的功能是从当前记录开始显示2条记录。这就证明了数据库刚刚打开以后,“当前记录”是第1条记录。
接着上面的操作,继续执行下面的命令:
操作 说明
.DISP↙ 显示当前记录
屏幕显示结果如下:
“DISP”命令的功能是显示当前记录,而显示出来的是2号记录,这说明2号记录就是当前记录。这是什么原因呢?这是由于前一个命令“LIST NEXT 2”最后显示的是第2号记录,因而2号记录便成为“DISP”命令执行时的当前记录。
当前记录
有时,由于某种原因需要指定某一记录为当前记录,以便对该记录进行处理。
例如,如果要求打开XSCJK数据库,从第3条记录开始显示两条记录。这一问题的含义是,在打开XSCJK数据库以后,必须将第3号记录指定为当前记录,然后使用LIST或DISPLAY命令显示两条记录。那么如何指定某一记录为当前记录呢?回答是:使用“GO—TO”命令。
GOTO命令有三种格式:
格式 功能
GOTO n 指定第n号记录为当前记录
GOTO TOP 指定第1号记录为当前记录
GOTO BOTTOM 指定最后一条记录为当前记录
下面我们通过实例来验证一下上述三种格式的GOTO命令。
举例
【要求】验证GOTO命令的三种格式所完成的功能。
【操作】
.USE XSCJK↙
.GOTO 3↙
.DISP NEXT 2↙
屏幕显示的结果如下:
上述显示的记录是从第3号记录开始的,即开始显示前,第3号记录是当前记录,这就证明了“GOTO 3”命令完成的功能是:将第3号记录指定为当前记录。
【操作】
.GOTO TOP↙
.DISP↙
屏幕显示如下的结果:
上述显示的结果表明,“GOTO TOP”命令完成的功能是:将第1号记录指定为当前记录。
【操作】
.GoTO BOTTOM↙
.DISP↙
屏幕显示如下的结果:
上述显示的结果表明,“GOTO BOTTOM”命令完成的功能是:将最后一条记录指定为当前记录。
修改内容
修改当前记录的内容使用如下函数:
long put_record(DBF*dbf,char*fmt,...);
该函数的功能为用参数表中的可变参数值分别替换散据库文件的当前记录中指定宇段的内容。在修改时既可以替换当前记录的所有字段的内容,也可以只替换某一个或几个指定字段的内容。该函数的使用比较复杂,各参数的涵义分别为:
dbf:指向数据库结构的指针;
fmt;格式字符串。格式字符申中的格式说明符的个数应和可变参数表中的参鼓个数相同,每个格式说明符按从左至右的顺序说明可变参数表中的一个参数。每个格式说明符由两种符号组成:
①字段序号,说明可变参数表中的参数对应于当前记录中的第几个字段。如果可参数表中的参数个数和当前记录中的字段数相等且顺序完全一致.则所有格式说明符中的字段序号均可阻省略。如果可变参数的数目小于字段数目并且可变参数的序号和所对应的宇段的序号不一致,那么应在不一致的可变参数的格式说明符之前使用字段序号。此时如果有若干个可变参数对应的字段连续,那么可以只在第一个字段对应的可变参数的格式说明符之前使用字段序号。
②可变参数的类型。由于
C语言和
FOXBASE的数据类型之间存在相当大的差异,所以在调用本函数时可变参数与数据库文件的字段之间的数据类型对应关系是十分重要的。下表列出了可以允许的数据类型对应关系爱对应的格式说明符。
③在格式说明符之间可以使用空格符作为分隔符。
...:可变参数表。可变参数表中的参数可以是变量或表达式,只要其值的类型符台上表中的规定。
在替换成功时,该函数返回当前记录的记录号,否则返回0。
读取内容
读取当前记录内容使用函数:
long get-record(DBF*dbf,char*fmt,...);
该函数的功能为将当前记录中指定字段的内容传送到参数表中的可变参数中。和修改当前记录函数类似,在读取时既可以传送当前记录的所有字段的内容,也可以只传送某一个或几个指定字段的内容。该函效的各参数的涵义和修改当前记录函数的参数的涵义相同,只是可变参数的类型应以上表中的第三列为准。
在传送成功时,该函数返回当前记录的记录号,否则返回0。