Error 1435

12/05/2005 - 01:18 por Gonzalo E. Marín | Informe spam
Estimados Foxeros.
Utilizando CursorAdapters, vía ADO, hago una consulta que, sin parametrizar,
deería traer un conjunto de mas de 1000 registros. Se que parametrizandola
solucionaría el error ya que lo he probado y funciona. El asunto es que
deseo traer TODOS los registros de una tabla y me tira el siguiente error.
"Microsoft Cursor Engine : La operación en varios pasos generó errores.
Compruebe los valores de estado." (1435)

Estoy casi seguro que se trata de "buffer" que utiliza el ADO ya que hasta
1128 registros trae. Cuando le solicito 1129 registros (o todos) me tira el
error comentado.
¿ Hay forma de "ampliar" la capicidad para que me traiga todos los registros
?
¿ Se puede definir un tamaño del "buffer" para optimizar esto ?

Si es una burrada lo que pregunto, pido disculpas.

Desde ya muchas gracias y agradeceré cualquier idea, sugerencia, comentario
que me ayude con ésto.

Gonzalo.
Posadas - Misiones - Argentina.

Preguntas similare

Leer las respuestas

#1 Esparta Palma
12/05/2005 - 18:38 | Informe spam
Tienes algun código para reproducir el eventos?

ž,ø€º°`°º€ø,žž,ø€º°`°º€ø,žž,ø€º°`°º€ø,žž,ø€º°`°º

Espartaco Palma Martínez
SysOp http://www.PortalFox.com
México D.F.
MoBlogs!
http://weblogs.golemproject.com/esparta/
http://www.espartha.com/blog/

Gonzalo E. Marín wrote:
Estimados Foxeros.
Utilizando CursorAdapters, vía ADO, hago una consulta que, sin parametrizar,
deería traer un conjunto de mas de 1000 registros. Se que parametrizandola
solucionaría el error ya que lo he probado y funciona. El asunto es que
deseo traer TODOS los registros de una tabla y me tira el siguiente error.
"Microsoft Cursor Engine : La operación en varios pasos generó errores.
Compruebe los valores de estado." (1435)

Estoy casi seguro que se trata de "buffer" que utiliza el ADO ya que hasta
1128 registros trae. Cuando le solicito 1129 registros (o todos) me tira el
error comentado.
¿ Hay forma de "ampliar" la capicidad para que me traiga todos los registros
?
¿ Se puede definir un tamaño del "buffer" para optimizar esto ?

Si es una burrada lo que pregunto, pido disculpas.

Desde ya muchas gracias y agradeceré cualquier idea, sugerencia, comentario
que me ayude con ésto.

Gonzalo.
Posadas - Misiones - Argentina.


Respuesta Responder a este mensaje
#2 Gonzalo E. Marín
12/05/2005 - 18:53 | Informe spam
En realidad es una sentencia simple.

cSql = "Select Medicos.* From Medicos"

Esa instrucción es la que paso como parámetro a mi clase de CA que se
detalla mas abajo. El asounto es que cuando pido todos los datos, sin ningún
tipo de filtro cosa de que me traiga un conjunto reducido de datos, me da el
error mencionado.
La tabla originaria tiene 2050 registros y al cargar mas de 1128 registros
da el error. Desde ya comento que es una clase que no recuerdo quién la ha
creado sobre la cual he estado trabajando y la estoy utilizando.

La estructura de la tabla sobre la que realiza la consulta es (sacado del
archivo que general el GenDBC):

