>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
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) ENDDObut 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?