Level Extreme platform
Subscription
Corporate profile
Products & Services
Support
Legal
Français
GETNEXTMODIFIED() detect add new rec
Message
From
23/11/2006 10:54:25
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:
01172075
Views:
18
>>>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?

This code didn't look like all-none to me. And fox2x tables can be included in a transaction. For a transaction all you need is a dbc.
Cetin
Çetin Basöz

The way to Go
Flutter - For mobile, web and desktop.
World's most advanced open source relational database.
.Net for foxheads - Blog (main)
FoxSharp - Blog (mirror)
Welcome to FoxyClasses

LinqPad - C#,VB,F#,SQL,eSQL ... scratchpad
Previous
Next
Reply
Map
View

Click here to load this message in the networking platform