近期遇到的一个问题就是无法实现信息的添加了,可是程序又总是提示添加成功,根本不报任何错。
一个问题的解决,首先得理清它所在功能块的运行步骤,这样才能逐一排除。比如说添加信息:首先,打开数据库,指明添加的位置;其次,写入命令添加信息;然后,进行数据的更新;最后,操作执行完毕,关闭数据库。
我总以为,包括师傅开始也认为是我的添加命令写错了。在反复求证后,确认添加命令没有错,从这儿,我和师傅的差距就出来了,我们同样用了断点调试,可是我始终没有看出来哪一步有问题,而师傅看了一会儿,说我肯定是调用的那个函数写错了。
由这个问题,我理出了一条解决问题的思路:
一、理清功能块运行的步骤,逐一排除;二、查看是否存在语法错误;三、查看是否有调用函数;四、核实函数是否正确书写。
借由这个问题说一下我对调用模块中一个函数的理解,因为多次用到。
Dim cnn As ADODB.Connection’定义连接
Dim rst As ADODB.Recordset‘定义数据集
Dim stokens() As String’定义字符串
On Error GoTo executesql_error‘进行错误处理
stokens = Split(sql)'用Split函数产生一个包含各个子串的数组 关于Split函数
Set cnn = New ADODB.Connection'创建连接
cnn.Open connectstring’进行连接 其中connectstring函数返回了数据源
If InStr("INSERT,DELETE,UPDATE", UCase$(stokens(0))) Then '非Select语句 判断是否含有指定内容
cnn.Execute sql ‘执行查询语句
msgstring = stokens(0) & " query successful "’返回查询信息
'虽然msgstring不是返回值,但传递方式是ByRef,是参地址和这个地址相同
Else
Set rst = New ADODB.Recordset‘创建数据集对象
rst.Open Trim$(sql), cnn, adOpenKeyset, adLockOptimistic’返回查询结果,这一句也是我的问题所在。
'得到临时表,游标指向第一条记录
'get recordcount
Set executesql = rst
msgstring = "查询到" & rst.RecordCount & "条记录"
End If
executesql_exit:
Set rst = Nothing’清空数据集
Set cnn = Nothing‘中断连接
Exit Function
executesql_error:‘判断错误类型
msgstring = "查询错误:" & Err.Description
Resume executesql_exit
End Function
针对我出问题的具体解决情况进行说明
本该是adLockOptimistic,非让我给写成了adLockBatchOptimistic。 关于aslockoptimistic
adLockBatchOptimistic 当数据源正在更新时,其他用户必须将CursorLocation属性改为adUdeClientBatch才能对数据进行增、删、改的操作。