CREATE TABLE 'MEDICOS.DBF' NAME 'MEDICOS' (NOMBRE C(45) NOT NULL, ;
CUIT C(13) NOT NULL, ;
FECING D NOT NULL, ;
TIPDOC C(3) NOT NULL DEFAULT "DNI", ;
NRODOC I NOT NULL, ;
EDADING N(2, 0) NOT NULL, ;
LUGARNAC C(45) NOT NULL, ;
SEXO C(1) NOT NULL DEFAULT "M", ;
FECNAC D NOT NULL, ;
FECFAL D NOT NULL, ;
CODNAC N(3, 0) NOT NULL DEFAULT 12, ;
DOMICILIO C(80) NOT NULL, ;
DOMCOME C(80) NOT NULL DEFAULT ALLTRIM(domicilio), ;
CODLOCA N(3, 0) NOT NULL, ;
TELEFONO C(30) NOT NULL, ;
EMAIL C(29) NOT NULL, ;
TITULO C(25) NOT NULL, ;
UNIVERSIDAD N(3, 0) NOT NULL, ;
ESPECIALIDAD I NOT NULL, ;
FECHAEGRE D NOT NULL, ;
CATEGORIA C(2) NOT NULL, ;
MATRICULA C(15) NOT NULL, ;
SOCIONRO C(10) NOT NULL, ;
PERTENECEA C(15) NOT NULL DEFAULT "Círculo Médico", ;
OBRASOC I NOT NULL, ;
TIPOCTA N(1, 0) NOT NULL, ;
CTABAN C(10) NOT NULL, ;
AUTONOMO N(1, 0) NOT NULL, ;
RAZONSOCIA C(45) NOT NULL, ;
CONYNOMBRE C(45) NOT NULL, ;
CONYFECNAC D NOT NULL, ;
CONYTIPDOC C(3) NOT NULL, ;
CONYNRODOC I NOT NULL, ;
CONYSEXO C(1) NOT NULL, ;
NOMBRE1 C(25) NOT NULL, ;
NRODOC1 B(0) NOT NULL, ;
FECNAC1 D NOT NULL, ;
NOMBRE2 C(25) NOT NULL, ;
NRODOC2 B(0) NOT NULL, ;
FECNAC2 D NOT NULL, ;
NOMBRE3 C(25) NOT NULL, ;
NRODOC3 B(0) NOT NULL, ;
FECNAC3 D NOT NULL, ;
NOMBRE4 C(25) NOT NULL, ;
NRODOC4 B(0) NOT NULL, ;
FECNAC4 D NOT NULL, ;
NOMBRE5 C(25) NOT NULL, ;
NRODOC5 B(0) NOT NULL, ;
FECNAC5 D NOT NULL, ;
NOMBRE6 C(25) NOT NULL, ;
NRODOC6 B(0) NOT NULL, ;
FECNAC6 D NOT NULL, ;
ENTEPRI N(3, 0) NOT NULL, ;
ENTESEC N(3, 0) NOT NULL, ;
JUBILADOENACT N(1, 0) NOT NULL, ;
FECJA D NOT NULL, ;
RESOLJA I NOT NULL, ;
TOTITEM1 B(2) NOT NULL, ;
TOTITEM2 B(2) NOT NULL, ;
TOTITEM3 B(2) NOT NULL, ;
TOTITEM4 B(2) NOT NULL, ;
APORTEVOL B(2) NOT NULL, ;
ACTIVO N(1, 0) NOT NULL, ;
INACTIVO N(1, 0) NOT NULL, ;
RESOLINAC I NOT NULL, ;
DADODEBAJA N(1, 0) NOT NULL, ;
FECBAJA D NOT NULL, ;
RESOLBAJA I NOT NULL, ;
FECULTPAGO D NOT NULL, ;
COMMENTS M NOT NULL, ;
PROFESION N(1, 0) NOT NULL DEFAULT 1, ;
INGRESOVOL N(1, 0) NOT NULL, ;
PAGA50PORC N(1, 0) NOT NULL, ;
FECPAGA50 D NOT NULL, ;
USUARIO C(20) NOT NULL, ;
CONTRASENIA C(20) NOT NULL, ;
PREGUNTA C(80) NOT NULL, ;
RESPUESTA C(50) NOT NULL, ;
FECHAID D NOT NULL, ;
INTERHAB N(1, 0) NOT NULL, ;
CONOS N(1, 0) NOT NULL, ;
OSCAJA N(3, 0) NOT NULL, ;
SINOS N(1, 0) NOT NULL)

***** Create each index for MEDICOS *****
INDEX ON NOMBRE TAG NOMBRE COLLATE 'MACHINE'
ALTER TABLE 'MEDICOS' ADD PRIMARY KEY CUIT TAG CUIT COLLATE 'MACHINE'
INDEX ON NRODOC TAG NRODOC COLLATE 'MACHINE'
INDEX ON VAL(MATRICULA) TAG MATRICULA COLLATE 'MACHINE'
INDEX ON CATEGORIA TAG CATEGORIA COLLATE 'MACHINE'
INDEX ON DELETED() TAG BORRADOS COLLATE 'MACHINE'
INDEX ON ACTIVO TAG ACTIVO COLLATE 'MACHINE'
INDEX ON FECHAEGRE TAG FECHAEGRE COLLATE 'MACHINE'
INDEX ON ESPECIALIDAD TAG ESPECIALID COLLATE 'MACHINE'
INDEX ON ENTESEC TAG ENTESEC COLLATE 'MACHINE'
INDEX ON ENTEPRI TAG ENTEPRI COLLATE 'MACHINE'
INDEX ON OBRASOC TAG OBRASOC COLLATE 'MACHINE'
INDEX ON CODNAC TAG CODNAC COLLATE 'MACHINE'
INDEX ON TIPDOC TAG TIPDOC COLLATE 'MACHINE'
INDEX ON CODLOCA TAG CODLOCA COLLATE 'MACHINE'
INDEX ON UNIVERSIDAD TAG UNIVERSIDA COLLATE 'MACHINE'
INDEX ON RESOLBAJA TAG RESOLBAJA COLLATE 'MACHINE'
INDEX ON RESOLINAC TAG RESOLINAC COLLATE 'MACHINE'
INDEX ON RESOLJA TAG RESOLJA COLLATE 'MACHINE'
INDEX ON OSCAJA TAG OSCAJA COLLATE 'MACHINE'






































