我正在查看一下在90年代用VB6和Active Server Pages(JScript)编写的旧Web应用程序。应用程序从数据库中检索一些数据并将其存储在用于更新的记录集中。当它尝试更新字段时(见下文),它会出现'80040e21'错误。
rsSave.Fields('text') = Request.Form('strText').Item(i); // this line fails
我检查了字段的类型,它是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
我尝试使用adLockOptimistic,但没有运气。
最后但并非最不重要的一点是,这个应用程序最初使用的是旧的Microsoft OleDb for Oracle,它不再与Windows Server 2008兼容。我们不得不使用新的提供程序,从那以后需要调整一些东西以便工作正常。
有什么想法吗?
答案 0 :(得分:0)
当我使用 IBM OLE DB Provider 从 VB6 写入 DB2 数据库时,我曾经得到过这些。它总是与数据与底层字段类型不兼容或内容太大有关。检查日期,字符串被写入整数,反之亦然等
我会尝试一个消除过程。只写入一个字段的数据,其他字段默认为您可以接受的最小值,然后继续添加具有预期数据的字段,直到触发错误。至少它会告诉你它是哪个字段。
抱歉,我没有更多内容可以提供。