在asp经典中收到错误“下标超出范围错误”

时间:2016-05-10 06:18:57

标签: vbscript asp-classic

我在经典asp中编写字符串搜索代码,但它显示错误。 例如,如果是在搜索中写入

my name is lucky from earth

我收到此错误

  

Microsoft VBScript运行时错误'800a0009'
  下标超出范围:'6'   /bdn6/prod_search.asp,第68行

其中第68行是:

SWord = SWord & " " &  Trim(arrKeyWords(j))

我的代码如下:

<%
Dim SearchWord, arrKeyWords, arrQry, MainQty, FinalQty, MergeQry, WhereCon, Cnt, tsearch, i, j
SearchWord = trim(request("searcha"))
arrKeyWords = Split(SearchWord ," ") 
Cnt = Ubound(arrKeyWords) + 1
%>

<%
dim Qry, SWord, NLWord, TableName, LastIndex
MainQty = "select a.rProd_name, r_id "
TableName = "from reseller_prod a, brand e, V_brand f, V_modal g Where a.rprod_vbrand=f.Vb_Id and f.vb_active=0 and a.rprod_vmodel=g.Vm_id and g.Vm_active=0 and a.rProd_brand=e.Brand_id and e.brand_active=0 and a.rProd_price <> 0 and a.rProd_price is not Null and a.rprod_nowallowd=0 and a.r_id in(select s_usrid from Reseller where S_approval=0) and a.r_id in(select usr_id from usr where Usr_Active=0)"
NLWord = ""
For i = 0 To Cnt
SWord = ""
For j = 0 To ((Cnt) - i)

SWord = SWord & " " &  Trim(arrKeyWords(j))  'getting error on this line: Subscript out of range

Next
WhereCon = WhereCon & " And (a.rProd_name like '%" & Trim(SWord) & "%' or f.vb_name like '%" & Trim(SWord) & "%' or g.Vm_modal like '%" & Trim(SWord) & "%')"
Qry = MainQty & ", " & (i + 1) & " as SortRecord " & TableName & " " & WhereCon
LastIndex = i + 1
Qry = Qry & NLWord
NLWord = NLWord & " And (a.rProd_name not like '%" & Trim(SWord) & "%' And  f.vb_name not like '%" & Trim(SWord) & "%' And g.Vm_modal not like '%" & Trim(SWord) & "%')"
FinalQty = FinalQty & Qry & " UNION "   

WhereCon = ""
Qry = ""

Next

FinalQty = left(FinalQty, (Len(FinalQty) - 6))

MergeQry = FinalQty
FinalQty = ""

 MainQty = "select a.Prod_name, '' as r_id "
 TableName = "from product a, brand e, V_brand f, V_modal g Where a.prod_vbrand=f.Vb_Id and f.vb_active=0 and a.prod_vmodel=g.Vm_id and g.Vm_active=0 and a.Prod_brand=e.Brand_id and e.brand_active=0 and a.prod_active=0 and a.Prod_price <> 0 and a.Prod_price is not Null"

 NLWord = ""
 For i = 0 To Cnt

 SWord = ""
 For j = 0 To ((Cnt) - i)

 SWord = SWord & " " &  Trim(arrKeyWords(j))
 Next
WhereCon = WhereCon & " And (a.Prod_name like '%" & Trim(SWord) & "%' or a.prod_keyword like '%" & Trim(SWord) & "%' or f.vb_name like '%" & Trim(SWord) & "%' or g.Vm_modal like '%" & Trim(SWord) & "%')"
Qry = MainQty & ", " & (LastIndex + i + 1) & " as SortRecord " & TableName & " " & WhereCon
Qry = Qry & NLWord
NLWord = NLWord & " And (a.Prod_name not like '%" & Trim(SWord) & "%' and a.prod_keyword not like '%" & Trim(SWord) & "%' And f.vb_name not like '%" & Trim(SWord) & "%' And g.Vm_modal not like '%" & Trim(SWord) & "%')"
FinalQty = FinalQty & Qry & " UNION "   

 WhereCon = ""
Qry = ""

Next
FinalQty = left(FinalQty, (Len(FinalQty) - 6))
FinalQty = FinalQty & "Order By SortRecord"

MergeQry = MergeQry & " UNION " & FinalQty

response.Write(MergeQry)
 %>

请帮我解决此问题。

1 个答案:

答案 0 :(得分:1)

阅读有关Array Variables的内容:

Dim A(10)
     

虽然括号中显示的数字是10,但所有数组都在。{   VBScript从零开始,因此该数组实际上包含11   元素。在从零开始的数组中,数组元素的数量是   总是括号中显示的数字加一。这种阵列是   称为固定大小的数组。

Split Function

  

返回包含指定的从零开始的一维数组   子串数。

UBound Function

  

返回指定维度的最大可用下标   一个数组。

因此,请使用

Cnt = Ubound(arrKeyWords)  ''' instead of Cnt = Ubound(arrKeyWords) + 1

或(坚持Cnt = Ubound(arrKeyWords) + 1

For i = 0 To Ubound(arrKeyWords)
    SWord = ""
    For j = 0 To (Ubound(arrKeyWords) - i)
        SWord = SWord & " " &  Trim(arrKeyWords(j))
    Next
    ''' … '''
Next

或(坚持Cnt = Ubound(arrKeyWords) + 1

For i = 0 To cnt -1
    SWord = ""
    For j = 0 To (cnt - 1 - i)
        SWord = SWord & " " &  Trim(arrKeyWords(j))
    Next
    ''' … '''
Next