Plateforme Level Extreme
Abonnement
Profil corporatif
Produits & Services
Support
Légal
English
ADO RecordSets and CursorAdaptor
Message
 
 
À
Tous
Information générale
Forum:
Visual FoxPro
Catégorie:
Autre
Titre:
ADO RecordSets and CursorAdaptor
Divers
Thread ID:
00721788
Message ID:
00721788
Vues:
50
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
Suivant
Répondre
Fil
Voir

Click here to load this message in the networking platform