The code is as follows:
 
LABEL ONE
SET RULES OFF
CLEAR VAR VSOC
SET VAR VSOC INT
CLEAR VAR NOPER
SET RULES OFF
SET VAR VNAME1 TEXT
SET VAR VREPNAME TEXT
SET VAR NOPER TEXT
REMOVE VIEW TEMP
RENAME TABLE GINPUT TO TEMP1 NOCHECK
 
CREATE VIEW GINPUT AS SELECT +
 T1.NAMEX,SOC,SEM,COURSE,GRADENO,XYEAR,DATX,GRADE,PER,POINTS,COUNAME +
FROM PERSONAL T1,TEMP1 T2 WHERE T1.SOC=T2.SOC ORDER BY SOC
SET ERR VAR VDERR;SET VAR VONE INT TO 0
DECLARE CUR1 SCROLL CURSOR FOR SELECT PER FROM DESINPUT WHERE +
(SEM=.VSEM AND COURSE=.VCOUR AND XYEAR=.VYEAR) GROUP BY PER
OPEN CUR1 RESET
FETCH CUR1 INTO VPER IND VI1
SET VAR VERR INT =.VDERR
WHILE VERR=0 THEN
 SET VAR VONE INT TO (.VONE+.VPER)
FETCH CUR1 INTO VPER IND VI1
SET VAR VERR INT =.VDERR
ENDWHILE
DROP CURSOR CUR1
CLEAR VAR VERR,VDERR,VPER
IF VONE NE 100 THEN
    SET VAR NOPER TEXT TO 'YES';GOTO LEXUS
ELSE
   CLEAR VAR NOPER;GOTO LEXUS
ENDIF
LABEL LEXUS
DECLARE CUR1 SCROLL CURSOR FOR SELECT NAMEX FROM GINPUT +
 WHERE (SEM=.VSEM AND COURSE=.VCOUR AND XYEAR=.VYEAR) GROUP BY NAMEX
 
OPEN CUR1 RESET
FETCH CUR1 INTO STUDNAME IND VI1
WHILE SQLCODE <> 100 THEN
CLS FROM 6 TO 25
*(INFORMATION FOR GRADE INPUT TO COMPUTE AVERAGES)
--WRITE 'PLEASE WAIT' AT 15 15 YELLOW ON BLACK
CLEAR VAR TOTAL LOWX HIGHX CTN AVG1 AVERAGE1 LETTER
SET VAR LETTER TEXT;SET VAR LOWX INT;SET VAR HIGHX INT
SET VAR TOTAL INT;SET VAR LOW INT;SET VAR CT INT;SET VAR NOPER TEXT
SET VAR V1 INT TO AVEGTYPE,V2 TEXT TO AVEGNAME IN DESINPUT WHERE +
(SEM=.VSEM AND XYEAR=.VYEAR AND COURSE=.VCOUR)
IF V1=1 THEN
RUN AVERAGEA IN GRADE.APX
GOTO LEXUS1
--GOTO AVERAGEA
ENDIF
IF V1=2 THEN
 GOTO LOWESTX
ENDIF
IF V1=3 THEN
GOTO PERCENTX
ELSE
RETURN
ENDIF
 
