| Register | FAQ | Calendar | Search | Today's Posts | Mark Forums Read |
|
#1
|
| 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 |
|
#2
|
| 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. |
|
#3
|
| 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 - On Fri, 22 Aug 2008 11:29:17 -0500, Ryan Lindsey wrote: > 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 |
|
#4
|
| 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. "Jim Hargan" news:1c71ox628zitr$.g7iiiut2cx4m.dlg-at-40tude.net... > 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 > > - > On Fri, 22 Aug 2008 11:29:17 -0500, Ryan Lindsey wrote: > >> 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 |
|
#5
|
| 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 |
|
#6
|
| Thank you all for the info. I thought I was just spinning my wheels. Ryan "Jim Moseley" news:48b1d274$1-at-pnews.thedbcommunity.com... > > 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 |
![]() |
| Thread Tools | |
| Display Modes | |