我在哪里可以找到复杂的ISQL执行屏幕和ace报告的源代码?

时间:2010-06-18 03:28:40

标签: informix

我在几个软件存储库中搜索过但没有遇到任何软件存储库。

2 个答案:

答案 0 :(得分:1)

大多数复杂的ISQL表单和报告都与特定的操作数据库紧密相关,并且在使用它们的特定利基之外没有太大的兴趣。

另一个问题是复杂的报告和表格相当多。这是我写过的最大的,也是最新的一本。系统不再使用。它用于跟踪Informix的功能请求等。它将符合SO接受的限制,但不能满足所有需求(443行,约20KB,没有标签)。它使用HTML格式生成一个相当复杂的报告。 (DB-Schema生成的模式对于超过40 KB的单个答案来说太大了,但主要是因为它包含了一些由触发器调用的中等复杂的存储过程。)

-- @(#)$Id: frdbhtml95.ace,v 4.14 2003/02/12 19:55:00 jleffler Exp $
-- @(#)Project: Servers 9.Next Feature Prioritization
-- @(#)Feature Prioritization Report - HTML Output
-- @(#)Author: JL

DATABASE frdb@smartpts END

DEFINE
    PARAM[1] list_num INTEGER
    VARIABLE asd_url CHAR(70)
    VARIABLE pts_url CHAR(70)
    VARIABLE version CHAR(45)
    VARIABLE c CHAR(1)      -- HTML metacharacter mapping
    VARIABLE i INTEGER      -- HTML metacharacter mapping
    VARIABLE j INTEGER      -- HTML metacharacter mapping
    VARIABLE map VARCHAR(5)     -- HTML metacharacter mapping
    VARIABLE pad INTEGER        -- HTML metacharacter mapping
    VARIABLE sd      CHAR(350)  -- Copy of short description
    VARIABLE theme_count INTEGER
    VARIABLE disp_count INTEGER
    VARIABLE gr_disp_count INTEGER  -- Count of groups of dispositions
    VARIABLE gr_fgrp_count INTEGER  -- Count of feature groups within theme
    VARIABLE ov_fgrp_count INTEGER  -- Count of feature groups overall
    VARIABLE ov_fnum_count INTEGER  -- Count of feature numbers overall
END

OUTPUT
    PAGE LENGTH 90
    TOP MARGIN 0
    BOTTOM MARGIN 0
    LEFT MARGIN 0
    RIGHT MARGIN 80
END

-- Create temp table x8 with fr_grp numbers, and fr_num as members of group.
-- Group leaders are tagged 'A'; group members are tagged 'B'.
SELECT f9.fr_num as fr_grp, f9.fr_num as fr_num, 'A' AS fr_type
    FROM fr_list_items f9
    WHERE f9.fr_num NOT IN (SELECT member FROM fr_bug_group WHERE fr_list_num = $list_num)
      AND f9.abc_category != 'X'
      AND f9.fr_status != 'D'
      AND f9.fr_list_num = $list_num
UNION
SELECT f9.fr_num as fr_grp, grp.member as fr_num, 'B' AS fr_type
    FROM fr_list_items f9, fr_bug_group grp
    WHERE f9.fr_num = grp.master
      AND f9.abc_category != 'X'
      AND f9.fr_list_num = $list_num
      AND grp.fr_list_num = $list_num
    INTO TEMP x8;

-- Create temp table with fr_grp number and number of rows in the group.
SELECT fr_grp, COUNT(*) AS grp_size
    FROM x8
    GROUP BY fr_grp
    INTO TEMP x9;

SELECT
    f8.theme AS theme,              -- defined by group master
    f8.disposition AS disposition,  -- defined by group master
    f8.abc_category AS category,    -- defined by group master
    f8.priority AS fe_priority,     -- defined by group master
    x8.fr_grp,                      -- sequencing
    x8.fr_type,                     -- sequencing
    x8.fr_num,                      -- PTS FR number
    th.priority AS th_priority,     -- sequencing
    bug.short_description,          -- FR Description
    th.description AS theme_name,   -- sequencing
    di.description AS disp_name,    -- sequencing
    di.priority AS di_priority,     -- sequencing
    l.title,                        -- list title
    o.owner_name AS owner,          -- list owner
    l.updated,                      -- last time list modified
    p.project_id,                   -- project number
    p.codename,                     -- project code name
    p.description,                  -- project description
    p.projname,                     -- project name
    f8.risk,                        -- defined by group master
    f8.effort,                      -- defined by group master
    f8.benefit,                     -- defined by group master
    f8.impacts_csdk,                -- defined by group master
    f8.req_user AS req_who,         -- who it was requested by
    f8.req_why,                     -- why it was requested
    x9.grp_size                     -- for ROWSPAN information.
FROM
    x8,
    x9,
    fr_list_items f8,
    themes th,
    dispositions di,
    pts_bug bug,
    fr_lists l,
    projects p,
    owners o
WHERE f8.theme = th.theme
  AND f8.disposition = di.code
  AND x8.fr_grp = f8.fr_num
  AND x8.fr_grp = x9.fr_grp
  AND x8.fr_num = bug.bug_num
  AND f8.fr_list_num = $list_num
  AND f8.fr_list_num = l.fr_list_num
  AND l.owner_id = o.owner_id
  AND l.project_id = p.project_id
  AND th.project_id = p.project_id
  AND di.project_id = p.project_id
ORDER BY th_priority DESC, theme_name, di_priority DESC, disposition,
         category, fe_priority DESC, fr_grp, fr_type, fr_num

END

FORMAT

FIRST PAGE HEADER
    LET pts_url = "http://lxptsws1.lenexa.ibm.com/Reporter/buginfo.cgi?bug="
    LET asd_url = "http://rose.oak.informix.com/projects/falcon/FalconDocs3.html"
    PRINT "<HTML>"
    PRINT "<HEAD>"
    PRINT "<TITLE> Feature List: Themes and Prioritization </TITLE>"
    PRINT "</HEAD>"
    PRINT "<BODY BGCOLOR=WHITE>"
    PRINT "<A NAME='top'>&nbsp;</A>"
    PRINT "<H1 ALIGN=CENTER> Feature List: Themes and Prioritization </H1>"
    PRINT "<CENTER><B> <!--REPORT-DATE--> ", CURRENT YEAR TO SECOND, " </B></CENTER>"
    PRINT "<BR>"

    PRINT "<TABLE ALIGN=CENTER WIDTH=95% BORDER=2 BGCOLOR='#CCCCFF'>"
    PRINT "<TR><TD COLSPAN=2 ALIGN=CENTER>", " Project Number ", project_id, "</TD></TR>"
    PRINT "<TR><TH WIDTH=50%> ", codename CLIPPED, " </TH><TH WIDTH=50%> ", projname CLIPPED, "</TH></TR>"
    PRINT "<TR><TD COLSPAN=2 ALIGN=CENTER>", description, "</TD></TR>"
    PRINT "</TABLE>"
    PRINT "<BR>"

    PRINT "<TABLE ALIGN=CENTER WIDTH=95% BORDER=2 BGCOLOR='#CCCCFF'>"
    PRINT "<TR><TD COLSPAN=2 ALIGN=CENTER>", " Feature List Number ", list_num, "</TD></TR>"
    PRINT "<TR><TH COLSPAN=2 ALIGN=CENTER>", title, "</TH></TR>"
    PRINT "<TR><TD WIDTH=50%>", " Owner ", owner, "</TD><TD WIDTH=50%>", " Last Modified ", updated, "</TD></TR>"
    PRINT "</TABLE>"
    PRINT "<BR>"

    PRINT "<P><TABLE ALIGN=CENTER WIDTH=95% BORDER=2>"
    PRINT "<TR><TD> Categories: A (must fix), B (might fix), C (won't fix) </TD></TR>"
    PRINT "<TR><TD> Priorities: -1 unassigned, 0 (won't happen) to 9 (very important)"
    PRINT "</TD></TR>"
    PRINT "<TR><TD> Risk: H(igh), M(edium), L(ow) </TD></TR>"
    PRINT "<TR><TD> Cost: H(igh), M(edium), L(ow) </TD></TR>"
    PRINT "<TR><TD> Benefit: H(igh), M(edium), L(ow) </TD></TR>"
    PRINT "<TR BGCOLOR='#CCFFCC'><TD>";
    PRINT "[CSDK] Items tagged with [CSDK] on a green background impact CSDK.";
    PRINT "</TD></TR>"
    PRINT "<TR><TD>";
    PRINT "Items with a white background should not impact CSDK."
    PRINT "</TD></TR>"
    PRINT "</TABLE>"

    PRINT "<P>"

    PRINT "Themes:"

    -- FOREACH SELECT theme, description, priority, COUNT(*)
    --              INTO x_theme, x_desc, x_priority
    --              FROM themes
    --              GROUP BY theme, description, priority
    --              HAVING COUNT(*) > 0
    --              ORDER BY priority DESC, description
    --     PRINT "[<A HREF=#", x_theme CLIPPED, "> ", x_desc CLIPPED, " </A>]"
    -- END FOREACH

    LET theme_count = COUNT WHERE theme = "*no theme*"
    IF theme_count > 0 THEN PRINT "[<A HREF=#*no theme*> No specific theme designated </A>]" ELSE PRINT ""
    LET theme_count = COUNT WHERE theme = "api"
    IF theme_count > 0 THEN PRINT "[<A HREF=#api> Application Development & Standards Compliance </A>]" ELSE PRINT ""
    LET theme_count = COUNT WHERE theme = "bug"
    IF theme_count > 0 THEN PRINT "[<A HREF=#bug> Defect Reduction </A>]" ELSE PRINT ""
    LET theme_count = COUNT WHERE theme = "cms"
    IF theme_count > 0 THEN PRINT "[<A HREF=#cms> Content Management Support </A>]" ELSE PRINT ""
    LET theme_count = COUNT WHERE theme = "harp"
    IF theme_count > 0 THEN PRINT "[<A HREF=#harp> High Availability, Replication, Performance </A>]" ELSE PRINT ""
    LET theme_count = COUNT WHERE theme = "hk"
    IF theme_count > 0 THEN PRINT "[<A HREF=#hk> Housekeeping </A>]" ELSE PRINT ""
    LET theme_count = COUNT WHERE theme = "istar"
    IF theme_count > 0 THEN PRINT "[<A HREF=#istar> Distributed Database </A>]" ELSE PRINT ""
    LET theme_count = COUNT WHERE theme = "isv"
    IF theme_count > 0 THEN PRINT "[<A HREF=#isv> Partner Interoperability/Compatibility </A>]" ELSE PRINT ""
    LET theme_count = COUNT WHERE theme = "os"
    IF theme_count > 0 THEN PRINT "[<A HREF=#os> Platforms and Operating Systems </A>]" ELSE PRINT ""
    LET theme_count = COUNT WHERE theme = "ras"
    IF theme_count > 0 THEN PRINT "[<A HREF=#ras> RAS Improvements </A>]" ELSE PRINT ""
    LET theme_count = COUNT WHERE theme = "security"
    IF theme_count > 0 THEN PRINT "[<A HREF=#security> Security, Authentication, Encryption </A>]" ELSE PRINT ""
    LET theme_count = COUNT WHERE theme = "smart"
    IF theme_count > 0 THEN PRINT "[<A HREF=#smart> SMART Initiative / Ease of Use </A>]" ELSE PRINT ""
    LET theme_count = COUNT WHERE theme = "smv"
    IF theme_count > 0 THEN PRINT "[<A HREF=#smv> Storage Management Vendors </A>]" ELSE PRINT ""
    LET theme_count = COUNT WHERE theme = "swg"
    IF theme_count > 0 THEN PRINT "[<A HREF=#swg> SWG Initiatives </A>]" ELSE PRINT ""
    LET theme_count = COUNT WHERE theme = "xb"
    IF theme_count > 0 THEN PRINT "[<A HREF=#xb> IBM Cross-Brand Integration/Interoperability </A>]" ELSE PRINT ""

    LET ov_fgrp_count = 0
    LET ov_fnum_count = 0

BEFORE GROUP OF theme_name
    PRINT "<HR>"
    PRINT "<A NAME=", theme CLIPPED, "> &nbsp; </A>"
    PRINT "<TABLE WIDTH=95% ALIGN=CENTER BORDER=2>"
    PRINT "<TR><TH COLSPAN=7> <BIG><BIG><B>Theme: ", "<A HREF='Themes-9.50/frdb-", theme CLIPPED, ".html'>",
            theme_name CLIPPED, "</A>", "</B></BIG></BIG></TH></TR>"
    PRINT "<TR>",
          "<TH WIDTH=5%>", "PTS No", "</TH>",
          "<TH COLSPAN=5 WIDTH=15%>", "Category, Priority,<BR>",
          "Risk, Cost, Benefit", "</TH>",
          "<TH WIDTH=80%>", "Description", "</TH>",
          "</TR>"
    LET gr_disp_count = 0
    LET gr_fgrp_count = 0

BEFORE GROUP OF disposition
    SKIP 1 LINE
    PRINT "<TR><TH COLSPAN=7 BGCOLOR='#FFFFCC'>", disp_name, "</TH>"
    PRINT "</TR>"
    LET gr_disp_count = gr_disp_count + 1

BEFORE GROUP OF fr_grp
    LET gr_fgrp_count = gr_fgrp_count + 1
    LET ov_fgrp_count = ov_fgrp_count + 1
    IF impacts_csdk = 'Y' THEN
        PRINT "  <TR BGCOLOR='#CCFFCC'>"
    ELSE
        PRINT "  <TR>"
    PRINT "    <TD WIDTH=5%>";
    PRINT "<A HREF='", pts_url CLIPPED,
            fr_grp USING "<<<<<<", "'> ", fr_grp USING "&&&&&&", " </A>", "</TD>"
    IF (disposition = 'pre-fixed' OR
        disposition = 'rejected' OR
        disposition = 'nfp' OR
        disposition = 'sep') THEN
        PRINT "    <TD COLSPAN=5> &nbsp; </TD>"
    ELSE
        BEGIN
        PRINT "    <TD WIDTH=3%>", category, "</TD>"
        PRINT "    <TD WIDTH=3%>", fe_priority USING "-&", "</TD>"
        PRINT "    <TD WIDTH=3%>", risk, "</TD>"
        PRINT "    <TD WIDTH=3%>", effort, "</TD>"
        PRINT "    <TD WIDTH=3%>", benefit, "</TD>"
        END
    PRINT "    <TD WIDTH=80%><SMALL>"
    IF impacts_csdk = 'Y' THEN PRINT "[CSDK] ";

    # Map HTML characters out of the way
    LET i = 150 # length(short_description) - except that isn't in ACE!
    LET sd = ""
    LET pad = 0
    FOR j = 1 TO i DO
    BEGIN
        LET c = short_description[j]
        IF c = "<" THEN LET map = "&lt;"
        ELSE IF c = ">" THEN LET map = "&gt;"
        ELSE IF c = "&" THEN LET map = "&amp;"
        ELSE LET map = c
        IF pad != 0 THEN
            LET sd = sd CLIPPED, " ", map
        ELSE
            LET sd = sd CLIPPED, map
        IF c = " " OR c IS NULL THEN LET pad = 1
        ELSE LET pad = 0
    END
    PRINT sd CLIPPED WORDWRAP
    PRINT "</SMALL>"
    IF req_who != "no-one" OR req_why != "no reason" THEN
        BEGIN
        PRINT "<BR><SMALL><FONT COLOR=BLUE>", "Requested by ", req_who, " because: "
        PRINT req_why CLIPPED WORDWRAP
        PRINT " </FONT></SMALL>"
        END

        IF grp_size > 1 THEN
        BEGIN
                PRINT "<BR>"
                PRINT "Related feature requests include: "
        END

ON EVERY ROW
    IF fr_type = 'B' THEN
                PRINT "    <A HREF='", pts_url CLIPPED,
                        fr_num USING "<<<<<<", "'> ", fr_num USING "&&&&&&", " </A>"

AFTER GROUP OF fr_grp
    PRINT "</TD></TR>"
    SKIP 1 LINE

AFTER GROUP OF disposition
    SKIP 1 LINE

AFTER GROUP OF theme_name
    PRINT "</TABLE>"
    PRINT "<BR>"
    PRINT "<A HREF='#top'> Top </A>"
    PRINT
        GROUP COUNT USING "<<<<", " Feature Requests listed in ",
        gr_fgrp_count USING "<<<<", " Feature Groups ",
        gr_disp_count USING " with <<<< dispositions",
        " within theme <B>", theme_name CLIPPED, "</B>"
    PRINT "<BR>"

ON LAST ROW
    PRINT "<HR>"
    PRINT "<BR>"
    PRINT COUNT USING "<<<<<", " Total Feature Requests listed in ",
          ov_fgrp_count USING "<<<<<", " Feature Groups"

    PRINT "<P>"
    PRINT "<TABLE WIDTH=60% ALIGN=CENTER><TR><TD>"
    PRINT "<SM><I>"
    PRINT "NB: These statistics are not guaranteed accurate."
    PRINT "But they are much more reliable than those in previous"
    PRINT "versions of this report."
    PRINT "</I></SM>"
    PRINT "</TD></TR></TABLE>"

    PRINT "<P>"
    PRINT "<TABLE WIDTH=60% ALIGN=CENTER BORDER=2>"
    PRINT "<TR><TH COLSPAN = 2> Summary by Categories </TH></TR>"
    PRINT "<TR><TD WIDTH=80%> Category A (must fix) </TD><TD>", (COUNT WHERE category = 'A') USING "###&", "</TD></TR>"
    PRINT "<TR><TD> Category B (may fix) </TD><TD>", (COUNT WHERE category = 'B') USING "###&", "</TD></TR>"
    PRINT "<TR><TD> Category C (won't fix) </TD><TD>", (COUNT WHERE category = 'C') USING "###&", "</TD></TR>"
    PRINT "</TABLE>"
    SKIP 1 LINE

    PRINT "<P>"
    PRINT "<TABLE WIDTH=60% ALIGN=CENTER BORDER=2>"
    PRINT "<TR><TH COLSPAN = 2> Summary by Priorities </TH></TR>"
    PRINT "<TR><TD WIDTH=80%>Priority -1 (no decision) </TD><TD>", (COUNT WHERE fe_priority = -1) USING "###&", "</TD></TR>"
    PRINT "<TR><TD> Priority  0 (rejected) </TD><TD>", (COUNT WHERE fe_priority = 0) USING "###&", "</TD></TR>"
    PRINT "<TR><TD> Priority  1 (low) </TD><TD>", (COUNT WHERE fe_priority = 1) USING "###&", "</TD></TR>"
    PRINT "<TR><TD> Priority  2 </TD><TD>", (COUNT WHERE fe_priority = 2) USING "###&", "</TD></TR>"
    PRINT "<TR><TD> Priority  3 </TD><TD>", (COUNT WHERE fe_priority = 3) USING "###&", "</TD></TR>"
    PRINT "<TR><TD> Priority  4 </TD><TD>", (COUNT WHERE fe_priority = 4) USING "###&", "</TD></TR>"
    PRINT "<TR><TD> Priority  5 (medium) </TD><TD>", (COUNT WHERE fe_priority = 5) USING "###&", "</TD></TR>"
    PRINT "<TR><TD> Priority  6 </TD><TD>", (COUNT WHERE fe_priority = 6) USING "###&", "</TD></TR>"
    PRINT "<TR><TD> Priority  7 </TD><TD>", (COUNT WHERE fe_priority = 7) USING "###&", "</TD></TR>"
    PRINT "<TR><TD> Priority  8 </TD><TD>", (COUNT WHERE fe_priority = 8) USING "###&", "</TD></TR>"
    PRINT "<TR><TD> Priority  9 (high) </TD><TD>", (COUNT WHERE fe_priority = 9) USING "###&"
    PRINT "</TABLE>"

    PRINT "<P>"
    PRINT "<TABLE WIDTH=60% ALIGN=CENTER BORDER=2>"
    PRINT "<TR><TH COLSPAN = 2> Summary by Dispositions </TH></TR>"

    LET disp_count = (COUNT WHERE disposition = "8.33")
    IF disp_count > 0 THEN
        PRINT "<TR><TD> Scheduled for XPS 8.33 release </TD><TD>",
            disp_count USING "###&", "</TD></TR>"
    LET disp_count = (COUNT WHERE disposition = "8.40")
    IF disp_count > 0 THEN
        PRINT "<TR><TD> Scheduled for XPS 8.40 Release </TD><TD>",
            disp_count USING "###&", "</TD></TR>"
    LET disp_count = (COUNT WHERE disposition = "8.40-fp")
    IF disp_count > 0 THEN
        PRINT "<TR><TD> Scheduled for XPS 8.40 Fix Pack </TD><TD>",
            disp_count USING "###&", "</TD></TR>"
    LET disp_count = (COUNT WHERE disposition = "8.50")
    IF disp_count > 0 THEN
        PRINT "<TR><TD> Scheduled for XPS 8.50 Release </TD><TD>",
            disp_count USING "###&", "</TD></TR>"
    LET disp_count = (COUNT WHERE disposition = "9.30-fp")
    IF disp_count > 0 THEN
        PRINT "<TR><TD> Scheduled for IDS 9.30 Fix Pack </TD><TD>",
            disp_count USING "###&", "</TD></TR>"
    LET disp_count = (COUNT WHERE disposition = "9.31")
    IF disp_count > 0 THEN
        PRINT "<TR><TD> Scheduled for IDS 9.31 release </TD><TD>",
            disp_count USING "###&", "</TD></TR>"
    LET disp_count = (COUNT WHERE disposition = "9.40")
    IF disp_count > 0 THEN
        PRINT "<TR><TD> Scheduled for IDS 9.40 release </TD><TD>",
            disp_count USING "###&", "</TD></TR>"
    LET disp_count = (COUNT WHERE disposition = "9.40-fp")
    IF disp_count > 0 THEN
        PRINT "<TR><TD> Scheduled for IDS 9.40 Fix Pack </TD><TD>",
            disp_count USING "###&", "</TD></TR>"
    LET disp_count = (COUNT WHERE disposition = "9.50")
    IF disp_count > 0 THEN
        PRINT "<TR><TD> Scheduled for IDS 9.50 release </TD><TD>",
            disp_count USING "###&", "</TD></TR>"
    LET disp_count = (COUNT WHERE disposition = "9.50-fp")
    IF disp_count > 0 THEN
        PRINT "<TR><TD> Scheduled for IDS 9.50 Fix Pack </TD><TD>",
            disp_count USING "###&", "</TD></TR>"
    LET disp_count = (COUNT WHERE disposition = "9.60")
    IF disp_count > 0 THEN
        PRINT "<TR><TD> Possibility for IDS 9.60 Release </TD><TD>",
            disp_count USING "###&", "</TD></TR>"
    LET disp_count = (COUNT WHERE disposition = "9.70")
    IF disp_count > 0 THEN
        PRINT "<TR><TD> Possibility for IDS 9.70 Release </TD><TD>",
            disp_count USING "###&", "</TD></TR>"
    LET disp_count = (COUNT WHERE disposition = "deferred")
    IF disp_count > 0 THEN
        PRINT "<TR><TD> Deferred until after 9.60 </TD><TD>",
            disp_count USING "###&", "</TD></TR>"
    LET disp_count = (COUNT WHERE disposition = "dup")
    IF disp_count > 0 THEN
        PRINT "<TR><TD> Duplicate of another feature request </TD><TD>",
            disp_count USING "###&", "</TD></TR>"
    LET disp_count = (COUNT WHERE disposition = "nfi")
    IF disp_count > 0 THEN
        PRINT "<TR><TD> No fix planned in the foreseeable future </TD><TD>",
            disp_count USING "###&", "</TD></TR>"
    LET disp_count = (COUNT WHERE disposition = "nfp")
    IF disp_count > 0 THEN
        PRINT "<TR><TD> No fix possible - not enough information </TD><TD>",
            disp_count USING "###&", "</TD></TR>"
    LET disp_count = (COUNT WHERE disposition = "pre-fixed")
    IF disp_count > 0 THEN
        PRINT "<TR><TD> Fixed in a previous release </TD><TD>",
            disp_count USING "###&", "</TD></TR>"
    LET disp_count = (COUNT WHERE disposition = "rejected")
    IF disp_count > 0 THEN
        PRINT "<TR><TD> Feature request is rejected completely  </TD><TD>",
            disp_count USING "###&", "</TD></TR>"
    LET disp_count = (COUNT WHERE disposition = "sep")
    IF disp_count > 0 THEN
        PRINT "<TR><TD> Someone else's problem (not IDS 9.x R&D) </TD><TD>",
            disp_count USING "###&", "</TD></TR>"
    LET disp_count = (COUNT WHERE disposition = "techsupp")
    IF disp_count > 0 THEN
        PRINT "<TR><TD> Tool to be provided by Technical Support </TD><TD>",
            disp_count USING "###&", "</TD></TR>"

    PRINT "</TABLE>"

    PRINT "<HR>"

    LET version = "$Id: frdbhtml95.ace,v 4.14 2003/02/12 19:55:00 jleffler Exp $"
    LET version = version[6,45]
    PRINT "<CENTER><SMALL><I>Report produced by ISQL ACE and ", version CLIPPED,
            "</I></SMALL></CENTER>"

    PRINT "<H3 ALIGN=CENTER> End of Report </H3>"
    PRINT "</BODY>"
    PRINT "</HTML>"

END

答案 1 :(得分:1)

这是一个中等复杂的形式 - 来自我的书“使用Informix-SQL”的第11章(或严格地说,是对本书第11章中提出的练习的答案)。 (是的,它使用了一个不同的登录ID - 我忘记了一个,直到我再次看到它。这是...... o ......我... d ......!)

{
    @(#)$Id: sales.per,v 5.5 1991/03/22 21:44:46 john Exp $
    Answer to Chapter 11 Question 1
'\" @(#)%Q%
}

DATABASE Cars

SCREEN
{

        Stock List
        ==========

Registration   [f000   ]
Model Number   [f001] [f011]
Description    [f021                ]
               [f012                ]
               [f013                ]
Colour         [f002    ]

Notes
[f006                                              ]
[f008                                              ]
}

SCREEN
{

 [b1                                                  ]
 [b]                                                [b]
 [b] Sales entry form                               [b]
 [b]                                                [b]
 [b] Registration [f000   ]                         [b]
 [b] Model Number [p001] [f011]                     [b]
 [b] Description  [f021                ]            [b]
 [b]              [f012                ]            [b]
 [b]              [f013                ]            [b]
 [b] Customer     [c000]                            [b]
 [b] Name         [c001 ][c002    ][c003          ] [b]
 [b] Sold for     [p003        ]                    [b]
 [b] Date sold    [p004      ]                      [b]
 [b] Terms        [p005]                            [b]
 [b] Colour       [p102    ]                        [b]
 [b]                                                [b]
 [b2                                                  ]
}

SCREEN
{

Sensitive Sales data -- do not show to the customer

Registration    [f000   ]
Model Number    [f001] [f011]
Description     [f021                ]
                [f012                ]
                [f013                ]

Condition     [p]
Datebought    [p103      ]
Boughtfor     [p104        ]
Mileage       [p105       ]

Notes
[p106                                              ]
[p108                                              ]

        Profit [profit   ]
        Markup [markup]%
}

SCREEN
{

Sensitive Stock data -- do not show to the customer

Condition     [a]
Datebought    [f003      ]
Boughtfor     [f004        ]
Mileage       [f005       ]
}

SCREEN
{

           Customer details

Number  [c000]
Name    [c001 ][c002    ][c003          ]

Address  [c004                    ]
         [c005                    ]
         [c006                    ]
Post code[c007    ]

Phone number [c008            ]

Type of enquiry[c]

Spending Power (estimated) [c009       ]
Model Number    [c010]

Last contact date [c011            ]
}

SCREEN
{

         Guide prices

Model Number    [f001] [f011]
Description     [f021                ]
                [f012                ]
                [f013                ]

Year [g001] Low [g002   ] High [g003   ]

Average [gavg   ]
Minimum [gmin   ]
Maximum [gmax   ]
}

SCREEN
{

        Model List
        ==========

Model           [f001]
Maker           [f011]
                [f021                ]
Modelname       [f012                ]
Details         [f013                ]
Price           [f014      ]
Maxspeed        [f015       ]
Accel           [f016 ]
Tanksize        [f017 ]
Urban           [f018       ]
Mpgat56         [f019       ]
}

SCREEN
{

        Company Details
        ===============

Company Number  [f011]
Company Name    [f021                ]
Address         [f022                    ]
                [f023                    ]
                [f024                    ]
Postcode        [f025    ]
Phone           [f026            ]

Notes
[f028                                              ]
[f030                                              ]
}

TABLES
Stock
Models
Companies
Sales
Prices
Customers

ATTRIBUTES

f000 =*Stock.Registration
     = Sales.Registration, QUERYCLEAR, UPSHIFT, AUTONEXT, PICTURE = "AXXXXXA";
f001 =*Models.Model
     = Stock.Model, QUERYCLEAR, NOENTRY, NOUPDATE;
     = Prices.Model, QUERYCLEAR;
{ Read the commentary on the answer to find out why this join cannot be made }
{    = Customers.Lastmodel, QUERYCLEAR; }
f002 = Stock.Colour;
a    = Stock.Condition, AUTONEXT, UPSHIFT,
        INCLUDE  = ('X', 'V', 'G', 'A', 'P'),
        COMMENTS = "Xcellent, Very good, Good, Average, Poor";
f003 = Stock.Datebought;
f004 = Stock.Boughtfor;
f005 = Stock.Mileage;
f006 = Stock.Notes1;
f008 = Stock.Notes2;
c000 =*Customers.Number
     = Sales.Customer, QUERYCLEAR;
p003 = Sales.Soldfor;
p004 = Sales.Datesold,
        DEFAULT = TODAY, NOENTRY, NOUPDATE;
p005 = Sales.Terms, UPSHIFT, AUTONEXT,
    INCLUDE = ('CASH', 'ACCE', 'BARC', 'HIRE', 'CHEQ'),
    COMMENTS = "CASH, ACCEss, BARClaycard, HIRE-purchase, CHEQue";

{ These are implicitly no-entry fields }
p001 = Sales.Model;
p102 = Sales.Colour;
p    = Sales.Condition;
p103 = Sales.Datebought;
p104 = Sales.Boughtfor;
p105 = Sales.Mileage;
p106 = Sales.Notes1;
p108 = Sales.Notes2;

f011 = Models.Maker = Companies.Maker, QUERYCLEAR;
f012 = Models.Modelname;
f013 = Models.Details;
f014 = Models.Price;
f015 = Models.Maxspeed;
f016 = Models.Accel;
f017 = Models.Tanksize;
f018 = Models.Urban;
f019 = Models.Mpgat56;

f021 = Companies.Company;
f022 = Companies.Address1;
f023 = Companies.Address2;
f024 = Companies.Address3;
f025 = Companies.Postcode;
f026 = Companies.Phone;
f028 = Companies.Notes1;
f030 = Companies.Notes2;

c001 = Customers.Salut,
       COMMENTS = "Mr Mrs Miss Ms or blank",
       INCLUDE = ("Mr", "Mrs", "Miss", "Ms", NULL);
c002 = Customers.Firstname;
c003 = Customers.Surname, REQUIRED;
c004 = Customers.Address1, AUTONEXT, COMMENTS = "Enter address";
c005 = Customers.Address2, AUTONEXT, COMMENTS = "Enter address";
c006 = Customers.Address3, AUTONEXT, COMMENTS = "Enter address";
c007 = Customers.Postcode, UPSHIFT,  COMMENTS = "Enter post code",
       PICTURE = "AXXX #AA";
c008 = Customers.Phone, DOWNSHIFT,
       COMMENTS = "STD code, number, and extension";
c    = Customers.Enquiry, UPSHIFT, AUTONEXT, DEFAULT = 'S',
       COMMENTS = "Q enquiry, S sale, C contact",
       INCLUDE = ("Q", "C", "S");
c009 = Customers.Maxmoney, REVERSE,
       COMMENTS = "2000 to 100000, or blank",
       INCLUDE = (NULL, 2000 TO 100000);
{ Read the commentary to find out why
  Customers.Lastmodel is not joined to Models.Model }
c010 = Customers.Lastmodel;
c011 = Customers.Contactdate,
       DEFAULT = TODAY, FORMAT = "ddd, dd mmm yyyy", NOENTRY;

g001 = Prices.Year_made;
g002 = Prices.Lo_price, FORMAT = "###,###";
g003 = Prices.Hi_price, FORMAT = "###,###";

gmin = DISPLAYONLY TYPE DECIMAL, FORMAT = "###,###";
gmax = DISPLAYONLY TYPE DECIMAL, FORMAT = "###,###";
gavg = DISPLAYONLY TYPE DECIMAL, FORMAT = "###,###";

b1   = DISPLAYONLY TYPE CHAR, REVERSE;
b2   = DISPLAYONLY TYPE CHAR, REVERSE;
b    = DISPLAYONLY TYPE CHAR, REVERSE;

profit = DISPLAYONLY TYPE MONEY;
markup = DISPLAYONLY TYPE DECIMAL, FORMAT = "###.##";

END

INSTRUCTIONS

{ Master/detail relationships as before }
Companies MASTER OF Models
Models MASTER OF Prices
Models MASTER OF Stock

{ You may only change Sales and Customers }
BEFORE EDITADD EDITUPDATE OF Models Companies Prices Stock
    ABORT

{ You may not update Sales -- just add }
BEFORE EDITUPDATE OF Sales
    ABORT

{ You may only delete Stock records }
BEFORE REMOVE OF Sales Models Companies Customers Prices
    COMMENTS BELL REVERSE "You may not change this table"
    ABORT

{ Finish border of Sales screen }
AFTER DISPLAY OF SALES
    LET b1 = "            ABC Cars Ltd"

{ Show range of prices }
AFTER DISPLAY QUERY OF Prices
    LET gmin = MIN OF g002
    LET gmax = MAX OF g003
    LET gavg = (AVG OF g002 + AVG OF g003) / 2

{ Show the company what we made on the deal }
AFTER EDITADD OF Soldfor
    LET profit = p003 - f004
    LET markup = ((p003 -f004) / f004) * 100

{ Transfer data to Sales record }
AFTER EDITADD OF Sales.Registration
    LET p001 = f001
    LET p102 = f002
    LET p    = a
    LET p103 = f003
    LET p104 = f004
    LET p105 = f005
    LET p106 = f006
    LET p108 = f008

{ Do not let user edit transferred data }
BEFORE EDITADD OF Sales.Model
    NEXTFIELD = f000

BEFORE EDITADD OF Sales.Notes2
    NEXTFIELD = p005

END