Level Extreme platform
Subscription
Corporate profile
Products & Services
Support
Legal
Français
Query runs twice instead of once
Message
From
21/09/2004 05:15:47
Cetin Basoz
Engineerica Inc.
Izmir, Turkey
 
 
To
21/09/2004 00:08:53
General information
Forum:
Visual FoxPro
Category:
Other
Miscellaneous
Thread ID:
00944391
Message ID:
00944447
Views:
17
>Dear Sir,
>
>Following codes run twice instead of only time.
>What is wrong?
>
>\
>SELECT VOU_NO
>INDE ON DTOC(DATE,8) TO VOU_NO1
>ZAP
>
>CLEAR
>SELECT VOUCHERS
>INDEX ON DTOC(DATE,5)+STR(VOU_NO, 5)+ALLTRIM(VOU_TYPE) TO VOUCHERS1
>
>SELECT MIN(DATE) FROM VOUCHERS WHERE  NOT EMPTY(DATE) INTO CURSOR V
>F_DATE1 = MIN_DATE
>SELECT MAX(DATE) FROM VOUCHERS WHERE  NOT EMPTY(DATE) INTO CURSOR V
>T_DATE1 = MAX_DATE
>
>SELECT VOUCHERS
>R = RECCOUNT()
>
>DO WHILE F_DATE1<=T_DATE1
>*scan for F_DATE1<=T_DATE1
>
>	@ 13, 47 TO 17, 80 DOUBLE
>	@ 14, 50 SAY 'WAIT FOR PROCESSING' COLOR W+/RB
>	@ 15, 54 SAY 'DATE:'  COLOR W+/RB
>	@ 15, 62 SAY F_DATE1 COLOR W+/RB
>
>	STORE 0 TO CP, CR, JV1, PR, PS, SL, SS, SO, SD, SC
>	SELECT DISTINCT VOU_NO FROM VOUCHERS WHERE DATE=F_DATE1 AND VOU_TYPE= ;
>		'CP' INTO CURSOR V1
>	SELECT V1
>	COUNT TO CP
>	SELECT DISTINCT VOU_NO FROM VOUCHERS WHERE DATE=F_DATE1 AND VOU_TYPE= ;
>		'CR' INTO CURSOR V1
>	SELECT V1
>	COUNT TO CR
>	SELECT DISTINCT VOU_NO FROM VOUCHERS WHERE DATE=F_DATE1 AND VOU_TYPE= ;
>		'JV' INTO CURSOR V1
>	SELECT V1
>	COUNT TO JV1
>	SELECT DISTINCT VOU_NO FROM VOUCHERS WHERE DATE=F_DATE1 AND VOU_TYPE= ;
>		'PR' INTO CURSOR V1
>	SELECT V1
>	COUNT TO PR
>	SELECT DISTINCT VOU_NO FROM VOUCHERS WHERE DATE=F_DATE1 AND VOU_TYPE= ;
>		'PS' INTO CURSOR V1
>	SELECT V1
>	COUNT TO PS
>	SELECT DISTINCT VOU_NO FROM VOUCHERS WHERE DATE=F_DATE1 AND VOU_TYPE= ;
>		'SL' INTO CURSOR V1
>	SELECT V1
>	COUNT TO SL
>	SELECT DISTINCT VOU_NO FROM VOUCHERS WHERE DATE=F_DATE1 AND VOU_TYPE= ;
>		'SO' INTO CURSOR V1
>	SELECT V1
>	COUNT TO SO
>	SELECT DISTINCT VOU_NO FROM VOUCHERS WHERE DATE=F_DATE1 AND VOU_TYPE= ;
>		'SS' INTO CURSOR V1
>	SELECT V1
>	COUNT TO SS
>	SELECT DISTINCT VOU_NO FROM VOUCHERS WHERE DATE=F_DATE1 AND VOU_TYPE= ;
>		'SC' INTO CURSOR V1
>	SELECT V1
>	COUNT TO SC
>	SELECT DISTINCT VOU_NO FROM VOUCHERS WHERE DATE=F_DATE1 AND VOU_TYPE= ;
>		'SD' INTO CURSOR V1
>	SELECT V1
>	COUNT TO SD
>	T = CP+CR+JV1+PR+PS+SL+SO+SS+SC+SD
>
>	IF T>0
>		SELECT VOU_NO
>		APPEND BLANK
>		REPLACE DATE WITH F_DATE1, CASH_P WITH CP, CASH_R WITH CR, JV WITH JV1,  ;
>			PURC_C WITH PR, PURC_S WITH PS, LINT_S WITH SL, SEED_S WITH SS,  ;
>			OIL_S WITH SO, OILCAKE_S WITH SC, OILDIRT_S WITH SD, TOTAL WITH T
>	ENDIF
>	F_DATE1 = F_DATE1+1
>ENDDO
>
>
>Please help

Tariq,
Which part runs twice? Do while...endo part? How many times do you expect it to run. You didn't alias the variables so it's vague if some of them are memory variables or fields. I somewhat reduced the code to this. Does it make a difference?
Select VOU_NO
Zap

Clear
*Select VOUCHERS
*Index On Dtoc(Date,1)+Str(VOU_NO, 5)+Alltrim(VOU_TYPE) To VOUCHERS1
*R = Reccount()

Set Ansi On
Select Date,VOU_TYPE,Cnt(Distinct VOU_NO) As cntVouNo ;
  FROM VOUCHERS ;
  WHERE Date # {} And VOU_TYPE In ;
  ('CP', 'CR', 'JV', 'PR', 'PS', 'SL', 'SS', 'SO', 'SD', 'SC') ;
  Group By Date, VOU_TYPE ;
  order By Date ;
  INTO Cursor v1
Set Ansi Off
If _Tally > 0
  Scan
    F_DATE1 = Date

    @ 13, 47 To 17, 80 Double
    @ 14, 50 Say 'WAIT FOR PROCESSING' Color W+/RB
    @ 15, 54 Say 'DATE:'  Color W+/RB
    @ 15, 62 Say m.F_DATE1 Color W+/RB

    Store 0 To CP, CR, JV, PR, PS, SL, SS, SO, SD, SC,lnTotal
    Scan While v1.Date = m.F_DATE1
      Store v1.cntVouNo To ('m.'+Trim(v1.VOU_TYPE))
      lnTotal = m.lnTotal + v1.cntVouNo
    Endscan
    Skip -1
    If m.lnTotal > 0
      Insert Into VOU_NO ;
        (Date, CASH_P, CASH_R, JV, PURC_C, PURC_S, LINT_S, ;
        SEED_S,  OIL_S, OILCAKE_S, OILDIRT_S, Total) ;
        values ;
        (m.F_DATE1, m.CP, m.CR, m.JV, m.PR, m.PS, m.SL, ;
        m.SS, m.SO, m.SC, m.SD, m.lnTotal)
    Endif
  Endscan
Endif
Select VOU_NO
Index On Dtoc(Date,1) To VOU_NO1
PS: What's Dtoc(date,5) and dtoc(date,8)? I think it'd be droc(date,1) or dtos(date).
Cetin
Çetin Basöz

The way to Go
Flutter - For mobile, web and desktop.
World's most advanced open source relational database.
.Net for foxheads - Blog (main)
FoxSharp - Blog (mirror)
Welcome to FoxyClasses

LinqPad - C#,VB,F#,SQL,eSQL ... scratchpad
Previous
Next
Reply
Map
View

Click here to load this message in the networking platform