loCursorAdapter=CREATEOBJECT("CursorAdapter") lcSql="SELECT * FROM test ORDER BY testid" lcSqlUpdate="UPDATE test SET teststring=?adapter.teststring WHERE "; +"testid=?adapter.testid AND teststring=?OLDVAL('teststring','adapter')" WITH loCursorAdapter .Alias="adapter" .DataSourceType="ADO" .DataSource=CREATEOBJECT("ADODB.RecordSet") .UpdateCmdDataSourceType="ADO" .UpdateCmd=lcSqlUpdate .DataSource.ActiveConnection=loConn ENDWITH SET MULTILOCKS ON loCommand=CREATEOBJECT("ADODB.Command") WITH loCommand .CommandText=lcSql .CommandType=1 .ActiveConnection=loConn ENDWITH loUpdateCommand=CREATEOBJECT("ADODB.Command") WITH loUpdateCommand .CommandType=1 .ActiveConnection=loConn ENDWITH loCursorAdapter.UpdateCmdDataSource=loUpdateCommand loRecordSet=CREATEOBJECT("ADODB.RecordSet") WITH loRecordSet .CursorLocation=3 .CursorType=1 .LockType=3 .Source=loCommand .Open() ENDWITH THIS.oCursorAdapter.DataSource.ActiveConnection=THIS.oConnection loCursorAdapter.CursorFill(.F.,.F.,0,loRecordSet) LOCATE FOR testid=4 REPLACE teststring WITH "test5" LOCATE FOR testid=3 REPLACE teststring WITH "test6" IF TABLEUPDATE() ? "TABLEUPDATE" ENDIF loRecordSet.Close() loConn.Close() USE