I am not sure if this is the best way, but I have used an array for some of my routine to check for existance of record, in such away, i have to use "index" and filter at the same time. My databse can be as big as 50,000 records.
it is getting very slow to perform basic query.
I use the following:
DIM inputp as p
DIM NRECS AS N
INPUTP=table.open("REQUEST_HEADER",file_ro_shared)
INPUTP.INDEX_PRIMARY_PUT("repair_job")
query.description="GET LIST OF ALL REPAIR JOB"
query.order="REQ_HEADER"
Query.filter="REP_BY_ID=ALLTRIM(VAR-"CIDD)"
' HERE I SPECIFICALLY WANT RECORD BELONG TO EQUAL TO VAR-"CIDD, USUALLY RESULTING TO AOUT 10 TO 20 RECORDS, OUT OF THE 50,000
query.options="M" 'force alpha to generate a new query list
ndx=inputp.query_create()
nrecs=ndx.records_get()
DIM CAT_ARRAY(NRECS) AS C
DIM I AS N
DIM J AS N
J=NRECS
INPUTP.CLOSE()
SELECT
CASE J"0
GOTO AA
CASE J=0
GOTO NO_ACTION
END
CASE J"0
GOTO NO_ACTION
END
END SELECT
END
AA:
BROWSE1.DISABLE()
HIDE_BANNER.PUSH()
sys_send_keys("{F5}")
range.flags = RANGE_INDEX .or. RANGE_FILTER .or. RANGE_DESCENDING
range.index_handle = index_handle_get(db_current(), "REPAIR_JOB")
range.filter = "REP_BY_ID = ALLTRIM(VAR-"CIDD) " '.AND. REQ_STATUS = 'ASSIGN'"
range_add(db_current(), " ", " ")
SLEEP(1/2)
sys_send_keys("{F5}")
BANNER.TEXT = ALLTRIM(STR(J))+" RECORDS FOUND"
SHOW_BANNER.PUSH()
CHECK.PUSH()
END
NO_ACTION:
SHOW_BANNER.PUSH()
CHECK.PUSH()
END
ALL ABOVE WORK VERY WELL, EXCEPT I SUSPECT THE ARRAY ROUTINE TEND TO BE SLOW, AS IT GOES THROUGH THE ENTIRE 50,000 AND THEN THE RANGE INSIDE THE INDEX DOES THIS AGAIN.
THE REAL REASON TO MAKING SURE THAT THE FILTER RECORD EXIST, BEFORE ATTEMPTING TO PERFORM THE RANGE INDEX FILTER,
ELSE THIS WOULD SLOW DOWN DO DO FUNNY THING TO MY APPLICATION, IN SUCH AWAY THAT EMPTY RECORD FORCE ALPHA TO SEARCH FOREVER???
YOUR ASSISTATNCE IS GREATLY APPRECIATED
KEN JIA
it is getting very slow to perform basic query.
I use the following:
DIM inputp as p
DIM NRECS AS N
INPUTP=table.open("REQUEST_HEADER",file_ro_shared)
INPUTP.INDEX_PRIMARY_PUT("repair_job")
query.description="GET LIST OF ALL REPAIR JOB"
query.order="REQ_HEADER"
Query.filter="REP_BY_ID=ALLTRIM(VAR-"CIDD)"
' HERE I SPECIFICALLY WANT RECORD BELONG TO EQUAL TO VAR-"CIDD, USUALLY RESULTING TO AOUT 10 TO 20 RECORDS, OUT OF THE 50,000
query.options="M" 'force alpha to generate a new query list
ndx=inputp.query_create()
nrecs=ndx.records_get()
DIM CAT_ARRAY(NRECS) AS C
DIM I AS N
DIM J AS N
J=NRECS
INPUTP.CLOSE()
SELECT
CASE J"0
GOTO AA
CASE J=0
GOTO NO_ACTION
END
CASE J"0
GOTO NO_ACTION
END
END SELECT
END
AA:
BROWSE1.DISABLE()
HIDE_BANNER.PUSH()
sys_send_keys("{F5}")
range.flags = RANGE_INDEX .or. RANGE_FILTER .or. RANGE_DESCENDING
range.index_handle = index_handle_get(db_current(), "REPAIR_JOB")
range.filter = "REP_BY_ID = ALLTRIM(VAR-"CIDD) " '.AND. REQ_STATUS = 'ASSIGN'"
range_add(db_current(), " ", " ")
SLEEP(1/2)
sys_send_keys("{F5}")
BANNER.TEXT = ALLTRIM(STR(J))+" RECORDS FOUND"
SHOW_BANNER.PUSH()
CHECK.PUSH()
END
NO_ACTION:
SHOW_BANNER.PUSH()
CHECK.PUSH()
END
ALL ABOVE WORK VERY WELL, EXCEPT I SUSPECT THE ARRAY ROUTINE TEND TO BE SLOW, AS IT GOES THROUGH THE ENTIRE 50,000 AND THEN THE RANGE INSIDE THE INDEX DOES THIS AGAIN.
THE REAL REASON TO MAKING SURE THAT THE FILTER RECORD EXIST, BEFORE ATTEMPTING TO PERFORM THE RANGE INDEX FILTER,
ELSE THIS WOULD SLOW DOWN DO DO FUNNY THING TO MY APPLICATION, IN SUCH AWAY THAT EMPTY RECORD FORCE ALPHA TO SEARCH FOREVER???
YOUR ASSISTATNCE IS GREATLY APPRECIATED
KEN JIA
Comment