Example: custdata.4gl (Function delete_cust)
Function delete_cust implements the code to remove a customer record
from the database, from the customer number passed as parameter. The function checks is there are no
remaining orders referencing the customer number, and asks the user for confimation.
Function
delete_cust (custquery.4gl): 1 PUBLIC FUNCTION delete_cust(curr_cust t_cust_num) RETURNS t_cust_num
2
3 IF cust_orders_count(curr_cust) > 0 THEN
4 CALL comutils.mbox_ok("Customer","Orders are still referencing this customer")
5 RETURN curr_cust
6 END IF
7
8 IF NOT comutils.mbox_yn("Customer","Delete current customer record?") THEN
9 RETURN curr_cust
10 END IF
11
12 TRY
13 DELETE FROM customer WHERE cust_num = curr_cust
14 CATCH
15 ERROR SFMT("DELETE failed: %1",SQLERRMESSAGE)
16 RETURN curr_cust
17 END TRY
18 IF SQLCA.SQLERRD[3] == 1 THEN
19 MESSAGE "Row deleted"
20 ELSE
21 MESSAGE "Row no longer exists in the database"
22 END IF
23
24 INITIALIZE mr_custrec.* TO NULL
25 DISPLAY BY NAME mr_custrec.*
26
27 RETURN 0
28
29 END FUNCTIONNote:
- Line
1defines the function with the customer number as parameter, using thet_cust_numtype. The function returns the passed customer number if the deletion was not possible or was canceled by the user, and returns zero if the delete is performed, to indicate to the caller that a new query must be performed. - Lines
3to6check if orders are still referencing the customer number passed as parameter. Go to Example: custdata.4gl (Function cust_orders_count) for more details about the called function. - Lines
8thru10ask the user to confirm the deletion of the customer record. If the use answers no, the function returns the customer number. For more details about the popup question function, go to Example: comutils.4gl. - Lines
12thru17implement theTRY/CATCHblock where theDELETEstatement is performed. In case of SQL error (for example, if a foreigh key reference constraint is not satisfied), theCATCHblock is executed and we show a warning to the user. - Lines
18thru22check the value of theSQLCA.SQLERRD[3]register, which contains the number of processed SQL table rows. Here we expect 1 row to be deleted. If the number is zero, it means that the row has been deleted by another user. - Lines
23and25cleanup the form fields. - Lines
27returns zero, to indicate to the caller that a new query must be performed, to get fresh data from the database.