【机房收费系统】——注册

一、【问题描述】

1.注册信息时,将信息添加完整后,显示添加成功,而且不报错
2.断点调试记录集中有记录
3.数据库中查询不到添加的信息
4.查询语句与连接无误

二、【解决之路】

1.首先仔细检查窗体代码书写和逻辑问题——(没问题)
2.检查模块——(发现了大问题)
在写模块代码的时候不知道怎么去写,就按照学生模块的方式去写,结果问题就出来了,错误代码如下所示:
这里写图片描述
问题是出在结果集中选择游标类型和加锁类型上面,正确代码为

rst.Open Trim$(SQL), cnn, adOpenKeyset, adLockOptimistic

三、【拓展之思】

1.什么是游标

游标是一段私有的SQL工作区,也是一段内存区域,用于暂时存放SQL语句影响到的数据。通俗的说就是将受影响的数据暂时存放在一个内存区域的虚表中,这个虚标就是游标

2.游标的作用

(1).因为数据库中的事物可以回滚,而游标在其中起到的作用就显得更加重要了,由于对数据库的操作我们会暂时放在游标中,暂时不提交就可以根据游标中的内容进行回滚了,在一定意义上有利于数据的安全。
(2).在Oracle中SQL只能返回单行数据,而游标刚好弥补了这个不足,相当于ADO中daratable

3.游标的类型

Const adOpenForwardOnly = 0
前向游标,为缺省游标,提供最快的运行性能。用它打开recordset,从对至尾顺序取得所有结果。它不支持向后滚动,只允许在结果间单向移动。

Const adOpenKeyset = 1
静态游标,反映第一次打开游标时表中数据的状态,游标无法查明底层表中的数据行是否更新过、删除过或添加了新的数据。不过与只能前移的洲标不同,静态游标可以在结果间前后滚动。

Const adOpenDynamic = 2
键盘驱动的游标,可以查询表中底层数据行的某些变化,但不是全部。它特别是可以准确反映数据是否更新过。但它不能查明其它用户是否曾删除过数据行(删除掉的数据行在recordset中会留下空洞)。键盘驱动的游标支持在结果间前后滚动。

Const adOpenStatic = 3
动态游标,是最丰富的游标类型。游标打开时可以查询其他用户对表的任何改动,而且支持滚动。

4.加锁的类型

Const adLockReadOnly = 1
缺省的上锁类型,只读方式上锁允许多个用户同时读取同样的数据,但不能改变数据。

Const adLockPessimistic = 2
以悲观上锁方式打开数据对象。该方式假定在你编辑记录时会有其它用户访问数据。此时一旦你开始编辑记录,其它用户就不能访问该数据。

Const adLockOptimistic = 3
以乐观上锁方式打开数据对象。该方式假定在你编辑记录时不会有其它用户访问数据。在完成改变之前,其它用户不能访问该记录。

Const adLockBatchOptimistic = 4
执行多行批处理更新时使用这种类型
最后,打开一个记录集时,你可以指定一个Options参数。Options参数标明用来打开记录集的命令字符串的类型。告诉ADO被执行的字符串内容的有关信息有助于高效地执行该命令字符串。
你可以使用下面的常量作为Options参数:

adCMDTable。被执行的字符串包含一个表的名字。
adCMDText。被执行的字符串包含一个命令文本。
adCMDStoredProc。被执行的字符串包含一个存储过程名。
adCMDUnknown。不指定字符串的内容。(这是缺省值。)

5、在rs.open后面的参数设定。一般建议:

rs.open sql,conn,0,1 顺序遍历,不需要定位跳转,不需要添加删除更新操作,速度最快
rs.open sql,conn,1,3 遍历,可以进行更新操作,但不能进行定位跳转
rs.open sql,conn,2,3 可以进行所有操作,可以跳转

猜你喜欢

转载自blog.csdn.net/damishidai15/article/details/80607838