LABEL LOWESTX
*(TOTAL GRADES BASED ON THE SS#, COURSE#, SEM AND XYEAR)
SET VAR VSOC TO SOC IN GINPUT WHERE NAMEX=.STUDNAME
SET VAR GNAME TEXT TO COUNAME IN GINPUT WHERE NAMEX=.STUDNAME AND +
SEM=.VSEM AND XYEAR=.VYEAR AND COURSE=.VCOUR
COMPUTE TOTAL AS SUM GRADE FROM GINPUT WHERE (SOC=.VSOC AND +
 COURSE= .VCOUR AND SEM=.VSEM AND XYEAR=.VYEAR)
*(FIND THE LOWEST GRADE AND COUNT ALL ENTERED FOR EACH STUDENT)
COMPUTE LOWX AS MIN GRADE FROM GINPUT WHERE (SOC=.VSOC AND +
COURSE=.VCOUR AND SEM=.VSEM AND XYEAR=.VYEAR)
COMPUTE CT AS COUNT DES FROM DESINPUT WHERE (COURSE=.VCOUR AND +
 SEM=.VSEM AND XYEAR=.VYEAR)
COMPUTE HIGHX AS MAX GRADE FROM GINPUT WHERE (SOC=.VSOC AND +
COURSE=.VCOUR AND SEM=.VSEM AND XYEAR=.VYEAR)
 
SET VAR CTN INT;SET VAR CTN TO 0;SET VAR CTN TO (.CT-1)
SET VAR AVG1 REAL
SET VAR AVERAGE1 REAL;SET VAR AVG1 TO ((.TOTAL-.LOWX)/.CTN)
SET VAR AVERAGE1 REAL TO 0;SET VAR AVERAGE1 TO (.AVG1)
*(CONDITION FOR LETTER GRADE ON DISPLAY)
SET VAR LETTER TEXT
 IF AVERAGE1 GE 89.91111 THEN
    SET VAR LETTER TO 'A'
ENDIF
 IF AVERAGE1 BETWEEN 79.91111 AND 89.90000 THEN
   SET VAR LETTER TO 'B'
ENDIF
IF AVERAGE1 BETWEEN 69.91111 AND 79.90000 THEN
   SET VAR LETTER TO 'C'
ENDIF
 IF AVERAGE1 BETWEEN 59.91111 AND 69.90000 THEN
   SET VAR LETTER TO 'D'
ENDIF
 IF AVERAGE1 LE 59.900000 THEN
   SET VAR LETTER TO 'F'
ENDIF
RECALC;GOTO LEXUS1
 
LABEL AVERAGEA
SET VAR AVERAGE1 REAL TO 0
SET VAR AVERAGE1 TO (.TOTAL)
SET VAR GNAME TEXT TO COUNAME IN GINPUT WHERE NAMEX=.STUDNAME AND +
SEM=.VSEM AND XYEAR=.VYEAR AND COURSE=.VCOUR
SET VAR VSOC TO SOC IN GINPUT WHERE NAMEX=.STUDNAME
COMPUTE TOTAL11 AS SUM GRADE FROM GINPUT WHERE +
(SOC=.VSOC AND COURSE= .VCOUR AND SEM=.VSEM AND XYEAR=.VYEAR)
COMPUTE TOTAL AS AVG GRADE FROM GINPUT WHERE +
(SOC=.VSOC AND COURSE= .VCOUR AND SEM=.VSEM AND XYEAR=.VYEAR +
AND GRADE IS NOT NULL)
*(FIND THE LOWEST GRADE AND COUNT ALL ENTERED FOR EACH STUDENT)
COMPUTE LOWX AS MIN GRADE FROM GINPUT WHERE +
(SOC=.VSOC AND COURSE=.VCOUR AND SEM=.VSEM AND XYEAR=.VYEAR)
COMPUTE CT AS COUNT DES FROM DESINPUT WHERE (COURSE=.VCOUR +
AND SEM=.VSEM AND XYEAR=.VYEAR)
COMPUTE HIGHX AS MAX GRADE FROM GINPUT WHERE (SOC=.VSOC AND +
COURSE=.VCOUR AND SEM=.VSEM AND XYEAR=.VYEAR)
 
SET VAR AVG1 TO (.TOTAL)
*(CONDITION FOR LETTER GRADE ON DISPLAY)
SET VAR LETTER TEXT
 IF AVERAGE1 GE 89.91111 THEN
   SET VAR LETTER TO 'A'
ENDIF
 IF AVERAGE1 BETWEEN 79.91111 AND 89.90000 THEN
   SET VAR LETTER TO 'B'
ENDIF
 IF AVERAGE1 BETWEEN 69.91111 AND 79.90000 THEN
   SET VAR LETTER TO 'C'
ENDIF
 IF AVERAGE1 BETWEEN 59.91111 AND 69.90000 THEN
   SET VAR LETTER TO 'D'
ENDIF
 IF AVERAGE1 LE 59.900000 THEN
   SET VAR LETTER TO 'F'
ENDIF
 
RECALC;GOTO LEXUS1
 
LABEL PERCENTX
IF NOPER IS NOT NULL THEN
SET VAR V2 TEXT TO 'AVERAGE GRADE. THE PERCENTAGES DO NOT EQUAL 100%'
RUN AVERAGEA IN GRADE.APX
 
RETURN
--GOTO AVERAGEA
ELSE
ENDIF
 
SET VAR AVERAGE1 REAL TO 0;SET ERR VAR VDERR
SET VAR AVERAGE1 REAL TO 0
SET VAR VSOC TO SOC IN GINPUT WHERE NAMEX=.STUDNAME
DECLARE CUR2 SCROLL CURSOR FOR SELECT PER FROM GINPUT WHERE +
 SOC=.VSOC AND SEM=.VSEM AND COURSE=.VCOUR AND XYEAR=.VYEAR +
 GROUP BY PER
OPEN CUR2 RESET
FETCH NEXT FROM CUR2 INTO VPER IND VI1
SET VAR VERR INT =.VDERR
WHILE VERR=0 THEN
SET VAR VONE REAL
COMPUTE VONE AS AVG POINTS FROM GINPUT WHERE (PER=.VPER AND +
SOC=.VSOC AND SEM=.VSEM AND COURSE=.VCOUR AND XYEAR=.VYEAR)
SET VAR AVERAGE1 REAL TO (.AVERAGE1 + .VONE)
FETCH NEXT FROM CUR2 INTO VPER IND VI1
SET VAR VERR INT =(.VDERR)
ENDWHILE
DROP CURSOR CUR2
CLEAR VAR VONE,VPER,VERR,VDERR
SET VAR VSOC TO SOC IN GINPUT WHERE NAMEX=.STUDNAME
SET VAR GNAME TEXT TO COUNAME IN GINPUT WHERE NAMEX=.STUDNAME AND +
SEM=.VSEM AND XYEAR=.VYEAR AND COURSE=.VCOUR
COMPUTE LOWX AS MIN GRADE FROM GINPUT WHERE (SOC=.VSOC +
AND COURSE=.VCOUR AND SEM=.VSEM AND XYEAR=.VYEAR)
COMPUTE HIGHX AS MAX GRADE FROM GINPUT WHERE +
(SOC=.VSOC AND COURSE=.VCOUR AND SEM=.VSEM AND XYEAR=.VYEAR)
SET VAR AVG1 REAL TO (.AVERAGE1)
*(CONDITION FOR LETTER GRADE ON DISPLAY)
SET VAR LETTER TEXT
 IF AVERAGE1 GE 89.91111 THEN
   SET VAR LETTER TO 'A'
ENDIF
 IF AVERAGE1 BETWEEN 79.91111 AND 89.90000 THEN
   SET VAR LETTER TO 'B'
ENDIF
 IF AVERAGE1 BETWEEN 69.91111 AND 79.90000 THEN
   SET VAR LETTER TO 'C'
ENDIF
 IF AVERAGE1 BETWEEN 59.91111 AND 69.90000 THEN
   SET VAR LETTER TO 'D'
ENDIF
 IF AVERAGE1 LE 59.900000 THEN
   SET VAR LETTER TO 'F'
ENDIF
 
RECALC
RETURN
 
Benjamin Strickland
----- Original Message -----
Sent: Monday, October 21, 2002 1:45 AM
Subject: RE: Witango-Talk: Problem with Stored Procedure

Hi,
 
I would say that the 2nd line of the message pretty much sums it up.
when you write stored procedures the need to be self contained and ask nothing from end users.
 
I noticed that your procedure doesn't take any input
ie. select (call proc5('param'))
 
does it return a value ie an integer or small text to tell the calling program that it worked.
 
It is hard to tell you what exactly went wrong without seeing the code.
 
-info-
Stored procedures are made up of SQL commands and R:BASE commands except for:
CODELOCK FORMS RBEDIT RESTORE
CONNECT PACK RBLABELS RULES
DISCONNECT PLAYBACK RECORD SET (without a keyword)
EXPRESS RBDEFINE REPORTS TRACE
Also, do not include commands that change the structure of your database or change access rights.
Ben Johansen - http://www.pcforge.com
Authorized WiTango Reseller
http://www.pcforge.com/WitangoGoodies.htm
latest beta downloads @ http://www.witango.ws 
 
-----Original Message-----
From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED]]On Behalf Of Benjamin Strickland
Sent: Sunday, October 20, 2002 7:45 AM
To: Multiple recipients of list witango-talk
Subject: Witango-Talk: Problem with Stored Procedure

Why do I get this message when I test my stored procedure?
 
This SQL has been generated by the action " SP1" :
SELECT (CALL PROC5( )) FROM STOREDPROC WHERE PROCNUMBER=1
 
[Query]
 SELECT (CALL PROC5( )) FROM STOREDPROC WHERE PROCNUMBER=1
2136 [RBTI][Oterro ODBC Driver][Grade Management System]-ERROR- Insufficient buffer space to process expressions. S1001
2557 [RBTI][Oterro ODBC Driver][Grade Management System]Illegal command in Entry/Exit Procedure. S1000

Reply via email to