>>************************************** >> CLOSE DATABASES all >> SQLDISCONNECT(0) >> CLEAR >> SET MULTILOCKS ON >> >> LOCAL nAutoRefreshConn as Integer >> >> * Change connection string to connect to any available SQL Server >> nAutoRefreshConn=SQLSTRINGCONNECT("DRIVER=SQL Server;SERVER=(local);Trusted_Connection=Yes;") >> IF (nAutoRefreshConn <1) >> ? "Failed to connect!" >> AERROR(aerrs) >> DISPLAY MEMORY LIKE aerrs >> return >> ENDIF >> >> TEXT TO cSQL NOSHOW >> CREATE TABLE #CAAutoRefreshDemo >> ( >> f_IDENTITY int NOT NULL IDENTITY PRIMARY KEY, >> f1 int NOT NULL UNIQUE, >> f_TIMESTAMP timestamp >> ) >> ENDTEXT >> >> IF SQLEXEC(nAutoRefreshConn ,cSQL)!=1 >> ? "Failed to create demo table!" >> AERROR(aerrs) >> DISPLAY MEMORY LIKE aerrs >> ENDIF >> >> LOCAL oCA as CursorAdapter >> >> oCA=CREATEOBJECT("CA_SCOPE_IDENTITY") >> >> oCA.Alias = "CATest" >> oCA.BufferModeOverride= 5 >> oCA.DataSource= nAutoRefreshConn >> oCA.DataSourceType="ODBC" >> oCA.SelectCmd="select * from #CAAutoRefreshDemo" >> oCA.CursorSchema="f_IDENTITY I, f1 I, f_TIMESTAMP Q(8)" >> oCA.UseCursorSchema= .T. >> oCA.Tables="#CAAutoRefreshDemo" >> oCA.UpdatableFieldList="f1" >> oCA.UpdateNameList="f1 #CAAutoRefreshDemo.f1, f_TIMESTAMP #CAAutoRefreshDemo.f_TIMESTAMP, f_IDENTITY #CAAutoRefreshDemo.f_IDENTITY" >> oCA.KeyFieldList="f_IDENTITY" >> >> oCA.CursorFill() >> >> oCA.IDENTITY_Field="f_IDENTITY" >> oCA.RefreshTimestamp= .F. && just for demo purposes will include f_TIMESTAMP into InsertCmdRefreshFieldList >> oCA.InsertCmdRefreshFieldList="f_TIMESTAMP " >> >> INSERT INTO CATest (f1) VALUES (100) >> INSERT INTO CATest (f1) VALUES (200) >> INSERT INTO CATest (f1) VALUES (300) >> INSERT INTO CATest (f1) VALUES (400) >> INSERT INTO CATest (f1) VALUES (500) >> INSERT INTO CATest (f1) VALUES (600) >> INSERT INTO CATest (f1) VALUES (700) >> INSERT INTO CATest (f1) VALUES (800) >> INSERT INTO CATest (f1) VALUES (900) >> >> IF !TABLEUPDATE(.T.) >> ? "TABLEUPDATE is failed!" >> AERROR(aerrs) >> DISPLAY MEMORY LIKE aerrs >> ELSE >> LIST >> ENDIF >> >> >> TABLEREVERT(.T.) >> SQLDISCONNECT(0) >> RETURN >> >> >> DEFINE CLASS CA_SCOPE_IDENTITY AS CursorAdapter >> IDENTITY_Field="" >> >> PROCEDURE DataSource_ASSIGN >> LPARAMETERS tAssign >> this.DataSource = tAssign >> TRY >> SQLEXEC(this.DataSource, ; >> "create procedure #Get_ValHelper @in Int, @out int OUTPUT " + ; >> "AS SET NOCOUNT ON " + ; >> "SELECT @out=@in") >> CATCH >> ENDTRY >> ENDPROC >> >> PROCEDURE BeforeInsert >> LPARAMETERS cFldState, lForce, cInsertCmd >> IF LEN(ALLTRIM(this.IDENTITY_Field))>0 >> cInsertCmd = cInsertCmd + ; >> "; DECLARE @id int; SELECT @id = SCOPE_IDENTITY()" + ; >> "; EXEC #Get_ValHelper @id, ?@" + ; >> this.Alias + "." + ALLTRIM(this.IDENTITY_Field) >> ENDIF >> ? >> ? PROGRAM() >> ? "cInsertCmd=",cInsertCmd >> ENDPROC >> >> ENDDEFINE >>>>