>CLOSE DATABASES all >CLEAR >SET MULTILOCKS ON > >fUseView=.F. > >con=SQLCONNECT("LocalServer") > >IF fUseView > ? "---------------- Using remote view ---------------" > DELETE FILE testtimestamp.* > CREATE DATABASE testtimestamp > CREATE CONNECTION testcon CONNSTRING (SQLGETPROP(con,"ConnectString")) > SQLDISCONNECT(con) > con=SQLCONNECT("testcon",.T.) >ENDIF > >SQLEXEC(con,"DROP table testtimestamp1") >SQLEXEC(con,"CREATE table testtimestamp1 (f1 int, f2 char(10), t timestamp)") >SQLEXEC(con,"INSERT into testtimestamp1 (f1,f2) values (1,'1111')") >SQLEXEC(con,"INSERT into testtimestamp1 (f1,f2) values (2,'2222')") >SQLEXEC(con,"INSERT into testtimestamp1 (f1,f2) values (3,'3333')") > >IF fUseView > CREATE SQL VIEW test REMOTE CONNECTION testcon SHARE AS select * from testtimestamp1 >ENDIF > >LOCAL oCA as CursorAdapter > >oCA=CREATEOBJECT("TimeStampCa") >oCA.Alias="test" >oCA.DataSourceType="ODBC" >oCA.DataSource=con >oCA.SelectCmd="select * from testtimestamp1" >oCA.BufferModeOverride=5 >oCA.Tables="testtimestamp1" > >IF fUseView > oCA.KeyFieldList="f1" >ELSE > oCA.KeyFieldList="f1, t" >ENDIF > >oCA.UpdatableFieldList="f2" >oCA.UpdateNameList="f1 testtimestamp1.f1, f2 testtimestamp1.f2, t testtimestamp1.t" >oCA.WhereType= 4 > > >* get data from SQL Server >IF fUseView > USE test > oCA.CursorAttach("test") >ELSE > oCA.CursorFill() >ENDIF > >SELECT (oCA.Alias) >? "Original data." >LIST > >* convert cursor into XML >LOCAL oXA as XMLAdapter >oXA=CREATEOBJECT("XMLAdapter") > >oXA.AddTableSchema(oCA.Alias) >oXA.IsDiffgram= .T. >oXA.ToXML("cXML") > >* send XML to another client >* load XML into cursor and make changes (assume it is done on another client) >oXA.LoadXML(cXML) >oXA.Tables(1).Alias="cursor2update" >oXA.Tables(1).ToCursor() >*SELECT cursor2update >*LIST > >* modify data >CURSORSETPROP("Buffering",5,"cursor2update") >UPDATE cursor2update SET f2=RTRIM(f2)+"_New" > >* Create diffgram with changes >oXA.ReleaseXML(.F.) >oXA.ToXML("cXML",,,.T.,.T.) > >* send diffgarm back >* now we back to the first client >oXA.LoadXML(cXML) > >* we want to apply changes into our remote cursor instead of getting them into new cursor >oXA.Tables(1).ApplyDiffgram(oCA.Alias) > >SELECT (oCA.Alias) >? "Changed data." >LIST > >* Now send changes to SQL Server >*?oCA.WhereType >IF !TABLEUPDATE(.T.) > AERROR(aerrors) > DISPLAY MEMORY LIKE aerrors >ENDIF > >? >* Get current data from SQL Server >oCA.CursorRefresh() >SELECT (oCA.Alias) >? "Updated data." >LIST > >CLOSE DATABASES all >SQLDISCONNECT(0) >return > >DEFINE CLASS TimeStampCa AS CursorAdapter > >FUNCTION BeforeUpdate(cFldState, lForce, nUpdateType, cUpdateInsertCmd, cDeleteCmd) > ? cUpdateInsertCmd >ENDFUNC > >ENDDEFINE >>