Jan, I think you're misunderstanding what SCROLL is.  What that does is to 
scroll through rows of data in your cursor, not through lines of code.  So your 
declare cursor could FETCH LAST to go to the last data row, FETCH RELATIVE 5 to 
jump forward by 5 rows of data, etc.  FETCH NEXT is the only possible use in my 
situation, but after issuing the FETCH NEXT you still have to go somewhere with 
the data, I'm not just fetching and dumping out of the loop as the pdf example 
shows.

Unless I'm misunderstanding what you were suggesting.  You seem to be 
suggesting that SCROLL would help jump around the program code....

Karen

 

 

 

-----Original Message-----
From: karentellef <[email protected]>
To: rbase-l <[email protected]>
Sent: Fri, Apr 28, 2017 1:18 pm
Subject: Re: [RBASE-L] - From The Edge: R:BASE Cursors Explained


1.  The programmer was good at initializing variables before the cursor.  
Here's his list (look at all the REAL datatypes, the database is loaded with 
REAL columns).   In 2014 when our While loop first started misbehaving, I made 
sure that no variables are defined using a datatype within the looping, even 
tho we do run with whileopt OFF.  


SET VAR vagentno TEXT = NULL, vagentcount INTEGER = 0, vagent1comm REAL = NULL, 
+
vagent2comm REAL = NULL, vagent3comm REAL = NULL, vagentcomm REAL = NULL, +
vtestagtcomm REAL = NULL, vagtstatus TEXT = NULL, vrktcomm REAL = NULL, +
vrktcommission REAL = NULL, vagentcommission REAL = NULL, vplanins TEXT = NULL, 
+
vcountmgr INTEGER = 0, vcountpol INTEGER = 0, vinsadvance REAL = 0, +
vtestrecdate DATE = NULL, vtestagtcomm REAL = NULL, vagtcomm REAL = NULL, +
vcount INTEGER = 0, vpaycode TEXT = NULL, vicount INTEGER = 0, vagtadvance REAL 
= NULL, +
tdate DATE = NULL, fac_year  INTEGER = NULL, fac_month INTEGER = NULL, 
viscancelled TEXT = NULL, +
vdate1 DATE = NULL, vdate2 DATE = NULL, vdatecursor DATE = NULL, vdays INTEGER 
= NULL, +
vmonths INTEGER = NULL, vfreqtx TEXT = NULL, vfreq INTEGER = NULL, vmonprem 
CURR = NULL



2.  Most of the "gotos" (7 of them) relate to going to separate areas within 
the loop, to do certain calculations, skip over some calculations, or to return 
back to a previous spot in the loop if something needed to be repeated.  There 
is a possibility with very careful reconstruction that I could avoid a few of 
those gotos by constructing yet more nested IF loops, not sure.  It's one thing 
that's on my list to try!

There are only 3 actual "goto startloop" that relate to going back to the top 
to get another record, which is what you could use the SCROLL for.  I've never 
tried "scroll" without a "while" loop, however, so I'd have to test if that 
would even work.  When this was an actual while loop, I think it used 
"CONTINUE", which would be my first choice over SCROLL, but I no longer have a 
while loop.  The "goto startloop" is only evaluated if there's error conditions 
in the record, and is only at the very top of the processing loop.  If I go 
with one of my ideas of setting up an autonumbered temp table first rather than 
a declare cursor, I should be able to do the error checking before I even get 
into the loop, so that will take away the "goto startloop" altogether!


Karen

 

 

-----Original Message-----
From: jan johansen <[email protected]>
To: karentellef via RBASE-L <[email protected]>
Sent: Fri, Apr 28, 2017 11:43 am
Subject: Re: [RBASE-L] - From The Edge: R:BASE Cursors Explained



Karen,
 
This is an excellent article. A couple of things for you.
 
1. Since you are dealing with an OLD cursor, make sure you SET all the needed 
VARIABLE datatypes and values to NULL completely outside the CURSOR. You can 
set the values inside the CURSOR but you can't (shouldn't) really define vars 
inside the CURSOR.
 
2. Because of all your GOTO's inside the CURSOR, you should really explore the 
SCROLL feature in your cursor. The cursor is looking for the GOTO Labels from 
top to bottom repeatedly. Telling the cursor to go forward or backward a 
certain number of rows (since you know where the labels are) would most 
certainly speed up the cursor.
 
Jan 
 
-----Original Message-----
From: karentellef via RBASE-L <[email protected]>
To: [email protected]
Date: Fri, 28 Apr 2017 12:16:47 -0400
Subject: Re: [RBASE-L] - From The Edge: R:BASE Cursors Explained
 
Cool, read the whole document!!  Unfortunately not alot of it applies
to my specific situation since there are no nested cursors and it's
never updating any tables.  The original writer of the program also did
a nice job of writing the initial "declare" command to pull in as much
data as needed, including some calculations right there rather than
within the loop.

But one thing jumped out, that you say that a "set var" is slightly
faster than a "select into".  I was thinking of converting all those "set var"
statements, so I won't bother now!

Karen
 
 
 
 
-----Original Message-----
From: A. Razzak Memon <[email protected]>
To: rbase-l <[email protected]>
Sent: Fri, Apr 28, 2017 10:56 am
Subject: [RBASE-L] - From The Edge: R:BASE Cursors Explained

Friday, April 28, 2017

>From The Edge.: R:BASE Cursors Explained
Product.......: R:BASE X, R:BASE X Enterprise (Version 10)
Build.........: 10.0.2.20411 or higher www.rupdates.com
Keywords......: Commands, CURSOR, DECLARE, FETCH, SELECT


An R:BASE cursor is a valuable programming control structure that
enables traversal
reference over the records in a database. It is a pointer to rows in
a table that
can step through rows one by one, performing the same action on each
row. A cursor
can be set to point to all the rows in a table or to a subset of
rows. A cursor is
set using the DECLARE CURSOR command.

R:BASE supports several types of cursors and cursor structures including:

. Multi-Table Cursors
. Non-Updateable Cursors
. Nested Cursors
. Resettable Cursors
. Scrolling Cursors

All of the cursors above and examples of Optimizing Cursors are
described within
the R:BASE Cursors Explained technical document.

>From The Edge: http://www.razzak.com/fte

Article Title: R:BASE Cursors Explained

Very Best R:egards,

Razzak.

www.rbase.com
www.facebook.com/rbase


--
You received this message because you are subscribed to the Google Groups 
"RBASE-L" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.
  
 
 
--
You received this message because you are subscribed to the Google Groups 
"RBASE-L" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

-- 
You received this message because you are subscribed to the Google Groups 
"RBASE-L" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.



-- 
You received this message because you are subscribed to the Google Groups 
"RBASE-L" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to