CLOSE DATABASES all SET MULTILOCKS ON CLEAR lCustomCursorAdapter=.F. && change to .T. to use custom CursorAdapter object CREATE CURSOR foo1 (f1 I, f2 c(10)) INSERT INTO foo1 VALUES (1,"1111") INSERT INTO foo1 VALUES (2,"2222") ?ALIAS() LIST LOCAL oXA as XMLAdapter oXA=CREATEOBJECT("XMLAdapter") oXA.AddTableSchema("foo1") oXA.ToXML("cXML") oXA=null oXA=CREATEOBJECT("XMLAdapter") oXA.LoadXML(cXML) oXA.Tables(1).Alias="foo2" oXA.Tables(1).ToCursor() SELECT foo2 CURSORSETPROP("Buffering",5) UPDATE foo2 SET f2=RTRIM(f2)+"*" oXA.ReleaseXML(.F.) oXA.IsDiffgram= .T. oXA.ToXML("cXML","",.F.,.T.,.T.) oXA=null oXA=CREATEOBJECT("XMLAdapter") oXA.LoadXML(cXML) IF lCustomCursorAdapter LOCAL oCA as CursorAdapter oCA=CREATEOBJECT("CursorAdapter") && configure CA for update oCA.DataSourceType="NATIVE" oCA.Tables="foo1" oCA.UpdatableFieldList="f1,f2" oCA.KeyFieldList="f1" oCA.UpdateNameList="f1 foo1.f1, f2 foo1.f2" ? "ApplyDiffgram using custom CA." oXA.Tables(1).ApplyDiffgram("",oCA) ELSE && XMLAdapter is smart enough to handle simple case without custom CursorAdapter && mark key fields otherwise all fields are treated as key fields oXA.Tables(1).Fields(1).Keyfield=.T. ? "ApplyDiffgram using default XMLAdapter behavior." oXA.Tables(1).ApplyDiffgram() ENDIF SELECT foo1 ?ALIAS() LIST returnThanks,