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

Preguntas similare

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
Respuesta Responder a este mensaje
#2 Hubert Casimiro Taco
05/07/2005 - 00:46 | Informe spam
HOLA MANOLO.
En esta direccion encontraras un componente (VFPCOM) que ya hace lo que
quieres incluso hace lo inverso y mas cosas y es de simple utilizacion, solo
registrate. Yo lo uso bastante.
http://www.davphantom.net/descarga.asp?id‚7&op=1
Atentamente Hubert.

"Manuel Calderón" escribió:

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

Respuesta Responder a este mensaje
#3 Esparta Palma
05/07/2005 - 02:32 | Informe spam
Esa utileria no es de DavPhantom, es de Microsoft y puede descargarse
sin registrarse en ningun lado:

http://msdn.microsoft.com/vfoxpro/d...fault.aspx

¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º

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

Hubert Casimiro Taco wrote:
HOLA MANOLO.
En esta direccion encontraras un componente (VFPCOM) que ya hace lo que
quieres incluso hace lo inverso y mas cosas y es de simple utilizacion, solo
registrate. Yo lo uso bastante.
http://www.davphantom.net/descarga.asp?id‚7&op=1
Atentamente Hubert.

"Manuel Calderón" escribió:


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

Respuesta Responder a este mensaje
#4 Manuel Calderón
05/07/2005 - 06:16 | Informe spam
Ok

Muchas Gracias, todo salio Bien
ahora el problema es que cuando modifico un campo de un registro
del cursor y quiero saltar al siguiente registro, me sale este error:

***-***
No se puede actualizar ADODB.recordset, hasta que el cusor
creado con el metodo cursorAdapter.cursorfill, no se asocie
a un objeto cusros adapter.
***-***

Yo deseo que este cursor creado, se le pueda modificar su contenido
como cualquier cursor nativo de Fox, sin que dependa de algun
otro objeto.

Como podria hacerlo?

Bueno espero sus respuestas

Muchas Gracias.



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

PortalFox - NNTP Forum Gateway
Respuesta Responder a este mensaje
#5 Manuel Calderón
05/07/2005 - 06:26 | Informe spam
Saludos Esparta

Como te daras cuenta, me guie de un codigo que tienes publicado en el
portal
para transformar el recordset a cursor nativo de fox,
pero tengo un problema, que no puedo actualizar el cursor creado, me dice
que tendo que asociar el recordset al cursoradapter, y yo no quiero que
este cursor
dependa de otro objeto, deseo que sea libre, como cualquier cursor nativo
de Fox.

Espero me puedas ayudar.

Muchas Gracias



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

PortalFox - NNTP Forum Gateway
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida