Thanks for sharing this little gem Jim!

David Blocker
[EMAIL PROTECTED]
781-784-1919
Fax: 781-784-1860
Cell: 339-206-0261
----- Original Message -----
From: "Jim Limburg" <[EMAIL PROTECTED]>
To: "RBASE-L Mailing List" <[EMAIL PROTECTED]>
Sent: Friday, November 21, 2003 8:19 AM
Subject: [RBASE-L] - Re: RB6.5++ Memory Problems


> Steven
>
> I have written a little cmd file that makes setting of variables before
> running a form a bit easier..
>
> It will work with version 6.5++ or 7. Because of the ability that when
> we open a form in design mode Rbase declares all the vars behind the
> scenes I wanted to take advantage of this. To run this file on a 6.5++
> form type RUN frmvrlst.c2r at R:> and it will prompt you for the forms
name.
> Then pick '1. Run Step One' in the Choose menu. After this it should
> prompt you to open the form in design mode, and then rerun by typing
> RUN frmvrlst.c2r at R:> and pick '2. Run Step Two' after this close the
> form in design mode and you can just ('PASTE', Crtl-V, Right-single-click
> and choose Paste) to get the results of my code. What it will do is
> get a list of all var listed in the 'Var List' for the form and then
> alter then presetting them to NULL
> Let's say you have a var declared as vf_myvar = (This - that) in the
> form. Then it will write the var command out as SET VAR vf_myvar TEXT =
NULL
>
> Check it out.
>
> Oh, P.S. To run this on version 7 you don't have to open the form in
> design mode. RBTI was kind enough to enable this option to be able to
> do it in code.
>
> *(
> --=+=--=+=--=+=--=+=--=+=--=+=--=+=--=+=--=+=--=+=--=+=--=+=--=+=--=+=-
>      PROGRAM NAME: frmvrlst.c2r
>
>            AUTHOR: Jim Limburg
>                    Tuftco Corporation
>                    2318 Holtzclaw Ave, Chattanooga, TN 37404
>                    Voice: 423-698-8601 Fax: 423-698-0842
>                    email: [EMAIL PROTECTED] --business
>                           [EMAIL PROTECTED] --business
>                           [EMAIL PROTECTED] --home
>
>           PURPOSE: Capture the variables needed to run a form.
>                    Will set the clipboard to a list of SET VAR
>                    statements that a form needs to have preset
>                    before running
>
>         IS RUN BY: Be connected to the database you are working
>                    with and then type at R> prompt:  RUN frmvrlst.c2r
>                    This will prompt you for a form name from the list
>                    of forms in the database. If running Rb7 at this
>                    point it will then open this form in design mode.
>                    Do it's work behind the scenes and copy the
>                    variable list to the clipboard.
>                    Then all you have to do is hit Ctrl-V to paste it
>                    into a file.
>                    If you are running RB6.5++ then you have to run
>                    this in a two step process and open the form in
>                    design mode when prompted between the two stages
>                    of this process.
>
>           RETURNS: Sets the Clipboard to a list of variables
>                    that can be pasted into your code before a form call.
>
>      MODIFICATION HISTORY
>               Created:   11/18/2003
>               RB Vers:   Works with RB7, and with 6.5++
>
>   --=+=--=+=--=+=--=+=--=+=--=+=--=+=--=+=--=+=--=+=--=+=--=+=--=+=--=+=-
>   )
> SET CLIPBOARD ' '
> SET VAR vm_instepprocess TEXT
> IF vm_instepprocess <> 'Y' THEN
>    CLEAR ALL VARIABLES
> ENDIF
> SET VAR vm_dbname TEXT = NULL
> SET VAR vm_dbname = (CVAL('database'))
> IF vm_dbname IS NOT NULL THEN
>    CLEAR VAR vm_dbname
>    SET VAR vm_formname TEXT = NULL
>    SET ERROR MESSAGES OFF
>    SET MESSAGES OFF
>    SET ERROR VARIABLE errvar
>    CHOOSE vm_formname FROM #FORMS
>    IF vm_formname IS NOT NULL AND vm_formname <> '[Esc]' THEN
>      SET VAR vm_rbver = (CVAL('version'))
>      SET VAR vm_sloc = (SLOC((LUC(.vm_rbver)),'V7'))
>      IF vm_sloc > 0 THEN
>        SET VAR vm_mscmd TEXT = ('forms ' + ' ' + .vm_formname)
>        &vm_mscmd
>        CLS
>        CLEAR VAR vm_ms%
>      ELSE
>        --If we get here then we are in another version 6.5 likely
>        --but had better check
>        SET VAR vm_sloc = (SLOC((LUC(.vm_rbver)),'V6.5'))
>        IF vm_sloc > 0 THEN
>          SET VAR vm_action TEXT = NULL
>          CHOOSE vm_action +
>          FROM #LIST '1. Run Step One,2. Run Step Two,3. Quit' +
>          AT CENTER CENTER TITLE 'Choose Next Action' +
>          CAPTION 'Run Options...' LINES 5 FORMATTED
>          IF vm_action IS NOT NULL AND vm_action <> '[Esc]' THEN
>            SWITCH (.vm_action)
>              CASE '1. Run Step One'
>                SET VAR vm_msg1 TEXT = ('Open' + ' ' + .vm_formname)
>                SET VAR vm_msg TEXT = +
>                (.vm_msg1 + ' ' + +
>                'form in design mode, leave it open, and then run step
two.')
>                PAUSE FOR 11 USING .vm_msg CAPTION 'Instructions'
>                CLEAR ALL VAR EXCEPT vm_formname
>                SET VAR vm_instepprocess = 'Y'
>                CLEAR VAR vm_action
>                GOTO lbexit
>                BREAK
>              CASE '2. Run Step Two'2
>                CLEAR VAR vm_action
>                GOTO stp2
>                BREAK
>              CASE '3. Quit'
>              CASE '[Esc]'
>                CLEAR ALL VAR EXCEPT vm_formname
>                GOTO lbexit
>                BREAK
>            ENDSW
>          ENDIF
>        ELSE
>          PAUSE 2 USING 'This is only designed for version 6.5 or 7' +
>          CAPTION 'Runtime error'
>        ENDIF
>      ENDIF
>      LABEL stp2
>      CLEAR VAR errvar
>      CLEAR VAR vm_rbver,vm_sloc
>      OUTPUT formvars.lst
>      SHOW VAR
>      OUTPUT SCREEN
>      SET ERROR MESSAGES 2038 OFF
>      DROP TABLE frmvars
>      SET ERROR MESSAGES 2038 ON
>      CREATE TABLE frmvars +
>      (varname TEXT 20, varvalue TEXT 42, vartype TEXT 10)
>      LOAD frmvars FROM formvars.lst +
>      AS FORMATTED USING varname 1 18, varvalue 22 61, vartype 62 72
>      CLS
>      *(This is where it parses the information it has gathered from the
>          table and creates the file to hold the SET VAR statements.)
>      SET VAR vm_vars NOTE = NULL
>      SET ERROR MESSAGES 2077 OFF
>      ERASE frmvars.txt
>      SET ERROR MESSAGES 2077 ON
>      SET ERROR MESSAGES 705 OFF
>      DROP CURSOR curs1
>      SET ERROR MESSAGES 705 ON
>      DECLARE curs1 SCROLL CURSOR FOR SELECT varname, vartype FROM frmvars
>      OPEN curs1
>      FETCH FIRST FROM curs1 INTO vm_vname IND vm_v1, vm_vtype IND vm_v2
>      SET VAR vm_vnameshort TEXT = (SGET(.vm_vname,5,1))
>      WHILE SQLCODE <> 100 THEN
>        SWITCH (.vm_vnameshort)
>          CASE '#DATE'
>          CASE '#TIME'
>          CASE '#PI  '
>          CASE 'SQLCO'
>          CASE 'SQLST'
>          CASE '-----'
>          CASE 'Varia'
>          CASE '     '
>          CASE ' '
>          CASE 'vm_fo'
>          CASE 'vm_in'
>            BREAK
>          DEFAULT
>            SET VAR vm_vars = +
>            (.vm_vars + 'SET VAR ' + .vm_vname + ' ' +  .vm_vtype + +
>            ' = NULL' + (CHAR(13)) + (CHAR(10)))
>            BREAK
>        ENDSW
>        FETCH NEXT FROM curs1 INTO vm_vname IND vm_v1, vm_vtype IND vm_v2
>        SET VAR vm_vnameshort = (SGET(.vm_vname,5,1))
>      ENDWHILE
>      CLEAR VAR vm__v%
>      IF vm_vars IS NOT NULL THEN
>        SET CLIPBOARD .vm_vars
>      ELSE
>        PAUSE FOR 2 USING 'No variables for this form' CAPTION
'Information'
>      ENDIF
>      DROP CURSOR curs1
>      DROP TABLE frmvars
>      SET ERROR MESSAGES 2077 OFF
>      ERASE frmvars.txt
>      SET ERROR MESSAGES 2077 ON
>    ENDIF
>    --CLEAR ALL VAR
>    CLS
>    SET VAR vm_msg1 TEXT = ('Go ahead and close ' + .vm_formname)
>    SET VAR vm_msg2 TEXT = (' form that has been opened in Design mode.')
>    SET VAR vm_msg TEXT = (.vm_msg1 + .vm_msg2)
>    PAUSE 1 USING .vm_msg CAPTION 'Instruction'
>    CLEAR VAR vm_formname
> ELSE
>    PAUSE +
>    FOR 2 USING 'Your not connected to a database' CAPTION 'Execution
Error'
> ENDIF
> CLEAR ALL VAR
> LABEL lbexit
> SET ERROR MESSAGES ON
> SET MESSAGES ON
>
> RETURN
>
> Steven Hoggan wrote:
> > Hello again,
> >
> > For what it's worth, one of the biggest (by a long distance) culprits we
> > have managed to identify in terms of memory "eating" is a 3-table form
that
> > we regularly call in an iterative loop.  More often than not, memory is
not
> > released/recovered when the form is exited, and we can find a 4GB swap
file
> > used up pretty quickly.
> >
> > This problem may or may not be anything to do with the current memory
> > discussion, but it's certainly a major problem for us.
> >
> > It doesn't seem to happen to the same extent with straightforward
> > single-table forms, although this is something we are still testing.
> >
> > In general, though,  does anyone have any general recommendations for
> > efficient form construction/call/release?
> >
> > I'm thinking along the lines of (where possible) pre-setting all
variables
> > prior to calling the form, rather than having the form do the lookups,
etc.
> >
> > Thanks
> >
> > Steven
> >
> >
> >
> >
> >
> >
> >
> > Privacy & Confidentiality Notice
> > ----------------------
> >
> > This message and any attachments thereto is confidential and intended
solely
> > for the person to whom it is addressed.  It may contain privileged and
> > confidential information.  If you are not the intended recipient you
must
> > not read, copy, distribute, discuss or take any action in reliance on
it.
> > If you have received this information in error, please notify us as soon
as
> > possible on the telephone number shown.  Thank you.  Fitzpatricks.
> >
> > Tel:  +44 (0)141 306 9000
> > Fax:  +44 (0)141 306 9090
> > Web:  www.fitzpatricks.co.uk
> >
> >
>
>

Reply via email to