ASP 经典字典 [键、数组] 错误

ASP Classic Dictionary [Key, Array] Error

提问人:Pau Serra Sans 提问时间:8/30/2023 更新时间:8/30/2023 访问量:31

问:

我有一个函数可以将 Excel 文件上传到我的服务器并将此文件保存在字典 [Key, Array] 中。

我循环 Excel 文件的行,使用该行的值创建一个数组,并将该数组添加到字典中,如下所示:

Set excel = Server.CreateObject("ADODB.Recordset")
excel.Open sql, conn

Set newExcel = Server.CreateObject("Scripting.Dictionary")
i = 0

Do Until excel.EOF
   newRow = Array(excel(0), excel(1), excel(2), excel(3), excel(4), excel(5), excel(6), excel(7))
   newExcel.Add i, newRow

   i = i + 1
   excel.MoveNext
Loop

然后我尝试访问填充的字典以打印值,但我在 .Response.Write row(j)

For Each k In newExcel.Keys
   row = newExcel.Item(k)

   For j = LBound(row) To UBound(row)
      Response.Write row(j)
   Next
Next

错误:

ADODB.Field error '80020009'

Either BOF or EOF is True, or the current record has been deleted. Requested operation requires a current record.

感谢您的帮助!

数组 字典 asp-classic

评论

1赞 user692942 8/30/2023
这是因为您正在尝试存储 ADODB。数组中的字段对象,但它连接到需要活动数据库连接的 。相反,只需存储值,即 .ADODB.RecordsetArray(excel(0).Value, etc...
1赞 Dijkgraaf 8/30/2023
@user692942 您应该将其作为答案发布

答:

1赞 user692942 8/30/2023 #1

该错误是因为您复制的是对象,而不是其基础值。这意味着当您访问数组时,它会尝试访问需要活动数据库连接的对象。如果此后关闭了数据库连接,则将收到错误;ADODB.FieldADODB.Field

ADODB。字段错误“80020009”

BOF 或 EOF 为 True,或者当前记录已被删除。请求的操作需要当前记录。

调整此线

newRow = Array(excel(0), excel(1), excel(2), excel(3), excel(4), excel(5), excel(6), excel(7))

newRow = Array(excel(0).Value, excel(1).Value, excel(2).Value, excel(3).Value, excel(4).Value, excel(5).Value, excel(6).Value, excel(7).Value)

将存储基础值,而不是对象本身。