【问题标题】:Progress 4GL - Define variable month/yearProgress 4GL - 定义变量月/年
【发布时间】:2025-12-07 07:35:01
【问题描述】:

问题来了,我需要在下面的变量上创建一个日期范围。

    define variable s_date as character format "99/9999" no-undo.

我的数据库中有一个 start_date 列(格式为“99/99/9999”(dd/mm/yyyy))输入客户销售订单的日期。

我需要做的是设置变量以创建日期范围,搜索并显示定义的月份和年份的每个销售订单的结果。

PS:我用的是表格,所以用户可以定义月份和年份的范围。

【问题讨论】:

    标签: date range progress-4gl 4gl


    【解决方案1】:

    这里有一些东西可以帮助您入门。您必须考虑将其转换为适合您的表单。

    如果您使用的是没有 ADD-INTERVAL 函数的旧版本,您可以使用 DATE 函数并将月份添加 +1(请记住,如果月份是 12 月 (12)将不得不增加年份并将月份设置为 1)。

    DEFINE VARIABLE cFromDate  AS CHARACTER   NO-UNDO.
    DEFINE VARIABLE dtFromDate AS DATE        NO-UNDO LABEL "From".
    DEFINE VARIABLE dtTomDate  AS DATE        NO-UNDO LABEL "Tom".
    
    
    DEFINE VARIABLE iMonth     AS INTEGER     NO-UNDO.
    DEFINE VARIABLE iYear      AS INTEGER     NO-UNDO.
    
    
    
    UPDATE cFromDate FORMAT "99/9999" NO-ERROR.
    
    IF LENGTH(cFromDate) <> 6 THEN DO:
        MESSAGE "Invalid format" VIEW-AS ALERT-BOX ERROR.
        RETURN ERROR.
    END.
    
    ASSIGN
        iMonth = INTEGER(SUBSTRING(cFromDate,1,2)) 
        iYear  = INTEGER(SUBSTRING(cFromDate,3,4)) NO-ERROR.
    
    IF iMonth < 1 OR iMonth > 12 THEN DO:
        MESSAGE "Invalid month" VIEW-AS ALERT-BOX ERROR.
        RETURN ERROR.
    END.
    
    IF iYear < 1990 OR iYear > 2020 THEN DO:
        MESSAGE "Invalid year" VIEW-AS ALERT-BOX ERROR.
        RETURN ERROR.
    END.
    
    ASSIGN
        dtFromDate = DATE(iMonth, 1, iYear)
        dtTomDate  = ADD-INTERVAL(dtFromDate, 1, "month") - 1.
    
    
    DISPLAY 
        dtFromDate FORMAT "9999-99-99"
        dtTomDate  FORMAT "9999-99-99".
    

    【讨论】: