Логическая инструкция в цикле для ASP Classic - PullRequest
0 голосов
/ 17 мая 2019

Каким будет логическое утверждение, чтобы уведомить пользователя о том, что он приобрел тот же продукт в течение последних 90 дней?

   SQL = "SELECT id, PurchaseDate, ProductName from TableName  where id = " & id)

 Do Until objRS.EOF
if (objRS("ProductName") and objRS("PurchaseDate")  <= dateadd(day,-90,getdate())) and objRS("ProductName") and isNull(objRS("PurchaseDate")) then
    AlreadyPurchased = true
end if
objRS.movenext()
Loop

Мой цикл, который записывает его на страницу:

<%=objrs("ProductName")%><% if AlreadyPurchased then%>Last Purchased     with     last 90 days<%end if %>

1 Ответ

3 голосов
/ 17 мая 2019

Лучший ответ зависит от нескольких предположений:

A) ваш запрос не возвращает значений NULL, а

B) что вы ранее сохранили название продукта в существующей переменной.

У вашего кода есть некоторые проблемы.

1) if (objRS("ProductName") в основном спрашивает, является ли значение набора полей логическим значением True. Мое первое предположение состоит в том, что вы уже знаете название продукта, который тестируете. Таким образом, приведенный выше фрагмент кода следует заменить следующим: if (objRS("ProductName").value = strMyProductName, где strMyProductName - это переменная, в которой хранится название продукта (в виде строки).

2) Вы должны рассмотреть вопрос о сохранении вычисленной даты в переменной вне цикла. Нет необходимости повторно вычислять дату, если вы можете вычислить ее один раз, сохранить в переменной и использовать переменную в своем сравнении.

3) Удалите последний компонент вашего условного and objRS("ProductName"), потому что он избыточен и имеет ту же неисправную логику, что я объяснил в (1) выше.

4) Ваш DateAdd() может быть написан лучше.

TL; DR

dim strMyProductName, dat90, AlreadyPurchased

AlreadyPurchased = false

strMyProductName = "Shoes"

dat90 = dateadd("d", -90, now) '90 days ago

Do Until objRS.EOF
    if cstr(objRS("ProductName").value)=strMyProductName and cdate(objRS("PurchaseDate")) <= dat90 then
        AlreadyPurchased = true
        exit do
    end if
    objRS.movenext()
Loop
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...