Level Extreme platform
Subscription
Corporate profile
Products & Services
Support
Legal
Français
ADO RecordSets and CursorAdaptor
Message
 
 
To
All
General information
Forum:
Visual FoxPro
Category:
Other
Title:
ADO RecordSets and CursorAdaptor
Miscellaneous
Thread ID:
00721788
Message ID:
00721788
Views:
49
I am getting an error message trying to update a cursor created by the CursorAdaptor. The type of ADO. The error is #2083 - Cannot update ADODB.Recordset because it is read-only. The source table is in Oracle. The pertinent table structure is KEYID NUMBER(4), LASTNAME VARCHAR2(30). Is there some property in the ADO connection or recordset objects that avoids this error? The code to repro is below. TIA!
*!* ADO CursorAdapter
CLEAR ALL
RELEASE ALL
CLOSE ALL
oXC = CREATEOBJECT('xcADO')
oXC.GetOracleData()
IF oXC.lFilled
   BROWSE
   oXC.SaveData()
   IF oXC.lSaved
      MESSAGEBOX('Save worked.')
   ELSE
      MESSAGEBOX('Save failed.')
      clear
      ?
      ? oXC.aErrorInfo(1)
      ? oXC.aErrorInfo(2)
   ENDIF
ELSE
   MESSAGEBOX('CursorFill Failed')
   CLEAR
   LIST STRUCTURE
   ?
   ? oXC.aErrorInfo(1)
   ? oXC.aErrorInfo(2)
ENDIF
oXC.RELEASE()
RELEASE oXC
 
DEFINE CLASS xcADO AS CURSORADAPTER
 
   lUseCursorSchema = .f.
 
   ALIAS = 'crsUsers'
   CursorSchema = "keyid n(4),loginid c(8),lastname c(30)," ;
                + "firstname c(30),manager n(1),enforcement n(1)"
   BufferModeOverride = 5
   DATASOURCETYPE = "ADO"
   ALLOWUPDATE = .T.
   SELECTCMD = "select * from appusers"
   UPDATECMD = 'update appusers set lastname = ?TRIM(crsUsers.lastname)' ;
             + ' where keyid = ?crsUsers.keyid)'
   KEYFIELDLIST = 'KeyID'
   TABLES = 'AppUsers'
   UPDATABLEFIELDLIST = 'LastName'
   UPDATENAMELIST = 'KEYID AppUsers.KeyID, LASTNAME AppUsers.LastName'
   WHERETYPE = 1
 
   lFilled = .F.
   DIMENSION aErrorInfo(1)
   nError = 0
   lSaved = .F.
 
   PROTECTED PROCEDURE INIT
      CLEAR
      THIS.ADDPROPERTY('oConn', NEWOBJECT("ADODB.Connection"))
      THIS.ADDPROPERTY('oRS', NEWOBJECT("ADODB.Recordset"))
      THIS.oConn.ConnectionString = ;
         "Driver=Microsoft ODBC for Oracle;UID=myuid;PWD=mypwd;Server=local;"
      THIS.oConn.OPEN()
      THIS.oRS.ActiveConnection = THIS.oConn
      THIS.DATASOURCE = THIS.oRS
   ENDPROC
   PROCEDURE GetOracleData
      THIS.ResetError()
      THIS.lFilled = THIS.CURSORFILL(THIS.lUseCursorSchema)
      IF NOT THIS.lFilled
         THIS.nError = AERROR(THIS.aErrorInfo)
      ENDIF
   ENDPROC
   PROCEDURE SaveData
      THIS.ResetError()
      THIS.lSaved = TABLEUPDATE(1, .t., 'crsUsers')
      IF NOT THIS.lSaved
         THIS.nError = AERROR(THIS.aErrorInfo)
      ENDIF
   ENDPROC
   PROTECTED PROCEDURE ResetError
      THIS.nError = 0
      THIS.aErrorInfo = []
   ENDPROC
   PROTECTED PROCEDURE Destroy
      THIS.oRS = .null.
      THIS.oConn = .null.
   ENDPROC
   PROCEDURE RELEASE
      RELEASE THIS
   ENDPROC
ENDDEFINE
Mark McCasland
Midlothian, TX USA
Next
Reply
Map
View

Click here to load this message in the networking platform