Level Extreme platform
Subscription
Corporate profile
Products & Services
Support
Legal
Français
CA - AutoRefresh
Message
General information
Forum:
Visual FoxPro
Category:
Visual FoxPro Beta
Environment versions
Visual FoxPro:
VFP 9
Miscellaneous
Thread ID:
00955384
Message ID:
00955445
Views:
23
>I attempting to understand the new Auto-Refresh function in the CursorAdaptor.
>
>Is it accurate to say that in order for this to work you need a secondary unique key/combo or timestamp for a table to retrieve a key generated by the Database Server?
>
>I assumer you can not use the field that you want to reshresh in the "InsertCmdRefreshKeyFieldList"
>
>Is using the AutoRefresh faster than code requesting the @@IDentity in the AfterInsert event?

The code below is ORACLE demo code I use to test these features. BTW, they work like a dream! Create you a presidents table with the structure like what I have in the CA below. Make the KeyID field an Identity field. You will also need to tweak the ADO connection string.
CLEAR
CLOSE DATABASES ALL
LOCAL oXC
oXC = CREATEOBJECT('xcADO')
llRetVal = oXC.GetSQLData()
IF llRetVal
    INSERT INTO crsPresidents (LoginID, LastName, FirstName) ;
        VALUES ('MMCCASLA', 'McCasland', 'Mark')
    llRetVal = oXC.SaveData()
    IF llRetVal
        BROWSE
    ELSE
        MESSAGEBOX('Save or RecordRefresh failed.')
    ENDIF
ELSE
    MESSAGEBOX('CursorFill Failed')
ENDIF
oXC.RELEASE()
RETURN


DEFINE CLASS xcADO AS CURSORADAPTER

    ALIAS = [crsPresidents]
    USECURSORSCHEMA = .T.
    NODATA = .F.
    CURSORSCHEMA = [KeyID I,LoginID V(8),LastName V(30),FirstName V(30),Updated_By V(8),Last_Update T]
    BUFFERMODEOVERRIDE = 5
    DATASOURCETYPE = [ADO]
    ALLOWINSERT = .T.
    TABLES = [Presidents]
    KEYFIELDLIST = [KeyID]
    UPDATABLEFIELDLIST = [LoginID,LastName,FirstName,Updated_By]
    SELECTCMD = [SELECT * FROM Presidents WHERE KeyID > 39 ORDER BY KeyID]
    INSERTCMDREFRESHFIELDLIST = [KeyID, Last_Update]
    INSERTCMDREFRESHKEYFIELDLIST = [KeyID]
    INSERTCMDREFRESHCMD = [SELECT KeyID, Last_Update FROM Presidents]

    DIMENSION aErrorInfo(1)
    nErrors = 0
    lFilled = .F.
    lSaved  = .F.
    lRefreshed = .F.

    PROTECTED PROCEDURE INIT
        CLEAR
        THIS.MAPVARCHAR= .T.
        TEXT TO THIS.UPDATENAMELIST NOSHOW PRETEXT 10
            KeyID Presidents.KeyID,
            LoginID Presidents.LoginID,
            LastName Presidents.LastName,
            FirstName Presidents.FirstName,
            Last_Update Presidents.Last_Update,
            Updated_By Presidents.Updated_By
        ENDTEXT

        THIS.ADDPROPERTY('oConn', NEWOBJECT('ADODB.Connection'))
        THIS.ADDPROPERTY('oRS', NEWOBJECT('ADODB.Recordset'))
        THIS.ADDPROPERTY('oCommand', NEWOBJECT('ADODB.Command'))
        WITH THIS.oConn
            .CursorLocation = 3
            TEXT TO .ConnectionString TEXTMERGE NOSHOW PRETEXT 10
                Provider=OraOLEDB.Oracle.1;
                Password=mark;Persist Security Info=True;
                User ID=mark;Data Source=local
            ENDTEXT
            .OPEN()
        ENDWITH
        THIS.oCommand.ActiveConnection = THIS.oConn
        WITH THIS.oRS
            .ActiveConnection = THIS.oConn
            .CursorType       = 1  && adOpenKeyset
            .CursorLocation   = 3  && adUseClient
            .LockType         = 3  && adLockOptimistic
        ENDWITH
        THIS.DATASOURCE = THIS.oRS
        THIS.REFRESHCMDDATASOURCETYPE = [ADO]
        THIS.REFRESHCMDDATASOURCE     = THIS.oCommand
    ENDPROC
    PROTECTED PROCEDURE DESTROY
        THIS.oRS = .NULL.
        THIS.oConn = .NULL.
        THIS.oCommand = .NULL.
    ENDPROC
    PROCEDURE RELEASE
        RELEASE THIS
    ENDPROC
    PROCEDURE GetSQLData
        THIS.ResetError()
        THIS.lFilled = THIS.CURSORFILL(THIS.USECURSORSCHEMA, THIS.NODATA, -1, THIS.oCommand)
        IF NOT THIS.lFilled
            THIS.nErrors = AERROR(THIS.aErrorInfo)
        ENDIF
        RETURN THIS.lFilled
    ENDPROC
    PROCEDURE SaveData
        THIS.ResetError()
        THIS.lSaved = .T.
        CLEAR ERROR
        SELECT crsPresidents
        THIS.lSaved = TABLEUPDATE(1, .F., 'crsPresidents')
        SET STEP ON 
        IF NOT THIS.lSaved
            THIS.nErrors = AERROR(THIS.aErrorInfo)
            THIS.ShowErrorInfo()
            DEBUG
        ELSE
            BROWSE
            ?"Saved!!!"
            nRecNo=RECNO()
            LIST
            GO (nRecNo)
            THIS.oConn.Execute("UPDATE Presidents SET Last_Update=SYSDATE,Updated_By ='ALEKSEYT'")
            CLEAR ERROR
            THIS.lRefreshed = (THIS.RECORDREFRESH(1) > 0)
            IF !THIS.lRefreshed &&< 0
                SET STEP ON
                THIS.nErrors = AERROR(THIS.aErrorInfo)
            ELSE
                ?"Refreshed!!!"
                LIST
            ENDIF
        ENDIF
        RETURN THIS.lSaved AND THIS.lRefreshed
    ENDPROC
    PROTECTED PROCEDURE ResetError
        CLEAR ERROR
        THIS.nErrors = 0
        THIS.aErrorInfo = []
    ENDPROC
    PROCEDURE ShowErrorInfo
        LOCAL lnI
        FOR lnI = 1 TO ALEN(THIS.aErrorInfo)
            ? THIS.aErrorInfo(lnI)
            IF MOD(lnI, 7) = 0
                ?
            ENDIF
        ENDFOR
    ENDPROC
ENDDEFINE
Mark McCasland
Midlothian, TX USA
Previous
Next
Reply
Map
View

Click here to load this message in the networking platform