#INCLUDE \Utils\Vfp\Include\Sistema.H
*!
*! (c) SysInFo S.I. Corporation.
*! oXC = CreateObject('xcADO', ,"Medicos", "Cuit", False ,cSQL,
"crsMedicos", True, "LOPE")
*!
#Define _Native "Native"
#Define _Ado "ADO"
#Define fldAdo "ADOBOOKMARK"

Define Class xcADO As CursorAdapter

*!* Change lUseCursorSchema to .T. to create a cursor according to the
CursorSchema property
lSaved = .F.
lFilled = .F.
nBufferMode = .F.
cFilterValue = ''
cFilterValue2 = ''
lUseCursorSchema = .F.

*!* Set the following property to .F. if you want the adapter to use
your own SQL found
*!* in the InsertCmd, UpdateCmd and DeleteCmd properties. See Assign
method below.
*!* Set it to .T. if you want VFP to auto-generate the SQL commands.
lAutoGenerateSQL = .F.

Dimension aErrorInfo(1)
nError = 0

Protected Procedure Init
Lparameters _cNameConecc AS String, _cNameTableDBF AS String,
_cKeyFieldList AS String,;
_lSendUpdates AS Logical, _cSqlString AS String, _cCursorName AS
String, _GetSQLData AS Logical,;
_FilterValue AS String, _nMaxRecords As Number, _FilterValue2 AS
String, _lCursorDetach As Logical

Local llChangeMaxRecords

If _GetSQLData = False
_nMaxRecords = 0
Store True TO _GetSQLData, llChangeMaxRecords
EndIf

If VarType(_nMaxRecords) = T_LOGICAL
_nMaxRecords = -1
EndIf

If VarType(_cKeyFieldList) = T_LOGICAL && Campos Claves, por
los cuales se Grava si encuentra.
_cKeyFieldList = C_Space0
Else
_cKeyFieldList = Lower(_cKeyFieldList)
EndIf

If VarType(_cNameTableDBF) = T_CHARACTER
_cNameTableDBF = Upper(_cNameTableDBF)
EndIf

If VarType(_cCursorName) = T_LOGICAL
_cCursorName = _cNameTableDBF
Else
_cCursorName = Upper(_cCursorName)
EndIf

If VarType(_cSqlString) = T_CHARACTER
cSqlString = _cSqlString
Else
cSqlString = "Select " + _cNameTableDBF + ".* FROM " + _cNameTableDBF
EndIf

With This
Local nBufferMode, cDataSourceType
Store _cCursorName TO .Name, .Alias
Store _lSendUpdates TO .AllowUpdate, .AllowDelete, .AllowInsert

.Tables = Iif(_lSendUpdates = False,
C_Space0,_cNameTableDBF)
.SelectCmd = cSqlString
.SendUpdates = _lSendUpdates
.FetchMemo = True
.KeyFieldList = Iif(_lSendUpdates = False, C_Space0,
_cKeyFieldList)
.BufferModeOverride = Iif(_lSendUpdates = False, 3, 5)

*!* Store _Ado TO .DataSourceType, cDataSourceType
Store _Native TO .DataSourceType, cDataSourceType

.MaxRecords = _nMaxRecords
.FetchSize = Iif(_nMaxRecords = 0, 1, -1)

.nBufferMode = Iif(_lSendUpdates = False, adLockReadOnly,
adLockOptimistic)

If cDataSourceType = _Ado
Local oConn as ADODB.Connection

If Type("oApp") = T_OBJECT
If Type("oApp.xADO") = T_OBJECT
oConn = oApp.xADO
EndIf
EndIf

