Access开发培训
网站公告
·Access专家课堂QQ群号:151711184    ·Access快速开发平台下载地址及教程    ·欢迎加入Access专家课堂微信群!    ·如何快速搜索本站文章|示例|资料    
您的位置: 首页 > 技术文章 > Access开发平台

快速开发平台(企业版)--无法为更新定位行,一些值可能已在最后一次读取后已更改。

时 间:2014-05-06 09:15:52
作 者:金宇   ID:43  城市:江阴
摘 要:无法为更新定位行,一些值可能已在最后一次读取后已更改
正 文:

    在用快速开发平台(企业版)1.7.2版本+后端使用SQLServer开发项目时遇到一个问题,如果表中存在是否类型的字段,并且通过平台的数据模块生成器生成了编辑窗体,如果打开编辑窗体将某条记录中是否类型字段的值有true改为false(窗体上应该是复选框有选中状态改为非选中状态),保存修改时会弹出如下图的提示。

 

 

     经检查是由于调用的平台函数OpenADORecordset中ADO使用了本地游标引起的,改为服务器端游标就能正常,但如果是从非选中状态改为选中状态,本地游标也能正常保存更新,由此猜测SQLServer表中存在是否类型的字段,并做为access的链接表,如果使用ADO修改记录是否类型字段的值由true转成False时必须使用服务器端游标(或者不设置游标类型因为默认就是服务器端游标),针对平台现有的问题如果有些网友也遇到了,可以通过自己重新定义OpenADORecordset函数来解决,将以下这个函数保存至平台新建的模块中就能解决遇到的问题,后续的版本会修正。

Public Function OpenADORecordset(RecordSource As String, _
                       Optional LockType As ADOLockTypeEnum = adLockReadOnly, _
                       Optional Connection As Variant _
                       ) As Object 'ADODB.Recordset
    Dim cnn As Object 'ADODB.Connection
    
    Const adUseClient = 3
    Const adLockReadOnly = 1
    Const adLockOptimistic = 3
    Const adOpenKeyset = 1
    
    Set OpenADORecordset = CreateObject("ADODB.Recordset")
    With OpenADORecordset
        .Source = RecordSource
        If IsMissing(Connection) Then
            .CursorLocation = adUseClient
            .ActiveConnection = GetADOConnection()
        Else
            .ActiveConnection = Connection
        End If
        .CursorType = adOpenKeyset
        If LockType = adLockUnspecified Then
            .LockType = adLockReadOnly
        Else
            .LockType = LockType
        End If
        .Open
    End With

    Set cnn = Nothing
 End Function


Access快速开发平台QQ群 (群号:321554481)       Access源码网店

常见问答:

技术分类:

相关资源:

专栏作家

关于我们 | 服务条款 | 在线投稿 | 友情链接 | 网站统计 | 网站帮助