[<<Previous Entry]
[^^Up^^]
[Next Entry>>]
[Menu]
[About The Guide]
DBSETORDER()
Bug in workarea buffering
----------------------------------------------------------------------------------
The problem is that Clipper 5.2c NTX driver does not properly update
the record pointer when indexorder is changed. See examples below:
An apparent fix is to add DBGOTO( RECNO() ) after SET ORDER / DBSETORDER()
FIELD Date, Code, Qty
LOCAL n := 1, nRec
dbCreate( "Test", ;
{ {"Date", "D", 8, 0}, {"Code" , "C", 4, 0}, {"Qty" , "N", 4, 0} } )
CLS
USE Test NEW
dbAppend() ; Date := DATE() ; Code := "001" ; Qty := 100
dbAppend() ; Date := DATE() + 1 ; Code := "002" ; Qty := 200
dbAppend() ; Date := DATE() + 2 ; Code := "003" ; Qty := 300
dbAppend() ; Date := DATE() + 3 ; Code := "004" ; Qty := 400
INDEX ON Date TO Test1 ; INDEX ON Code TO Test2
SET INDEX TO Test1, Test2
WHILE n < 3
SET ORDER TO 2
* DBGOTO( RECNO() ) // Uncomment to fix.
? nRec := RECNO()
dbSkip() ; dbSkip(-1)
?? RECNO()
IF( n == 2, QQOUT( " <- Should be 2" ), )
SET ORDER TO 1
* DBGOTO( RECNO() ) // Uncomment to fix.
Qty := 0.0
n ++
dbSkip()
END
USE
EXAMPLE 2
FIELD Date, Code, Qty
LOCAL nRec, cCode, dDate := CTOD("06/08/92")
DBCREATE( "Test", ;
{ {"Date", "D", 8, 0}, {"Code" , "C", 3, 0}, {"Qty" , "N", 4, 0} } )
CLS
USE Test NEW
dbAppend() ; Date := CTOD("05/27/92") ; Code := "001" ; Qty := 100
dbAppend() ; Date := CTOD("05/27/92") ; Code := "002" ; Qty := 200
dbAppend() ; Date := CTOD("05/27/92") ; Code := "003" ; Qty := 300
dbAppend() ; Date := CTOD("06/08/92") ; Code := "001" ; Qty := 100
dbAppend() ; Date := CTOD("06/08/92") ; Code := "002" ; Qty := 200
dbAppend() ; Date := CTOD("06/08/92") ; Code := "003" ; Qty := 300
INDEX ON DTOS(Date) + Code TO Index1
INDEX ON Code + DTOS(Date) TO index2
SET INDEX TO Index1, Index2
SEEK DTOS( dDate )
WHILE Date == dDate
nRec := RECNO() ; cCode := Code
SET ORDER TO 2
* DBGOTO( RECNO() ) // Uncomment to fix.
QOUT( Date, Code, RECNO(), " " )
DBSKIP( -1 )
* Code := cCode // Uncomment for more trouble.
QQOUT( Date, Code, RECNO(), " " )
QQOUT( IF( Code == cCode, "Ok ", "Problem" ) )
DBGOTO( nRec )
SET ORDER TO 1
* DBGOTO( RECNO() ) // Uncomment to fix.
Qty := 0
DBSKIP()
QQOUT( RECNO() ) // Should never be less than 5.
ENDDO
QOUT( "-------------------" )
LIST Date, Code, Qty
USE
?
(Modified Submittal from Peter Birch, 70473,552, 6/93)
(jwf 9/1/93)
.
This page created by ng2html v1.05, the Norton guide to HTML conversion utility.
Written by Dave Pearson