If Type("oConn") = T_LOGICAL
If Type("_cNameConecc") = T_LOGICAL
If Type("_cNameConecc") # T_CHARACTER
If Type("oApp") = T_OBJECT
_cNameConecc = oApp.cConexDB
Else
_cNameConecc = [Provider=VFPOLEDB.1;Data
Source=C:\CaProMe.Win\Data\BaseDatos.dbc;Mode=ReadWrite|Share Deny
None;Password="";Collating Sequence=MACHINE]
*!* _cNameConecc = [Provider=SQLOLEDB.1;Integrated
Security=SSPI;Trusted_Connection=Yes;APP=Microsoft Visual
FoxPro;WSID=HORUS3;Initial Catalog=BaseDatos;Data Source=Horus3\SqlExpress;]
** ([Provider=SQLOLEDB.1;Persist Security Info=False;User
ID=sa;Initial Catalog=pubs;Data Source=MYSERVER])
EndIf
Else
_cNameConecc = _cNameConecc
EndIf
EndIf

.AddProperty('oConn', NewObject('ADODB.Connection'))

With .oConn
.CursorLocation = adUseClient && adUseServer
.ConnectionString = _cNameConecc
.Open()
EndWith
Else
.AddProperty('oConn', oConn)
EndIf

.AddProperty('oRS', NewObject('ADODB.Recordset'))
.AddProperty('oCommand', NewObject('ADODB.Command'))

.oCommand.ActiveConnection = .oConn

With .oRS
.ActiveConnection = This.oConn
.CursorType = Iif(_lSendUpdates =
False,adOpenStatic,adOpenDynamic) && adOpenKeySet
.CursorLocation = adUseClient && adUseServer
.LockType = Iif(_lSendUpdates = False,
adLockBatchOptimistic, adLockReadOnly)
EndWith

.DataSource = .oRS
Else
If cDataSourceType = _Native
SET MULTILOCKS ON
EndIf
EndIf

If _lSendUpdates
Store cDataSourceType TO .UpdateCmdDataSourceType,
.DeleteCmdDataSourceType, .InsertCmdDataSourceType
If cDataSourceType = _Ado
Store .oCommand TO .UpdateCmdDataSource, .DeleteCmdDataSource,
.InsertCmdDataSource
EndIf
EndIf

If _GetSQLData
If Type("_FilterValue") # T_LOGICAL
.cFilterValue = _FilterValue
EndIf
If Type("_FilterValue2") # T_LOGICAL
.cFilterValue2 = _FilterValue2
EndIf

.GetSQLData(llChangeMaxRecords)
.lAutoGenerateSQL = False

If _lCursorDetach
.CursorDetach()
EndIf
EndIf
EndWith
EndProc

Procedure GetSQLData
Lparameters llChangeMaxRecords, _lCursorDetach
Local cSetCollate
cSetCollate = Set("Collate")
Set Collate To "SPANISH"

With This
This.ResetError()

Private _Filter
_Filter = .cFilterValue
_Filter2 = .cFilterValue2

.lFilled = .CursorFill(.lUseCursorSchema,
llChangeMaxRecords, -1, Iif(Type(".oCommand") = T_OBJECT, .oCommand, False))

If .lFilled = False
.nError = Aerror(.aErrorInfo)
Else
If llChangeMaxRecords
.MaxRecords = -1
EndIf
EndIf
EndWith
Set Collate TO (cSetCollate)
EndProc

Procedure RevertData
With This
.ResetError()
nSavedRecnos = TableRevert((.nBufferMode = adLockOptimistic),
.Alias)
If nSavedRecnos = 0
.lSaved = False
.nError = Aerror(.aErrorInfo)
EndIf
EndWith
EndProc

Procedure SaveData
With This
.ResetError()
.lSaved = TableUpdate(Iif((.nBufferMode =
adLockOptimistic),1,0), True, .Alias)
Go (Recno())
If .lSaved = False
.nError = Aerror(.aErrorInfo)
EndIf
EndWith
Return This.lSaved
EndProc

Procedure NewData
Private _Filter, _Filter2
With This
.ResetError()
_Filter = .cFilterValue
_Filter2 = .cFilterValue2
.lFilled = .CursorRefresh()
If .lFilled = False
.nError = Aerror(.aErrorInfo)
EndIf
EndWith
EndProc

Protected Procedure ResetError
With This
.nError = 0
.aErrorInfo = []
EndWith
EndProc

Protected Procedure Destroy
With This
If Type(".oRS") = T_OBJECT
Store .Null. TO .oRS, .oConn, .oCommand
EndIf
EndWith
EndProc

Procedure Release
*!* If This.AllowUpdate
*!* This.SaveData()
*!* EndIf
Release This
EndProc

Hidden Function GetListFields
Lparameters DBFAlias

If Type("DBFAlias") = "L"
DBFAlias = Alias()
EndIf

Select (DBFAlias)

If Empty(Dbf())
Return ""
EndIf

#Define _Coma_ ","

Local MiCad
MiCad = ""

