(这里的第一个问题,如果我打破礼仪,对不起)
我的网站正在我订阅的电子商务后端提供商上运行。他们拥有经典ASP中的一切。它们有一个名为import_products的黑盒函数,用于将给定的文本文件导入到我的站点数据库中。
问题是,如果我不止一次调用该函数,就会出现问题。这是我的示例代码:
for blah = 1 to 20
thisfilename = "fullcatalog_" & blah & ".csv"
Response.Write thisfilename & "<br>"
Response.Flush
Call Import_Products(3,thisfilename,1)
Next
Response.End
Import_Products函数的第一次执行工作正常。我第二次得到: Microsoft VBScript运行时错误“800a0009” 下标超出范围:'i'
文件名全部存在。那部分没问题。我的调用代码中没有错误。我已经尝试在每次执行之前检查“i”的值。第一次该值为空,在第二次执行之前,该值为“2”。所以我尝试在每次循环迭代期间将其设置为null,但这并没有改变结果。
我假设该函数在执行期间设置变量或打开连接,但不清理它,然后不期望它已经第二次设置。有没有办法找出这将是什么?或者以某种方式将条件重置为空,以便函数为“新鲜”?
该函数位于不可读的包含文件中,因此无法看到代码。显然,一个更好的解决方案是与公司的支持一起使用,我有一张它与它们一起买票,但它就像拔牙一样让他们甚至承认存在问题。更别说解决了。
谢谢!
编辑:这是调用函数的进一步简化示例。第一个电话有效。第二次调用失败并出现与上述相同的错误。
thisfilename = "fullcatalog_testfile.csv"
Call Import_Products(3,thisfilename,1)
Call Import_Products(3,thisfilename,1)
Response.End
答案 0 :(得分:2)
错误的可能原因是Import_Products子例程的两个数字参数。
Import_Products(???, FileName, ???)
您的示例中的值为3和1,但您永远不会解释它们的作用或记录的内容。
编辑由于更正了供应商子程序是不可能的,但它第一次被调用时总是有效,让我们使用HTTP REDIRECT而不是FOR LOOP,这样技术上每次执行只调用一次
www.mysite.tld/import.asp?current=1&end=20
curr = CInt(Request.QueryString("current"))
end = CInt(Request.QueryString("end"))
If curr <= end Then
thisfilename = "fullcatalog_" & curr & ".csv"
Call Import_Products(3,thisfilename,1)
Response.Redirect("www.mysite.tld/import.asp?current=" & (curr + 1) & "&end=" & end)
End If
note 以上内容是在我的浏览器中编写的,未经测试,因此可能存在语法错误。