ASP Classic循环中的逻辑语句

时间:2019-05-16 22:35:53

标签: asp-classic

在过去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 个答案:

答案 0 :(得分:3)

最佳答案取决于一些假设:

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