>#ifndef TRUE > #define TRUE .t. > #define FALSE .f. >#endif >#define PREXIXED TRUE && if fieldnames like emp_cLast_Updated_User >#define USERFIELDNAME 'cLast_Updated_User' >#define DATETIMEFIELD 'tLast_Updated_Date' > >function RecordValidationRuleUpdateUserAndTime() > > local UpdateFieldUser, UpdateFieldDateTime, fs, i > >#if PREXIXED > UpdateFieldUser = left(Field(1), at('_', Field(1))) + upper(USERFIELDNAME) > UpdateFieldDateTime = left(Field(1), at('_', Field(1))) + upper(DATETIMEFIELD) >#else > UpdateFieldUser = upper(USERFIELDNAME) > UpdateFieldDateTime = upper(DATETIMEFIELD) >#endif > > do case > case isnull(oldval(m.UpdateFieldUser)) > && insert > repl (m.UpdateFieldUser) with sys(0), (m.UpdateFieldDateTime) with datetime() > > otherwise > && update > fs = getfldstate(-1) > > for i = 2 to len(m.fs) > > do case > case inlist(substr(m.fs, m.i, 1), '1', '3') > && not changed > > case !FieldChanged(Field(m.i-1)) > && not changed > > case inlist(Field(m.i-1), m.UpdateFieldUser, m.UpdateFieldDateTime) > && ignore > > otherwise > repl (m.UpdateFieldUser) with sys(0), (m.UpdateFieldDateTime) with datetime() > exit > endcase > endfor > endcase >endfunc >*-------------------------------------------------------------------------- >function FieldChanged(FieldName) > > do case > case isnull(oldval(m.FieldName)) or Isnull(eval(m.FieldName)) > return (isnull(oldval(m.FieldName)) <> Isnull(eval(m.FieldName)) ) > otherwise > return (oldval(m.FieldName) <> eval(m.FieldName)) > endcase >endfunc >*------------------------------------------------------------------------- >>
>function LastUserAlterTable() > > local i, aa[1], TableName > > local UpdateFieldUser, UpdateFieldDateTime > > local TableValidationRule, TableValidationText > > local RuleName > Rulename = 'RecordValidationRuleUpdateUserAndTime()' > > for i = 1 to adbobjects(aa, 'Table') > > TableName = aa[m.i] > use (m.TableName) again in 0 excl > > select (m.TableName) >#if PREXIXED > UpdateFieldUser = left(Field(1), at('_', Field(1))) + upper(USERFIELDNAME) > UpdateFieldDateTime = left(Field(1), at('_', Field(1))) + upper(DATETIMEFIELD) >#else > UpdateFieldUser = upper(USERFIELDNAME) > UpdateFieldDateTime = upper(DATETIMEFIELD) >#endif > do case > case type(m.UpdateFieldUser)<> T_UNDEFINED > > otherwise > alter table (m.TableName) ; > add (m.UpdateFieldUser) c(20) not null default '' ; > add (m.UpdateFieldDateTime) T not null default { :} ; > NOVALIDATE > > endcase > > TableValidationRule = dbgetprop(m.TableName, 'Table', 'RuleExpression') > TableValidationText = dbgetprop(m.TableName, 'Table', 'RuleText') > > do case > case !empty(atc(m.RuleName, m.TableValidationText)) > && already in > > otherwise > > if( empty(m.TableValidationRule) ) > TableValidationRule = m.RuleName > else > TableValidationRule = m.TableValidationRule + ' and ' + m.RuleName > > endif > > if( !empty(m.TableValidationText) ) > TableValidationText = 'error ' + m.TableValidationText > endif > > alter table (m.TableName) ; > set check &TableValidationRule &TableValidationText ; > NOVALIDATE > > endcase > > use in (m.TableName) > > endfor > >endfunc >*-------------------------------------------------------------------------- >Hi Gregory,