我写了一个hta应用程序,它只接受一个搜索参数。
使用此搜索参数,用户可以按名、姓或同时按名搜索。
这个效果很好。
今天,管理层决定添加日期范围作为搜索的一部分。
我试图建立WHERE子句,其中用户可以搜索姓氏,名字或日期范围,但不能同时搜索。
换句话说,一方面,用户可以使用名为txtsrch的表单变量按姓、名或同时按名搜索。
或者他们可以只使用日期范围,使用frommmdy作为fromDate和toMDY作为toDate。
到目前为止,效果不太好。
无论我在名称搜索框中输入搜索还是选择日期范围,都会得到类型不匹配错误。
当它只是一个搜索框时,我没有得到类型不匹配错误。
任何帮助都是非常感谢的。
这是最小的,我认为相关的代码。
日期格式为1/1/2013
'*
Const cOPT = "<option value='?'>?</option>"
'*
Dim fromMDY(2)
Dim toMDY(2)
Dim optMDY(2)
optMDY(0) = "<option value='0'></option>"
optMDY(1) = "<option value='0'></option>"
optMDY(2) = "<option value='0'></option>"
Dim i
'*
For i = 1 To 12
optMDY(0) = optMDY(0) & vbCrLf & Replace(cOPT,"?",i)
Next
For i = 1 To 31
optMDY(1) = optMDY(1) & vbCrLf & Replace(cOPT,"?",i)
Next
For i = Year(Date)+1 To Year(Date)-4 Step -1
optMDY(2) = optMDY(2) & vbCrLf & Replace(cOPT,"?",i)
Next
Sub Selected(What)
Select Case What
Case "FromMonth"
fromMDY(0) = FromMonth.Value
Case "FromDay"
fromMDY(1) = FromDay.Value
Case "FromYear"
fromMDY(2) = FromYear.Value
Case "ToMonth"
toMDY(0) = ToMonth.Value
Case "ToDay"
toMDY(1) = ToDay.Value
Case "ToYear"
toMDY(2) = ToYear.Value
End Select
End Sub
Sub DisplayDates()
MsgBox "From:" & vbTab & Join(fromMDY,"/") & vbCrlf _
& "To:" & vbTab & Join(toMDY,"/")
End Sub
' first: Do we use AND or OR between clauses in the WHERE?
' AndOr = ANDOR.value
Sub radiocheck()
for each b in ANDOR
if b.checked Then AndOr = b.Value
next
End Sub
' and now build up the WHERE:
where = ""
tsrch = txtsrch.Value
If tsrch <> "" Then
where = where & " Name = '" & Replace(tsrch,"'","''") & "'"
End If
If fromMDY <> "" AND toMDY<> "" Then
where = where & " convert(datetime, (left(dispdt,2) + '/' + substring(dispdt,3,2) + '/' + case when cast(right(dispdt,2) as int) >= 70 then '19' else '20' end + right(dispdt,2)), 101) Between '"& fromMDY &"' AND '"& toMDY &"' "
End If
'Take care of sql injection tactics
SQL_query = "SELECT TOP 1000 Name, Rel, Estno, dtfild, pub, [TYPE OF DOCUMENT] typeofdocument, btyp, bkno, disp, dispdt, PGNO FROM PCS60418_MTHLY_XREF WHERE " _
& where
msgBox sql_query
VBScript不区分大小写。ANDOR
与AndOr
完全相同,所以如果你这样做:
Sub radiocheck()
for each b in ANDOR
if b.checked Then AndOr = b.Value
next
End Sub
您正在为AndOr
分配一个原语,该原语与Array
或Iteratable Object
类型的ANDOR
冲突。只需重新命名其中一个变量,然后再试一次。
为了防止将来出现这种错误:使用Option Explicit
,使用正确的(一致的)变量命名和使用正确的作用域:尽可能局部地将变量传递给子例程,而不是将它们用作全局变量。