Error al Convertir un adodb.recordset a Cursor de VFP mediante CursorAdapter

02/07/2005 - 07:58 por Manuel Calderón | Informe spam
Saludos

PRIMERO:
Necesito tener un ADOdb.recordset y moverme en sus registros,
y usar sus propiedades y metodos.
Luego utilizar este ADOdb.recordset y crear un cursor Nativo de Fox
para mostrarlo en un Grid.

El problema es que mi adodb.recordset tiene 325 registros y al converirlo
a cursor
me devuelve 425 registros.

Este es el codigo que da como resultado el problema anteriormente
mencionado:

oConeccion = CREATEOBJECT("adodb.connection")
oConeccion.Open("Provider=VFPOLEDB.1;Data Source=D:\Base\BaseDeDatos.dbc;
Password='';Collating Sequence=MACHINE")

oRecordset=CREATEOBJECT("adodb.recordset")
oRecordset.Open("SELECT campo1 FROM tabla1", oConeccion,1,3,1)


loCursorAdapter = CREATEOBJECT("CursorAdapter")
loCursorAdapter.Alias="curtabla1"
loCursorAdapter.DataSourceType="ADO"

** Convertimos el RecordSet a un cursor de VFP
lcError = loCursorAdapter.CursorFill(,,,oRecordset)

** Desincorporamos el cursor, de el objeto CursorAdapter
lcError = loCursorAdapter.CursorDetach()

browse


SEGUNDO:
Intente con un segundo codigo y la cantidad de registros recuperados
fue el correcto tanto en el ADOdb.recordset como en el cursor Generado,
pero lo malo es que no se puede utilizar algunas propiedades del
ADOdb.recordset
como el recordcount y el absolutePosition(salen con valores negativos).

Este es el codigo que si recupera la cantidad de registros correcto, pero
genera
el problema mencionado:

** Creamos y abrimos la conexión ADO
*!* lcConnString="Provider=VFPOLEDB.1;Data
Source=D:\Base\BaseDeDatos.dbc;;Password='';Collating Sequence=MACHINE"

*!* loConnection = CREATEOBJECT("ADODB.Connection")
*!* loConnection.Open(lcConnString)
*!*
*!*Ejecutamos la consulta
*!* lcQuery = "SELECT campo1 FROM tabla1"
*!* loRecordSet = loConnection.Execute(lcQuery)

*!* Creamos el objeto Cursor Adapter
*!* loCursorAdapter = CREATEOBJECT("CursorAdapter")
*!* Asignamos el nombre del cursor
*!* loCursorAdapter.Alias="curtabla1"
*!*Asignamos el tipo de datos que recibirá
*!* loCursorAdapter.DataSourceType="ADO"
*!*Convertimos el RecordSet a un cursor de VFP
*!* lcerror=loCursorAdapter.CursorFill(,,,loRecordSet)
*!* Desincorporamos el cursor, de el objeto CursorAdapter
*!* lcerror=loCursorAdapter.CursorDetach()
*!* browse

Parecen iguales, pero la diferencia esta en como se carga el contenido del
ADOdb.recordset
el primer codigo utiliza OPEN y el segundo codigo utiliza EXECUTE


Amigos, espero alguien pueda ayudarme con este problemita

Un coordial saludo

Espero sus respuestas



PortalFox :: Nada corre como un zorro
http://www.portalfox.com

PortalFox - NNTP Forum Gateway
 

Leer las respuestas

#1 Victor B.
04/07/2005 - 10:55 | Informe spam
Antes de recoger la información con el Recordset, establece sus propiedades
a:
CursorType = adOpenStatic && 3
CursorLocation = adUseClient && 3
La razón de que RecorCount y AbsolutePosition te devuelvan un resultado
negativo, está en que el Recordset está en lado del servidor.


Víctor Brasó
Desarrollador independiente

"Manuel Calderón" escribió en el mensaje
news:%
Saludos

PRIMERO:
Necesito tener un ADOdb.recordset y moverme en sus registros,
y usar sus propiedades y metodos.
Luego utilizar este ADOdb.recordset y crear un cursor Nativo de Fox
para mostrarlo en un Grid.

El problema es que mi adodb.recordset tiene 325 registros y al converirlo
a cursor
me devuelve 425 registros.

Este es el codigo que da como resultado el problema anteriormente
mencionado:

oConeccion = CREATEOBJECT("adodb.connection")
oConeccion.Open("Provider=VFPOLEDB.1;Data Source=D:\Base\BaseDeDatos.dbc;
Password='';Collating Sequence=MACHINE")

oRecordset=CREATEOBJECT("adodb.recordset")
oRecordset.Open("SELECT campo1 FROM tabla1", oConeccion,1,3,1)


loCursorAdapter = CREATEOBJECT("CursorAdapter")
loCursorAdapter.Alias="curtabla1"
loCursorAdapter.DataSourceType="ADO"

** Convertimos el RecordSet a un cursor de VFP
lcError = loCursorAdapter.CursorFill(,,,oRecordset)

** Desincorporamos el cursor, de el objeto CursorAdapter
lcError = loCursorAdapter.CursorDetach()

browse


SEGUNDO:
Intente con un segundo codigo y la cantidad de registros recuperados
fue el correcto tanto en el ADOdb.recordset como en el cursor Generado,
pero lo malo es que no se puede utilizar algunas propiedades del
ADOdb.recordset
como el recordcount y el absolutePosition(salen con valores negativos).

Este es el codigo que si recupera la cantidad de registros correcto, pero
genera
el problema mencionado:

** Creamos y abrimos la conexión ADO
*!* lcConnString="Provider=VFPOLEDB.1;Data
Source=D:\Base\BaseDeDatos.dbc;;Password='';Collating Sequence=MACHINE"

*!* loConnection = CREATEOBJECT("ADODB.Connection")
*!* loConnection.Open(lcConnString)
*!*
*!*Ejecutamos la consulta
*!* lcQuery = "SELECT campo1 FROM tabla1"
*!* loRecordSet = loConnection.Execute(lcQuery)

*!* Creamos el objeto Cursor Adapter
*!* loCursorAdapter = CREATEOBJECT("CursorAdapter")
*!* Asignamos el nombre del cursor
*!* loCursorAdapter.Alias="curtabla1"
*!*Asignamos el tipo de datos que recibirá
*!* loCursorAdapter.DataSourceType="ADO"
*!*Convertimos el RecordSet a un cursor de VFP
*!* lcerror=loCursorAdapter.CursorFill(,,,loRecordSet)
*!* Desincorporamos el cursor, de el objeto CursorAdapter
*!* lcerror=loCursorAdapter.CursorDetach()
*!* browse

Parecen iguales, pero la diferencia esta en como se carga el contenido del
ADOdb.recordset
el primer codigo utiliza OPEN y el segundo codigo utiliza EXECUTE


Amigos, espero alguien pueda ayudarme con este problemita

Un coordial saludo

Espero sus respuestas



PortalFox :: Nada corre como un zorro
http://www.portalfox.com

PortalFox - NNTP Forum Gateway

Preguntas similares