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
****************************************************
ADO não funciona o RecordCount()?
René,
Saludos,
José Luis Capel
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).No uses objetos CONNECTION para ejecutar el query, los objetos CONNECTION regresan un cursor forward que no puede recuperar los valores 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.Crea un objeto Connection, luego un objeto Command y eso te devolvera el RecordSet que necesitas.
Saludos,
José Luis Capel
Ronaldo,
Prueba este código a ver si te ayuda a clarificar por que no te funcionan los métodos que indicas:
No lo he probado... Espero que esto te ayude.
Saludos,
José Luis Capel
Prueba este código a ver si te ayuda a clarificar por que no te funcionan los métodos que indicas:
Code: Select all
#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"))
....
Saludos,
José Luis Capel
-
- Posts: 115
- Joined: Sat Mar 07, 2009 9:36 pm
- Location: Argentina
- Contact:
Re: ADO não funciona o RecordCount()?
Hola : proba asi si usas Ado
oData1:RecordCount() Asi no funciona
If oData1:RecordCount > 0
? "Hay "
EndIf
oData1:RecordCount() Asi no funciona
If oData1:RecordCount > 0
? "Hay "
EndIf
- ruben Dario
- Posts: 986
- Joined: Thu Sep 27, 2007 3:47 pm
- Location: Colombia
Re: ADO não funciona o RecordCount()?
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()
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()?
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
****************************************************
#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
Re: ADO não funciona o RecordCount()?
Então, creio que essas opções não funcionem, pois voc~e deve verificar a forma de abertura do RecordSet.
Ronaldo Minacapelli
Ronaldo Minacapelli