Microsoft游标引擎错误'80040e21'多步操作生成错误.检查每个状态值

Mid*_*das 5 vb6 com+ ado asp-classic jscript

我正在看一下在VB6和Active Server Pages(JScript)中使用90年代编写的旧Web应用程序.应用程序从数据库中检索一些数据并将其存储在用于更新的记录集中.当它尝试更新字段时(见下文),它会出现'80040e21'错误.

rsSave.Fields('text') = Request.Form('strText').Item(i); // this line fails
Run Code Online (Sandbox Code Playgroud)

我检查了字段的类型,它是adVarWChar(202).我检查了'text'字段的大小是2000,比从表单中提取的大.我检查了所有字段的状态,它们都是adFieldOK(0).换句话说,通常出现此错误的任何常见嫌疑人都可以.

正在创建,填充然后返​​回记录集的COM +对象正在执行以下操作:

 'Initialize command object
Set oCmd = CreateObject("ADODB.Command")

With oCmd
    .CommandType = adCmdText
    .CommandText = strsql
End With

Set cn = CreateObject("ADODB.Connection")

'Open connection to database
cn.Open strConn
oCmd.ActiveConnection = cn

Set rs = CreateObject("ADODB.Recordset")

     With rs
        Set .Source = oCmd
        .LockType = adLockBatchOptimistic
        .CursorLocation = adUseClient
        .CursorType = adOpenStatic
        .Open
        Set .ActiveConnection = Nothing
       End With
Run Code Online (Sandbox Code Playgroud)

我尝试使用adLockOptimistic,但没有运气.

最后但并非最不重要的是,这个应用程序最初使用的是旧的Microsoft OleDb for Oracle,它不再与Windows Server 2008兼容.我们不得不使用新的提供程序,从那时起需要调整一些东西才能正常工作.

有任何想法吗?

小智 0

当我使用 IBM OLE DB Provider 从 VB6 写入 DB2 数据库时,我常常得到这些。它总是与数据与底层字段类型不兼容或内容太大有关。检查日期、字符串被写入整数、反之亦然等。

我会尝试一个排除过程。仅向一个字段写入数据,将其他字段默认为您可接受的最小值,然后继续添加具有预期数据的字段,直到触发错误。至少它会告诉你它是哪个领域。

抱歉,我没有更多可提供的了。