ADO não funciona o RecordCount()?

ADO não funciona o RecordCount()?

Postby ronaldo » Thu Jan 26, 2006 1:39 pm

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
****************************************************
User avatar
ronaldo
 
Posts: 139
Joined: Fri Nov 25, 2005 4:38 pm
Location: brasil

Postby jlcapel » Tue Jan 31, 2006 4:52 pm

Ronaldo,

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

Saludos,
José Luis Capel
User avatar
jlcapel
 
Posts: 229
Joined: Wed Oct 12, 2005 5:32 pm
Location: Valencia - España

Postby R.F. » Tue Jan 31, 2006 5:30 pm

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.
Saludos
R.F.
R.F.
 
Posts: 840
Joined: Thu Oct 13, 2005 7:05 pm

Postby jlcapel » Tue Jan 31, 2006 6:14 pm

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
User avatar
jlcapel
 
Posts: 229
Joined: Wed Oct 12, 2005 5:32 pm
Location: Valencia - España

Postby jlcapel » Wed Feb 01, 2006 12:19 pm

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
User avatar
jlcapel
 
Posts: 229
Joined: Wed Oct 12, 2005 5:32 pm
Location: Valencia - España

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

Postby juan carlos bellucci » Wed Mar 17, 2010 5:47 pm

Hola : proba asi si usas Ado

oData1:RecordCount() Asi no funciona



If oData1:RecordCount > 0
? "Hay "
EndIf
juan carlos bellucci
 
Posts: 115
Joined: Sat Mar 07, 2009 9:36 pm
Location: Argentina

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

Postby ruben Dario » Wed Mar 17, 2010 10:20 pm

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()
Ruben Dario Gonzalez
Cali-Colombia
rubendariogd@hotmail.com - rubendariogd@gmail.com
User avatar
ruben Dario
 
Posts: 1064
Joined: Thu Sep 27, 2007 3:47 pm
Location: Colombia

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

Postby sjingo » Wed Mar 17, 2010 10:53 pm

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
Marcelo Jingo
User avatar
sjingo
 
Posts: 229
Joined: Sat Mar 18, 2006 3:42 pm
Location: Ibarra-Ecuador

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

Postby ronaldo » Thu Mar 18, 2010 8:40 pm

Então, creio que essas opções não funcionem, pois voc~e deve verificar a forma de abertura do RecordSet.

Ronaldo Minacapelli
[b]Ronaldo Minacapelli[/b]
Sistemas, Hospedagem e Criação de WebSites
http://www.bazevani.com.br
User avatar
ronaldo
 
Posts: 139
Joined: Fri Nov 25, 2005 4:38 pm
Location: brasil


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 139 guests