I have a similar problem while printing a report that is inside a cursor 
(pointer).  I get a random
"Invalid date" error.  Out of a data set of 30 "loops" it will appear 
anywhere from the
2nd record to the 22 record.  No change in data or anything.   Simply run 
the program
multiple times and it gives the error at different records.   Records that 
run fine without
error one time will produce the error on another run.  The program does no 
updating,
simply prints two reports for each of the 30 customers.

This sounds like a related issue, but alas I have found no solution.  In my 
case, I only
have one date field- InvoiceDate - and searching it is easy.  I found no 
invalid data.
Reloads or packs did not help.  The report was originally driven off a view 
and I
even changed it to temporary tables, but with no improvement.  (No 
improvement on
the error, but speed was significantly improved!)  However I still get this 
random error.

Troy's mentioning to go away from a While loop is interesting.  Is there a 
known
issue with pointers or While loops?  This is the third time someone has 
suggested
not using a pointer.  I ask because I use Declare Cursor statements quite 
often.

Sorry I cannot assist with an answer, but had a few questions of my own.

Thank you,
-Bob Thompson

-----Original Message-----
From:   Michael Moser [SMTP:[EMAIL PROTECTED]
Sent:   Monday, August 18, 2003 10:19 AM
To:     RBASE-L Mailing List
Subject:        [RBASE-L] - RE: The impossible seems to happen

Hi Troy,

I thought it might be a memory issue but it seems to be data.  It will 
happen on the first loop if I restrict the pointer to a record that causes 
the problem but I can not determine why the same variable condition with 
data from that record will evaluate as False at one point and True a few 
lines later ...  can memory leak show up on the second pass of a while 
loop?  I will try switching to a go to and let you know ... at this point I 
will try anything ...

:-}

Thanks for the tip,
Michael Moser
EXAQ Micro Services
Phone: 916-768-7656
Fax: 916-966-8313

 >>  This is probably a memory leak issue related to a while loop.

 >>  Try changing your while loop into an IF statement and a GOTO.

 >>  Troy

 >>  -----Original Message-----
 >>  From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] Behalf Of Michael
 >>  Moser
 >>  Sent: Monday, August 18, 2003 9:46 AM
 >>  To: RBASE-L Mailing List
 >>  Subject: [RBASE-L] - The impossible seems to happen


 >>  Hi all,

 >>  Here is a mystery that I have been beating my head against a wall 
with.
 >>  This code processes about 8,000 records just fine then, with about 
2,000
 >>  records to go, goes into a infinite loop where variables have to have 
the
 >>  same value but do not.  if I reverse the sort order, the problem 
happens
 >>  after about 300 records.

 >>  P800, 512MB Ram, Windows XP Pro, R:Base 6.5++ 1.864xRT03.


 >>  Suddenly the second while loop starts evaluating as False, even though 
the
 >>  values are being set immediately above it to insure a True evaluation. 
 I
 >>  have even inserted diagnostic code to check the length (SLEN) of the
 >>  values
 >>  which has shown that the variables do contain the same text 
information of
 >>  the same length but they are being evaluated as different.  In one
 >>  variation
 >>  of the diagnostics I checked all three values in an IF statement, if 
one
 >>  was
 >>  false I checked each one individually to determine which one.  The 
check
 >>  of
 >>  the 3 indicated that 1 was false, the individual check found all to be
 >>  True
 >>  ... go figure.

 >>  Any Ideas?

 >>  Thanks,
 >>  Michael


 >>  Michael Moser
 >>  EXAQ Micro Services
 >>  Phone: 916-768-7656
 >>  Fax: 916-966-8313

 >>  (Note: the quotes change allows me to insert a text value for "Id" 
using
 >>  the
 >>  'text' format.)

 >>  SET QUOTES="
 >>  SET V WhereClause = +
 >>  ("Where id IS NOT NULL and Qty < 0 and SvcCode <> 10")
 >>  SET QUOTES='
 >>  DECLARE PTR1 CURSOR FOR SELECT +
 >>  Id,tDate,SvcCode,SvcDesc,Qty,SvcPr,SvcTot,SCS,Paid,tDOE +
 >>  FROM Transactions ORDER BY SCS=A, id, SvcCode &WhereClause
 >>  OPEN PTR1
 >>  SET V LastId      TEXT = 'NONE'
 >>  FETCH PTR1 INTO +
 >>  oscId X1, osctDate X1, oscSvcCode X1, oscSvcDesc X1, oscQty X1, +
 >>  oscSvcPr X1, oscSvcTot X1, oscSCS X1, oscPaid X1, osctDOE X1
 >>  IF SQLCODE <> 100 THEN
 >>  SET V LoopStatus = 'RUN'
 >>  ELSE
 >>  SET V LoopStatus = 'STOP'
 >>  ENDIF
 >>  WHILE LoopStatus <> 'STOP' THEN
 >>  IF oscId = .LastId AND oscSCS = .LastSCS AND LoopStatus = 'RUN' THEN
 >>  -- this should NEVER happen but it does.
 >>  write 'error 1'
 >>  ENDIF
 >>  -- ... more code here
 >>  SET V LastSCS TEXT = .oscSCS
 >>  SET V LastId  = .oscId
 >>  WHILE oscId = .LastId AND oscSCS = .LastSCS AND LoopStatus = 'RUN' 
THEN
 >>  -- ... more code here
 >>  FETCH PTR1 INTO +
 >>  oscId X1, osctDate X1, oscSvcCode X1, oscSvcDesc X1, oscQty X1, +
 >>  oscSvcPr X1, oscSvcTot X1, oscSCS X1, oscPaid X1, osctDOE X1
 >>  IF SQLCODE <> 100 THEN
 >>  SET V LoopStatus = 'RUN'
 >>  ELSE
 >>  SET V LoopStatus = 'STOP'
 >>  ENDIF
 >>  IF oscId <> .LastId OR oscSCS <> .LastSCS OR LoopStatus <> 'RUN' THEN
 >>  write 'message 1, ok to exit exit loop'
 >>  ENDIF
 >>  ENDWHILE
 >>  ENDWHILE
 >>  DROP CURSOR PTR1
 >>  RETURN

Reply via email to