home *** CD-ROM | disk | FTP | other *** search
- DATABASE leads
- GLOBALS "globals.4gl"
-
- FUNCTION qcontact()
- {
- The qcontact function constructs a query by example based on
- the user's input in the f_qcontact form. It retrieves contacts
- that satisfy the query and displays each one. The contact the user
- selects to update is then updated in the contact table, and if
- the contact was a sale, in the sale table.
- }
- DEFINE wbuf CHAR(400),
- qbuf CHAR(500),
- answer CHAR(1),
- cnt SMALLINT
-
- CLEAR SCREEN
- OPEN FORM f_qcontact FROM "f_qcontact"
- DISPLAY FORM f_qcontact
- CONSTRUCT wbuf ON
- contact.cdate,
- contact.empnum,
- contact.ndate,
- contact.nemp,
- contact.notes,
- contact.ctype,
- prospect.lname,
- prospect.company,
- sale.pcode,
- sale.quantity,
- sale.discount
- FROM sr_consale.*
- LET qbuf =
- "SELECT * ",
- "FROM contact, prospect, OUTER sale ",
- "WHERE sale.cnum = contact.cnum AND ",
- "prospect.ref = contact.ref AND ",
- wbuf CLIPPED
- PREPARE q_1 FROM qbuf
- DECLARE c_qcontact CURSOR FOR q_1
- LET eflag = -1
-
- FOREACH c_qcontact INTO pr_contact.*, pr_prospect.*, pr_sale.*
- LET eflag = 1
- DISPLAY BY NAME
- pr_contact.cdate THRU pr_contact.ctype,
- pr_prospect.lname, pr_prospect.company,
- pr_sale.pcode THRU pr_sale.discount
- PROMPT "RETURN for next row; u to update this row."
- FOR CHAR answer
- IF (answer IS NOT NULL) THEN
- LET eflag = 0
- EXIT FOREACH
- END IF
- END FOREACH
-
- IF (eflag = 0) THEN
- INPUT BY NAME
- pr_contact.cdate THRU pr_contact.ctype,
- pr_sale.pcode THRU pr_sale.discount
- WITHOUT DEFAULTS
-
- AFTER FIELD empnum
- SELECT COUNT(*)
- INTO cnt
- FROM sperson
- WHERE empnum = pr_contact.empnum
- IF (cnt != 1) THEN
- ERROR "There is no salesperson number ",
- pr_contact.empnum USING "###"
- CLEAR empnum
- LET pr_contact.empnum = NULL
- NEXT FIELD empnum
- END IF
-
- AFTER FIELD nemp
- SELECT COUNT(*)
- INTO cnt
- FROM sperson
- WHERE empnum = pr_contact.nemp
- IF (cnt != 1) THEN
- ERROR "There is no salesperson number ",
- pr_contact.nemp USING "###"
- CLEAR nemp
- LET pr_contact.nemp = NULL
- NEXT FIELD nemp
- END IF
-
- AFTER FIELD ctype
- IF (pr_contact.ctype != "S"
- OR pr_contact.ctype IS NULL) THEN
- CLEAR pcode
- CLEAR quantity
- CLEAR discount
- LET pr_sale.pcode = NULL
- LET pr_sale.quantity = NULL
- LET pr_sale.discount = NULL
- EXIT INPUT
- END IF
-
- AFTER FIELD pcode
- SELECT COUNT(*)
- INTO cnt
- FROM product
- WHERE pcode = pr_sale.pcode
- IF (cnt != 1) THEN
- ERROR "There is no product code ", pr_sale.pcode USING "###"
- CLEAR pcode
- LET pr_sale.pcode = NULL
- NEXT FIELD pcode
- END IF
-
- AFTER FIELD discount
- IF (pr_sale.discount < 0
- OR pr_sale.discount > 100) THEN
- ERROR "Must be in the range 0-100"
- NEXT FIELD discount
- END IF
- END INPUT
-
- UPDATE contact SET
- cdate = pr_contact.cdate,
- empnum = pr_contact.empnum,
- ndate = pr_contact.ndate,
- nemp = pr_contact.nemp,
- notes = pr_contact.notes,
- ctype = pr_contact.ctype
- WHERE cnum = pr_contact.cnum
- UPDATE sale SET
- pcode = pr_sale.pcode,
- quantity = pr_sale.quantity,
- discount = pr_sale.discount
- WHERE cnum = pr_sale.cnum
- END IF
- IF (eflag = -1) THEN
- ERROR "There are no rows that satisfy these criteria."
- SLEEP 3
- END IF
- IF (eflag = 1) THEN
- ERROR "There are no more rows."
- SLEEP 3
- END IF
- LET eflag = 0
- CLEAR SCREEN
- END FUNCTION
-