You can view the dbgrid as a single object - and certainly in the forms
builder it is, but what I was getting at is that it is made up of rows and
columns.  Each of those cells is a field on a table.  One dbedit = one field
in the current row of a table.  Think of the dbgrid as a variable number of
dbedits. 

 

By the way, it just occurred to me that if you really need better control
over what happens moving into or out of individual fields, you *could* build
a scrolling region to look and act very much like a dbgrid.  The advantage
would be all the on-entry, on-exit and on-click eeps available.  What you
lose is the ability to move columns around and sort by clicking the title.
But even the sorting could be emulated, if the region is based upon a view.

 

Emmitt Dove

Manager, Converting Applications Development

Evergreen Packaging, Inc.

[email protected]

(203) 214-5683 m

(203) 643-8022 o

(203) 643-8086 f

[email protected]

 

From: [email protected] [mailto:[email protected]] On Behalf Of Doug
Hamilton
Sent: Friday, March 27, 2009 6:39 PM
To: RBASE-L Mailing List
Subject: [RBASE-L] - Re: RBTI_DIRTY_FLAG

 

Possible.  But I think my "best practices" aren't the best.
I'm editing permanent-table data (inventory xacts) in a db grid.  I think
it's better to load the xacts for the particular item into a temp table &
use the SYS_ROWVER approach to determine which rows were changed and then
update those rows in the permanent table.  Each row has a unique ID.

You're right - We don't need no steenkin' dirty flag!  (just a RowVer
column)

BTW,  GOTH.com, what did you mean by:

I see that my error was viewing the dbgrid as one db object.  It is really a
collection of many.

DBGrid has but one Component ID ( I think), although one can determine which
cell one is in by 
GETPROPERTY CIDDBGrid CURRENTCOLUMNNAME 'vCurrColumn'
and form expression vRowID = RowID.
Is that what you meant by many db objects?

ohmmmmmmmmmm....

Doug

Emmitt Dove wrote:



Doug,

 

Another thought:  how about using a trigger on your table to set a global
variable for you?

 

Emmitt Dove

Manager, Converting Applications Development

Evergreen Packaging, Inc.

[email protected]

(203) 214-5683 m

(203) 643-8022 o

(203) 643-8086 f

[email protected]

 

From: [email protected] [mailto:[email protected]] On Behalf Of Emmitt Dove
Sent: Friday, March 27, 2009 6:08 PM
To: RBASE-L Mailing List
Subject: [RBASE-L] - Re: RBTI_DIRTY_FLAG

 

>Enlightenment?
>Doug 

 

Available at GuruOnTheHill.com.  |-)

 

The problem is how to capture the value at the proper time.  There's no
on-entry-into-field eep or on-exit-from-field eep in the grid.  As you note,
by the time you leave the row the row is saved and the dirty flag should be
0.

For my purposes, I needed to know if any of the rows in the temp table
represented by the dbgrid had been changed.  I accomplished this by adding a
column to the temp table named "myrowver" type integer, computed to be
(IFNULL(myrowver,1,(myrowver + 1))).  First I populate the temp table (which
involves an INSERT and a few UPDATEs) then ALTER TABLE to add the myrowver
column.  As I go into the form each myrowver value is 1.  When it is time to
figure out if an update to the permanent table is in order, I look to see if
any rows have myrover > 1.

 

We don't need no steenkin' dirty flag!

 

Emmitt Dove

Manager, Converting Applications Development

Evergreen Packaging, Inc.

[email protected]

(203) 214-5683 m

(203) 643-8022 o

(203) 643-8086 f

[email protected]

 

From: [email protected] [mailto:[email protected]] On Behalf Of Doug
Hamilton
Sent: Friday, March 27, 2009 5:39 PM
To: RBASE-L Mailing List
Subject: [RBASE-L] - Re: RBTI_DIRTY_FLAG

 

I was just dealing with this today.  It seems Larry's summary is correct.
Plus, it appears that RBTI__DIRTY_FLAG does change to 1 when tabbing out of
a field and staying on the same row.  It stays zero until you leave the
field.

To trap the RBTI_DIRTY_FLAG for processing after leaving a DB Grid, I tried
On Row Exit and After Leaving Section table EEPs with 

SET VAR vRowDirtyFlag = (IFEQ(RBTI_DIRTY_FLAG,1,1,.vRowDirtyFlag))

Unfrtunately, neither EEP fires if I change data and then click a Push
Button elsewhere on the form. 
But putting the code in an After Saving Row EEP seems to trap the 1,
although I would have thought that by then it's too late - the row has
already been saved and RBTI_DIRTY_FLAG is reset to zero.

Enlightenment?
Doug 

Emmitt Dove wrote:

I see that my error was viewing the dbgrid as one db object.  It is really a
collection of many.

 

But, I accomplished my goal by emulating the sys_rowver technique (without
setting autorowver on.)

 

Emmitt Dove

Manager, Converting Applications Development

Evergreen Packaging, Inc.

[email protected]

(203) 214-5683 m

(203) 643-8022 o

(203) 643-8086 f

[email protected]

 

From: [email protected] [mailto:[email protected]] On Behalf Of Lawrence
Lustig
Sent: Wednesday, March 25, 2009 11:02 AM
To: RBASE-L Mailing List
Subject: [RBASE-L] - Re: RBTI_DIRTY_FLAG

 

<< 

Should I be expecting .RBTI_DIRTY_FLAG to return 1 if a value was changed in
a dbgrid?

>> 

 

Depends whether you scrolled out of the row or not.

 

If you have already scrolled out of the row, that row has been saved, and
the RBTI_DIRTY_FLAG should reset to 0.

 

If you have NOT scrolled out of the row, but have tabbed out of the field
you changed, I would expect RBTI_DIRTY_FLAG to contain 1, but I haven't
tested it.

 

If you have neither scrolled out of the row NOR tabbed out of the field,
then I would imagine the flag would still be 0, since the change in the
field has probably not yet been written back into the form's row buffer.

--

Larry

 

 

 

Reply via email to