For NCamp = 1 To Fcount()
MiCad = MiCad + Proper(Field(NCamp)) + _Coma_
EndFor
Store Left(MiCad,Len(MiCad)-1) To MiCad

Return MiCad
EndFunc

Hidden Function GetFields
Lparameters NomBd

#Define _Space0 ""
#Define _Space1 " "
#Define _Punto "."
#Define _Coma ", "

If Empty(NomBd)
NomBd = Alias()
EndIf

If Empty(Dbf())
Return _Space0
Endif

Local MiCad, NCamp

MiCad = _Space0

For NCamp = 1 To Fcount()
MiCad = MiCad + Lower(Field(NCamp)) + _Space1 + Upper(NomBd) +
_Punto + Lower(Field(NCamp)) + _Coma
EndFor

Store Left(MiCad,Len(MiCad)-2) To MiCad

Return MiCad
EndFunc

Function GetUpdateCmd

#Define Coma_ ", "
#Define _Igaul_ " = ?"
#Define _Y " And "

Local MiCad, cAlias, cTabla, cKeyField, cField, nComas, nTotFlds

With This
cTabla = .Tables
cAlias = .Alias
cKeyField = .KeyFieldList
EndWith

MiCad = [UPDATE ] + cTabla + [ SET ]

nTotFlds = Fcount(cAlias)
For NCamp = 1 To nTotFlds
If Field(NCamp) = fldAdo
Loop
EndIf
cField = Lower(Field(NCamp))
MiCad = MiCad + cField + _Igaul_ + cAlias +[.]+ cField +
Iif(NCamp < nTotFlds, Coma_, C_Space0)
Next

MiCad = MiCad + [ WHERE ]
nComas = Occurs(c_Coma,cKeyField)+1

If nComas > 1
For NCamp = 1 TO nComas
nPos = At(c_Coma,cKeyField)
cField = Substr(cKeyField,1,Iif(nPos # 0, nPos-1,
Len(cKeyField)))
MiCad = MiCad + cField + _Igaul_ + cAlias +[.]+ cField

If NCamp < nComas
MiCad = MiCad + _Y
EndIf

cKeyField = Alltrim(Strtran(cKeyField - Substr(cKeyField,1,
At(c_Coma,cKeyField,1)), Substr(cKeyField,1,At(c_Coma,cKeyField,1))))
Next
Else
MiCad = MiCad + cKeyField + _Igaul_ + cAlias +[.]+ cKeyField
EndIf

*StrToFile(MiCad,cAlias+".txt")
Return MiCad
EndFunc

Function GetInsertCmd

#Define _Igaul " ?"
#Define _Y " And "

Local MiCad, cAlias, cTabla, cKeyField, cField, nComas, nTotFlds

With This
cTabla = .Tables
cAlias = .Alias
cKeyField = .KeyFieldList
EndWith

MiCad = [INSERT INTO ] + cTabla + [ (]

nTotFlds = Fcount(cAlias)
For NCamp = 1 To nTotFlds
If Field(NCamp) = fldAdo
Loop
EndIf
cField = Lower(Field(NCamp))
MiCad = MiCad + cField + Iif(NCamp < nTotFlds, c_Coma+C_Space1,
") Values (")
Next

For NCamp = 1 To nTotFlds
cField = Lower(Field(NCamp))
MiCad = MiCad + _Igaul + cAlias +[.]+ cField + Iif(NCamp <
nTotFlds, c_Coma+C_Space1, ") ")
Next

*! StrToFile(MiCad,cAlias+".txt")
Return MiCad
EndFunc

Protected Procedure lAutoGenerateSQL_Assign
Lparameters tlAuto

If Vartype(tlAuto) <> "L"
Return False
Endif

This.lAutoGenerateSQL = tlAuto

If tlAuto
With This
.UpdatableFieldList = .GetListFields()
.UpdateNameList = .GetFields()
Store [] TO .KeyFieldList, .UpdateCmd, .InsertCmd,
.DeleteCmd, .ConversionFunc
EndWith
Else
With This
If .lFilled
If .AllowUpdate Or .AllowDelete Or .AllowInsert
.UpdateCmd = .GetUpdateCmd()
.InsertCmd = .GetInsertCmd()
.DeleteCmd = [DELETE FROM ] + This.Tables +;
[ WHERE ] + This.KeyFieldList + [ = ?] +
This.Alias + [.] + This.KeyFieldList

Store [] TO .KeyFieldList, .Tables, .UpdatableFieldList,
.UpdateNameList, .ConversionFunc
EndIf
EndIf
EndWith
EndIf
EndProc
EndDefine
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida