近期遇到的一个问题就是无法实现信息的添加了,可是程序又总是提示添加成功,根本不报任何错。


对于这个问题,做了总结。
一个问题的解决,首先得理清它所在功能块的运行步骤,这样才能逐一排除。比如说添加信息:首先,打开数据库,指明添加的位置;其次,写入命令添加信息;然后,进行数据的更新;最后,操作执行完毕,关闭数据库。

我总以为,包括师傅开始也认为是我的添加命令写错了。在反复求证后,确认添加命令没有错,从这儿,我和师傅的差距就出来了,我们同样用了断点调试,可是我始终没有看出来哪一步有问题,而师傅看了一会儿,说我肯定是调用的那个函数写错了。

由这个问题,我理出了一条解决问题的思路:
一、理清功能块运行的步骤,逐一排除;二、查看是否存在语法错误;三、查看是否有调用函数;四、核实函数是否正确书写。

借由这个问题说一下我对调用模块中一个函数的理解,因为多次用到。


Public Function executesql(ByVal sql As String, msgstring As String) As ADODB.Recordset‘'传递参数SQL传递查询语句,MsgString传递查询信息。自身以一个数据集对象的形式返回 

    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


这二者的区别:adLockOptimistic   当数据源正在更新时,系统并不会锁住其他用户的动作,其他用户可以对数据进行增、删、改的操作。    
 adLockBatchOptimistic   当数据源正在更新时,其他用户必须将CursorLocation属性改为adUdeClientBatch才能对数据进行增、删、改的操作。

 


posted on 2014-07-11 21:07  何红霞  阅读(341)  评论(0编辑  收藏  举报