Level Extreme platform
Subscription
Corporate profile
Products & Services
Support
Legal
Français
GETNEXTMODIFIED() detect add new rec
Message
From
23/11/2006 10:47:58
 
 
To
23/11/2006 09:12:26
Cetin Basoz
Engineerica Inc.
Izmir, Turkey
General information
Forum:
Visual FoxPro
Category:
Coding, syntax & commands
Environment versions
Visual FoxPro:
VFP 7 SP1
OS:
Windows XP SP2
Database:
Visual FoxPro
Miscellaneous
Thread ID:
01172021
Message ID:
01172071
Views:
16
>>Does anyone know if GETNEXTMODIFIED() detects the addition of (maybe several) records to a buffered table, obviously, before TableUpdate() is issued?
>>
>>The new records will have had fields filled in before saving.
>>
>>'ppreciate it
>>
>>Terry
>
>Hey Terry,
>It's all about GetNextModified() :)
>ie:
>
>lnNext = GetNextModified(0)
>do while m.lnNext # 0
>  go m.lnNext
>  if m.lnNext < 0 && new record
>*...
>  else && update
>*...
>  endif
>  lnNext = GetNextModified(m.lnNext)
>enddo
>
Cetin

Thank you, Cetin & Boris

Thing is, I don't want to manufacture the save code. I've already got a class save method snippet from way, way back - half inherited and half altered by me, as follows:
CASE Not lInDBC AND (ATC("2", GetFldState(-1)) <> 0 OR ATC("3", GetFldState(-1)) <> 0)
	* Field was edited - in Free Table
	* Since free tables are not supported by transactions,
	* we must process record by record
	lnModRecord = GetNextMod(0)
  DO WHILE lnModRecord <> 0	                  && loop locks all records
    GO lnModRecord
    llSuccess                 = RLOCK()	&& Try to lock record
    IF Not llSuccess			&& Failed to lock record
	lcErrorMessage       = "Record in use by another user"
	UNLOCK ALL
	EXIT
    EndIf
    IF Not llHadMessage	&& so we don't repeat alert
        * See if record(s) modified by another user
        FOR lnFldCnt = 1 TO FCOUNT()
	 IF TYPE(FIELD(lnFldCnt)) = "G"	&& Skip for General fields
	     LOOP					
	 ENDIF
	 IF OLDVAL(FIELD(lnFldCnt)) <> CURVAL(FIELD(lnFldCnt))
	     llHadMessage    = .T.
   	     IF sysConfirm("The record has been changed by another user while you've been editing it.  " + ; 
                            "Do you want to overwrite the other user's changes with your own?")
	         llOverwrite = .T.
	     ELSE
		llSuccess   = .F.
		UNLOCK ALL
		EXIT
	     ENDIF
          ENDIF OLDVAL()
        ENDFOR
    ENDIF Not llHadMessage
    lnModRecord               = GetNextMod(lnModRecord)
  ENDDO
but afaik it's only been used to save one new rec at at time, as in a standard form new - input data - save scenario. In this case I create one record then maybe 3-4 "sister" recs and need to save them all together, or none at all, and it can't be done in a transaction, as theyt're free 2.6 tables. I feel that the above code would do just that. What do you think?
- Whoever said that women are the weaker sex never tried to wrest the bedclothes off one in the middle of the night
- Worry is the interest you pay, in advance, for a loan that you may never need to take out.
Previous
Next
Reply
Map
View

Click here to load this message in the networking platform