Как добавить диапазон дат в код .hta?

Я написал hta-приложение, которое принимает один параметр поиска.

С помощью этого параметра поиска пользователи могут искать по имени, фамилии или по обоим параметрам.

Это работает очень хорошо.

Сегодня руководство решило добавить диапазон дат в рамках поиска.

Я попытался создать предложение WHERE, в котором пользователь может выполнять поиск по фамилии, имени или обоим диапазонам дат ИЛИ, но не по обоим.

Другими словами, с одной стороны, пользователи могут искать по фамилии, имени или по обоим, используя переменную формы, называемую txtsrch.

Или они могут просто использовать диапазон дат, используя только fromMDY как fromDate и toMDY как toDate.

Пока получается не очень.

Ввожу ли я поиск в поле поиска имени или выбираю диапазон дат, я получаю ошибку несоответствия типа.

Я не получал ошибку несоответствия типа, когда это было только поле поиска.

Любая помощь приветствуется.

Это минимальный, я думаю, соответствующий код.

Дата в формате 01.01.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

person Kenny    schedule 15.04.2013    source источник
comment
Привет @Cheran, я вижу, что ты полностью отредактировал мой вопрос. Спасибо. Могу ли я узнать, что вы изменили и почему? Спасибо   -  person Kenny    schedule 02.05.2013
comment
вы можете щелкнуть отметку времени над моим именем (например, отредактировано 21 час назад), чтобы просмотреть историю изменений. Я просто удалил приветствие (которое не добавляло ценности вопросу) и добавил языковую подсказку, чтобы раскраска синтаксиса была правильной.   -  person Cheran Shunmugavel    schedule 03.05.2013


Ответы (1)


VBScript нечувствителен к регистру. ANDOR точно такой же, как AndOr, поэтому, если вы делаете это:

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

Вы назначаете примитив AndOr, который конфликтует с ANDOR типа Array или Iteratable Object. Просто переименуйте одну из двух переменных и попробуйте еще раз.

Чтобы предотвратить подобные ошибки в будущем: используйте Option Explicit, используйте правильное (непротиворечивое) наименование переменных и используйте правильную область видимости: как можно локальнее и передавайте переменные в подпрограммы вместо того, чтобы использовать их как глобальные переменные.

person AutomatedChaos    schedule 17.04.2013
comment
Спасибо за ваш ответ. Извините, что так долго пропустил. Я ценю объяснение, но это не проблема. Даже после того, как я прокомментировал это, я все равно получаю ту же ошибку. Это связано с тем, где - person Kenny; 18.04.2013
comment
Я предлагаю вам добавить тег SQL к вашему вопросу, чтобы SO-специалисты, имеющие опыт в этой области, также могли видеть вопрос. И добавьте некоторые запросы, собранные вашим HTA, которые не будут работать. Не все, кто знает свои SQL, также способны (или хотят) читать VBScript в вашем посте. - person AutomatedChaos; 18.04.2013