ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 2685|回复: 2

[求助] 换台电脑, recordset的Find方法就出错, 请教如何解决

[复制链接]

TA的精华主题

TA的得分主题

发表于 2009-1-21 16:03 | 显示全部楼层 |阅读模式
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
我做了一个Access的程序, 在子窗体中对某一文本框BeforeUpdate时做较验. 在我自己电脑上运行没任何问题, 但是发给用户后, 她运行时会出现" Find cannot be performed over the specified column,or compare operator is invalid."错误.
我仔细检查过了, 双方运行软环境是一样的:
Access2003(公司统一装的, 版本号也一样)
Reference中: ADO library 2.1 / DAO3.6也一样, 我甚至把这几个对应的文件都拷过去覆盖了她电脑上的文件.
但还是有问题.

请教怎么解决呢?

说明: 后台数据库是IBM AS400, 但这应该不影响吧? (至少在我的电脑上是没任何问题的)


附代码如下:

Private Sub InvoiceNo_BeforeUpdate(Cancel As Integer)
On Error GoTo Err_Handle:

    If IsNull(InvoiceNo) Or InvoiceNo = "" Or InvoiceNo = 0 Then
        MsgBox "发票号不能为空, 如果要删除本行, 请点右键, 选择删除记录即可"
        Cancel = True
        Exit Sub
    End If
     
     
    rsData.MoveFirst
    rsData.Find ("CFINV = " & CStr(InvoiceNo))
   
    If rsData.EOF Then
        MsgBox "错误的发票号码! 可能是已经登记过."
        Cancel = True
        Exit Sub
    End If
   
    OrderNo = rsData("CFORD")
    CustNo = rsData("CFCUST")
    CustName = rsData("ALPH")
    Select Case CStr(rsData("CFSTS"))
        Case "2"
            Correct = "Wrong"
        Case "1"
            Correct = "Correct"
        Case "0"
            Correct = "Unknow"
    End Select
                           
    If (rsData("INVQTY") <> rsData("ORDQTY")) And (rsData("INVTYP") = "O") Then
        Partial = "Y"
        MsgBox "注意,这是张Partial发票", vbCritical + vbOKOnly + vbApplicationModal
    End If

Exit_Sub:
    Exit Sub

Err_Handle:
    MsgBox Err.Description
End Sub

[ 本帖最后由 waleywang 于 2009-1-21 17:13 编辑 ]

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-1-22 14:11 | 显示全部楼层

各位高手, 支点招吧 ;-)



没办法, 急着用, 只好先用Command对象来解决了.

因为实际上每次只处理一条记录, 而且后台数据库已经保证了记录的唯一性, 所以就定义了一个command对象, 执行一条参数化的select的SQL语句, 把上面的代码改写为:

    With cmdData
        .CommandType = adCmdText
        .ActiveConnection = cnAS400
        .CommandText = "SELECT * FROM  Database.table WHERE Table.CFINV = ?"
    End With

    With rsData
        .ActiveConnection = cnAS400
        .CursorLocation = adUseClient
        .CursorType = adOpenKeyset
        .LockType = adLockOptimistic
    End With
    cmdData.Parameters(0).Value = InvoiceNo
    Set rsData = cmdData.Execute
这样再对rsdata做动作(有的话只有一条记录)

但是, 我还是不明白, 为什么好端端的换台电脑就不行了呢??? 没道理呀?  哪位高人能给个说法?

搞不明白, 实在是不甘心呐

[ 本帖最后由 waleywang 于 2009-1-22 14:13 编辑 ]

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-1-23 16:32 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

原来是Series Access Windows 版本问题

发现用户电脑上装的是V4R4版本.
更新成V5R2后问题解决.

问题是, 还是不明白是何道理.

因为做Find时, 我在即时窗口里查过rsData, 记录集没问题. 难道说Recordset的特性与OLEDB特性相关??

有没有高手解释一下?

附: Connection对象和Recordset对象的实例化代码:
Sub GetConnectionAS400()     '建立到AS400的连接
On Error GoTo Err_Handle
    Set cnAS400 = New ADODB.Connection
    With cnAS400
        .CursorLocation = adUseClient
        .ConnectionTimeout = 15
        .Provider = "IBMDA400.DATASOURCE"
        .Open "Data Source=CN400A;User ID=" & strUserID & ";PassWord=" & strPassWord & ";"
    End With

Exit_Sub:
    Exit Sub

Err_Handle:
    blErrHappen = True
    strWrongMessage = "连接AS400出错, 以下是错误代码及描述."
    strWrongMessage = strWrongMessage & Err.Number & vbCrLf
    strWrongMessage = strWrongMessage & ErrMsg.Description
    MsgBox strWrongMessage
   
End Sub


Sub SetRsData(strConSQL As String)          '用于打开rsData记录集
On Error GoTo Err_Handle

    If Not (cnAS400.State = adStateOpen) Then
        cnAS400.Open
    End If
   
    With rsData
        .CursorLocation = adUseClient
        .CursorType = adOpenKeyset
        .LockType = adLockOptimistic
        rsData.Open strConSQL, cnAS400
    End With

Exit_Sub:
   
    Exit Sub
      
Err_Handle:
    blErrHappen = True
    strWrongMessage = "读取AS400数据出错!" & vbCrLf & Err.Description
    MsgBox strWrongMessage, vbCritical + vbOKOnly + vbApplicationModal
    Resume Exit_Sub

End Sub
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-16 22:46 , Processed in 0.029083 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表