>************************************** > 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 >>