0

1 つの検索パラメーターを受け取る hta アプリを作成しました。

この検索パラメーターを使用すると、ユーザーは名、姓、またはその両方で検索できます。

これは本当にうまくいきます。

本日、経営陣は検索の一部として日付範囲を追加することを決定しました。

ユーザーが姓、名、またはその両方または日付範囲で検索できるが、両方ではない WHERE 句を作成しようとしました。

つまり、ユーザーは、txtsrch というフォーム変数を使用して、姓、名、またはその両方で検索できます。

または、fromMDY を fromDate として、toMDY を toDate として使用して、日付範囲のみを使用することもできます。

これまでのところ、うまくいきません。

名前検索ボックスに検索を入力しても、日付範囲を選択しても、型の不一致エラーが発生します。

検索ボックスのみの場合、タイプの不一致エラーは発生しませんでした。

どんな支援も大歓迎です。

これは最小限です。関連するコードだと思います。

日付は 2013 年 1 月 1 日の形式です

'*
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
4

1 に答える 1

0

VBScript は大文字と小文字を区別しません。これを行っている場合ANDORとまったく同じです:AndOr

Sub radiocheck()
    for each b in ANDOR
        if b.checked Then AndOr = b.Value
    next
End Sub

またはタイプAndOrの と競合するプリミティブを割り当てています。2 つの変数のいずれかの名前を変更して、もう一度試してみてください。ANDORArrayIteratable Object

将来この種のエラーを防ぐには: を使用しOption Explicit、正しい (一貫性のある) 変数名を使用し、正しいスコープを使用します: 可能な限りローカルで、変数をグローバル変数として使用する代わりにサブルーチンに渡します。

于 2013-04-17T15:39:28.340 に答える