Page 1 of 1

ADO não funciona o RecordCount()?

PostPosted: Thu Jan 26, 2006 1:39 pm
by ronaldo
Ola pessoal, estou trabalhando com o ADO para o ACCESS porem alguns comandos conforme relação abaixo não funciona! sabem porque?

****************************************************
#Include "Fivewin.ch"
Function Main()
LOCAL oDados, txSql
PRIVATE oCn := CREATEOBJECT( "ADODB.Connection" )

oCn:Open( "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=venda.mdb" )
txSql := "SELECT * FROM imovweb; "
oDados := oCn:Execute( txSql)

oDados:MoveNext() -- Funciona
oDados:MoveFirst() -- NÃO Funciona
oDados:MoveLast() -- NÃO Funciona
oDados:RecordCount() -- NÃO Funciona
****************************************************

PostPosted: Tue Jan 31, 2006 4:52 pm
by jlcapel
Ronaldo,

¿Donde tienes el cursor? ¿¿Que valor tiene CursorLocation del objeto Connection??

Saludos,
José Luis Capel

PostPosted: Tue Jan 31, 2006 5:30 pm
by R.F.
No uses objetos CONNECTION para ejecutar el query, los objetos CONNECTION regresan un cursor forward que no puede recuperar los valores que necesitas.

Crea un objeto Connection, luego un objeto Command y eso te devolvera el RecordSet que necesitas.

PostPosted: Tue Jan 31, 2006 6:14 pm
by jlcapel
René,

No uses objetos CONNECTION para ejecutar el query, los objetos CONNECTION regresan un cursor forward que no puede recuperar los valores que necesitas.


No es exactamente como tu dices. El método execute del objeto Connection devuelve siempre un recordset del tipo y localización que has indicado en la creación del objeto Connection (y si no se indican, se utilizan los valores por defecto).

Crea un objeto Connection, luego un objeto Command y eso te devolvera el RecordSet que necesitas.


Tampoco es exactamente así. Si vas a trabajar con resultados de datos (filas y columnas) es preferible siempre utilizar el objeto Recordset y reservar el objeto Command para llamadas a procedimientos almacenados y otras funciones de servidor.

Saludos,
José Luis Capel

PostPosted: Wed Feb 01, 2006 12:19 pm
by jlcapel
Ronaldo,

Prueba este código a ver si te ayuda a clarificar por que no te funcionan los métodos que indicas:

Code: Select all  Expand view
#Include "Fivewin.ch"

#define adBookmark 0x2000
#define adMovePrevious 0x200


Function Main()
LOCAL oDados, txSql
PRIVATE oCn := CREATEOBJECT( "ADODB.Connection" )

oCn:Open( "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=venda.mdb" )
txSql := "SELECT * FROM imovweb; "
oDados := oCn:Execute( txSql)

MsgInfo( IIF(oDados:Supports(adBookmark),"Soporta RecordCount","No soporta RecordCount"))

MsgInfo( IIF(oDados:Supports(adMovePrevious),"Soporta MoveFirst, MovePrevious, etc","No soporta MoveFirst, MovePrevious, etc"))

....


No lo he probado... Espero que esto te ayude.
Saludos,
José Luis Capel

Re: ADO não funciona o RecordCount()?

PostPosted: Wed Mar 17, 2010 5:47 pm
by juan carlos bellucci
Hola : proba asi si usas Ado

oData1:RecordCount() Asi no funciona



If oData1:RecordCount > 0
? "Hay "
EndIf

Re: ADO não funciona o RecordCount()?

PostPosted: Wed Mar 17, 2010 10:20 pm
by ruben Dario
A mi me funciona Asi. COn Mysql


if oDatos:RecordCount() =0 //ADORecCount()
MsgInfo("No Hay Datos ","Informacion") Return (.t.)
endif
nLinea := 1 ; nHasta := oDatos:RecordCount()
oDatos:MoveFirst()

Re: ADO não funciona o RecordCount()?

PostPosted: Wed Mar 17, 2010 10:53 pm
by sjingo
Por qué no usas un recordset. Prueba así:


****************************************************
#Include "Fivewin.ch"
Function Main()
LOCAL txSql
PRIVATE oCn,oRs,oError

//Crea el objeto conexión
TRY
oCn := TOleAuto():new("adodb.connection")
CATCH oError
MsgStop( "No se pudo crear el objeto conexión !")
RETURN(.F.)
END

//Crea el objeto recordset que manejará la tabla
TRY
oRs := TOleAuto():New("adodb.recordset")
CATCH oError
MsgStop( "No se pudo crear el recordset)
RETURN .f.
END

//Abrimos la conexión
TRY
oCn:Open( "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=venda.mdb" )
CATCH oError
MsgStop( "No se pudo abrir la conexión !")
return .f.
END


//Configuramos el recordset que manejara la tabla
oRs:CursorLocation := adUseClient
oRs:LockType := adLockOptimistic
oRs:CursorType := adOpenKeyset//adOpenDynamic
oRs:Source := "SELECT * FROM imovweb; "
oRs:ActiveConnection(oCn)
//Ahora si cargamos los datos en el recordset
TRY
oRs:Open()
CATCH oError
MsgStop( "No se pudo cargar los datos de la Tabla imovweb")
RETURN .f.
END

//asegurarse que la tabla no esté vacía para usar
//los métodos que pones de ejemplo
if ! oRs:BOF() .AND. ! oRs:EOF()
oRs:MoveNext() //-- Funciona
oRs:MoveFirst() //-- NÃO Funciona
oRs:MoveLast() //-- NÃO Funciona
oRs:RecordCount()// -- NÃO Funciona
endif

ors:Close()
oCn:Close()
****************************************************

Saludos

Marcelo Jingo

Re: ADO não funciona o RecordCount()?

PostPosted: Thu Mar 18, 2010 8:40 pm
by ronaldo
Então, creio que essas opções não funcionem, pois voc~e deve verificar a forma de abertura do RecordSet.

Ronaldo Minacapelli