Article ID: 114253
Article Last Modified on 12/3/2003
**************************************************************
* *
* Function: DBSUM() *
* Parameters: *
* fieldname C Required *
* workarea N Optional *
* condition C Optional *
* *
* *
* Purpose: Sums any field in the current or specified *
* work area for any logical condition. *
* *
* NOTE: When summing a field that is not in the current *
* work area, the alias must be supplied in the first *
* parameter. *
**************************************************************
PARAMETERS fieldname, workarea, condition
*******************************
* Store parameter count and current work area to memory variables
*******************************
STORE PARAMETERS() TO parms
STORE SELECT() TO currselect
*******************************
* Verify that the field name passed in is a numeric field
*******************************
IF TYPE(fieldname) != 'N'
WAIT WINDOW "Data type mismatch" NOWAIT
RETURN ""
ELSE
*******************************
* Store current record and total records to memory variables
* Initialize m.sum memory variable
*******************************
currecord = RECNO(IIF(parms>1,workarea,currselect))
m.sum = 0
*******************************
* Select the correct work area if not current work area
*******************************
IF parms > 1
SELECT (workarea)
ENDIF
*******************************
* Position cursor at top of file
* Begin summation loop
*******************************
GO TOP
SCAN FOR IIF(parms > 2,EVALUATE(condition),.T.)
m.sum = m.sum + EVALUATE(fieldname)
SET MESSAGE TO ALLTRIM(STR(m.sum,10,2))
ENDSCAN
*******************************
* Reset record pointer
******************************
DO CASE
CASE currecord > reccount()
GO BOTTOM
SKIP 1
CASE currecord < reccount()
GO TOP
SKIP -1
OTHERWISE
GO currecord
ENDCASE
*******************************
* Select the original work area if necessary
*******************************
IF parms > 1
SELECT (currselect)
ENDIF
SET MESSAGE TO
RETURN m.sum
ENDIF
To use the DBSUM() function, execute the following commands in the Command
window or in a program:
USE customer IN 1
SELECT 0
? dbsum("customer.ytdpurch",1,"state = 'NC'")
Additional query words: VFoxWin FoxMac FoxDos FoxWin total
Keywords: kbcode KB114253