I am currently using Paradox 8.
I have a status field. Users can change this status via a table lookup
(ctrl+space).
My problem is that I want to add a log each time it's changed. My choice was
to put the code into the changeValue event but it seems the event does not
even get triggered when changing the value via ctrl+space. It will get
triggered if I actually type in the new status as long as I type something
that's in the lookup.
Am I just completely missing something? changevalue code is below but it is
never executed upon changing the field via the lookup.
method changeValue(var eventInfo ValueEvent)
var
strOldValue,
strNewValue String
endVar
strOldValue = self
doDefault
strNewValue = self
AddLog("Status changed from " + strOldValue + " to " + strNewValue)
endMethod
Jim Giner - 22 Aug 2008 19:45 GMT
You're not missing anything. It has to do with the table lookup I believe -
changevalue doesn't work the same way. What you have to do is trap in the
unlockrecord action and compare the 'new' value to the old value. basically,
read the underlying table before posting the new data.
Here's what I tried out - just a routine that demonstrates how you can see
the "prev." value before the update occurs at the record level, since you
can't capture it at the field level.
At the form level do this:
method action(var eventInfo ActionEvent)
var
oldname string
endvar
if eventInfo.isPreFilter() then
;// This code executes for each object on the form:
else
;// This code executes only for the form:
if eventinfo.id() = dataunlockrecord then
oldname = blank() ; init this fld
if tc.locate(1,name) then ; record key is called 'name'
view(tc.attributes,"Old") ; attributes is the fld I'm tracking
changes on - this displays the old value
oldname = name ; save the record key if we found a 'previous'
version
endif
dodefault ; this will do the posting
if oldname <> blank() then ; make sure I had a prev. record - if
blank then I didn't
if tc.locate(1,name) then ; re-locate the old record
view(tc.attributes,"new") ; display the newly posted value
endif
endif
endif
endif
endmethod
*****
Of course, there's probably some clever-er way of doing this, but I've not
found it.
Jim Hargan - 22 Aug 2008 20:43 GMT
Another way to approach this is to call a dialog form you design yourself,
rather than use the built-in lookup. You've already discovered one reason
to do this. Here's another, even better, reason: the path to the lookup
table is hard-coded in the table structure. If you ever change a directory
or drive, your table won't open. In Version 8, I've had this cause table
corruption and had to restore from a backup. (In later versions, moving
everything to the old locations worked, but not V8.)
--
Jim Hargan
-
> I am currently using Paradox 8.
>
[quoted text clipped - 23 lines]
>
> endMethod
Jim Giner - 22 Aug 2008 21:04 GMT
Yes - what Jim says is very true - one of the most amazingly 'wrong' things
that pdox developers did a long, long time ago was to void the alias concept
when it came to table lookups. So off-target in their grand scheme of
things.
> Another way to approach this is to call a dialog form you design yourself,
> rather than use the built-in lookup. You've already discovered one reason
[quoted text clipped - 40 lines]
>>
>> endMethod
Jim Moseley - 24 Aug 2008 22:28 GMT
Ryan,
You can get the changeValue triggered with this code in the object's Action
method:
if eventInfo.id() = DataLookup then
self.action(EditCommitField)
endif
HTH,
Jim Moseley
Ryan Lindsey - 25 Aug 2008 17:24 GMT
Thank you all for the info. I thought I was just spinning my wheels.
Ryan
> Ryan,
>
[quoted text clipped - 8 lines]
> HTH,
> Jim Moseley