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