porque el STR(oDatos:RecordCount()) Con Mysql

Post Reply
User avatar
ruben Dario
Posts: 986
Joined: Thu Sep 27, 2007 3:47 pm
Location: Colombia

porque el STR(oDatos:RecordCount()) Con Mysql

Post by ruben Dario »

Mi pregunta es la siguiente porque el commando ? STR(oDatos:RecordCount()) una vez hago la conexion con Mysql da negativo..

Algun colega del forums me podria facilitar un codigo para analizar completo utilizando conexion ADO con harbour utilizando el browser m modificar ,m adicionar regiastro etc.

Gracias , Abexo codigo


FUNCTION MAIN()
Local oCon, oSql,oDatos,aDatos

oCon:=TOLEAUTO():New("adodb.connection")


oCon:OPEN("DRIVER={MySQL ODBC 3.51 DRIVER};SERVER=192.168.10.1;DATABASE=basedatm;USER=root;PASSWORD=colomp")
oSql:ActiveConnection(oCon)
oSql:CommandText:="Select * from ktipmod"
oDatos:=oSql:Execute()
? STR(oDatos:RecordCount())

? STR(oDatos:Fields:Count())

aDatos := {}

oDatos:MoveFirst() // equivale a GO TOP en un DBF
do while .not. oDatos:EOF()
AADD(aDatos, {oDatos:Fields(0):value,;
oDatos:Fields(1):value,;
oDatos:Fields(2):value,;
oDatos:Fields(3):value})
oDatos:MoveNext() // equivale un SKIP en un DBF
enddo
RETURN NIL
User avatar
Biel EA6DD
Posts: 680
Joined: Tue Feb 14, 2006 9:48 am
Location: Mallorca
Contact:

Post by Biel EA6DD »

Supongo que devuelve -1 porque el curosor del recordset debe estar definido del lado del servidor.

Prueba el código que te propongo, deberia funcionarte bien. Yo no lo he probado con MySql, pero con otros motores va ok.

Code: Select all

#include "Ado.ch"
FUNCTION MAIN() 
Local oCon, oSql,oDatos,aDatos 

oCon:=TOLEAUTO():New("adodb.connection") 


oCon:OPEN("DRIVER={MySQL ODBC 3.51 DRIVER};SERVER=192.168.10.1;DATABASE=basedatm;USER=root;PASSWORD=colomp") 

oDatos:=tOleAuto():New("ADODB.RecordSet")
oDatos:CursorLocation   := adUseClient
oDatos:CursorType       := adOpenDynamic
oDatos:LockType         := adLockOptimistic
oDatos:ActiveConnection := oCon
oDatos:Source           := "Select * from kitpmod"
oDatos:Open()

? STR(oDatos:RecordCount()) 

? STR(oDatos:Fields:Count()) 

aDatos := {} 

oDatos:MoveFirst() // equivale a GO TOP en un DBF 
do while .not. oDatos:EOF() 
AADD(aDatos, {oDatos:Fields(0):value,; 
oDatos:Fields(1):value,; 
oDatos:Fields(2):value,; 
oDatos:Fields(3):value}) 
oDatos:MoveNext() // equivale un SKIP en un DBF 
enddo 
RETURN NIL
Saludos desde Mallorca
Biel Maimó
http://bielsys.blogspot.com/
User avatar
ruben Dario
Posts: 986
Joined: Thu Sep 27, 2007 3:47 pm
Location: Colombia

Post by ruben Dario »

Biel EA6DD wrote:Supongo que devuelve -1 porque el curosor del recordset debe estar definido del lado del servidor.

Prueba el código que te propongo, deberia funcionarte bien. Yo no lo he probado con MySql, pero con otros motores va ok.

Code: Select all

#include "Ado.ch"
FUNCTION MAIN() 
Local oCon, oSql,oDatos,aDatos 

oCon:=TOLEAUTO():New("adodb.connection") 


oCon:OPEN("DRIVER={MySQL ODBC 3.51 DRIVER};SERVER=192.168.10.1;DATABASE=basedatm;USER=root;PASSWORD=colomp") 

oDatos:=tOleAuto():New("ADODB.RecordSet")
oDatos:CursorLocation   := adUseClient
oDatos:CursorType       := adOpenDynamic
oDatos:LockType         := adLockOptimistic
oDatos:ActiveConnection := oCon
oDatos:Source           := "Select * from kitpmod"
oDatos:Open()

? STR(oDatos:RecordCount()) 

? STR(oDatos:Fields:Count()) 

aDatos := {} 

oDatos:MoveFirst() // equivale a GO TOP en un DBF 
do while .not. oDatos:EOF() 
AADD(aDatos, {oDatos:Fields(0):value,; 
oDatos:Fields(1):value,; 
oDatos:Fields(2):value,; 
oDatos:Fields(3):value}) 
oDatos:MoveNext() // equivale un SKIP en un DBF 
enddo 
RETURN NIL


Gracias HIze la prueba, pero al compilarlo me dice que hace falta el archivo "Ado.ch" como la puedo conseguir

Estoy compilando con xharbour build 99.7 y FHW 2.7

Cuando compilo con harbour Build 45 tengo entendido que no se puede sale el error Error: Unresolved external '_HB_FUN_TOLEAUTO' referenced from C:\TEMP\PRUEBASODBC\OBJ\PRUEBA11.OBJ
User avatar
Biel EA6DD
Posts: 680
Joined: Tue Feb 14, 2006 9:48 am
Location: Mallorca
Contact:

Post by Biel EA6DD »

Sustituye el include por estas lineas.

Code: Select all

#define adUseClient 3
#define adOpenDynamic 2
#define adLockOptimistic 3
El error '_HB_FUN_TOLEAUTO' , es porque no enlazas hbOle.lib, pero en tu primer ejemplo usabas tOleAuto, asi que supongo que tienes la libreria y solo te hace falta incluirla.
Saludos desde Mallorca
Biel Maimó
http://bielsys.blogspot.com/
User avatar
ruben Dario
Posts: 986
Joined: Thu Sep 27, 2007 3:47 pm
Location: Colombia

Post by ruben Dario »

Biel EA6DD wrote:Sustituye el include por estas lineas.

Code: Select all

#define adUseClient 3
#define adOpenDynamic 2
#define adLockOptimistic 3
El error '_HB_FUN_TOLEAUTO' , es porque no enlazas hbOle.lib, pero en tu primer ejemplo usabas tOleAuto, asi que supongo que tienes la libreria y solo te hace falta incluirla.
Gracias, perfecto me funciono.

Te pregunto ya con esta conexion puedo hacer consultas, adicionar, modificar, delete etc..
Veo que solo funciona con xharbour y Harbour no funciona me genera este error _HB_FUN_TOLEAUTO'
Actualmente tengo FWH 2.7 y Harbour build 45 y xHarbour 0.99.7
User avatar
Biel EA6DD
Posts: 680
Joined: Tue Feb 14, 2006 9:48 am
Location: Mallorca
Contact:

Post by Biel EA6DD »

Si, puedes hacer cualquier cosa con el RecordSet, Altas, bajas, modificaciones.

Para que te funcione en Harbour, tienes que linkar la libreria hbOle.lib, que es la que da soporte Ole a Harbour. En las ultimas versiones de harbour creo que ya viene incluido, pero en las antiguas no.
Saludos desde Mallorca
Biel Maimó
http://bielsys.blogspot.com/
User avatar
ruben Dario
Posts: 986
Joined: Thu Sep 27, 2007 3:47 pm
Location: Colombia

Post by ruben Dario »

Biel EA6DD wrote:Si, puedes hacer cualquier cosa con el RecordSet, Altas, bajas, modificaciones.

Para que te funcione en Harbour, tienes que linkar la libreria hbOle.lib, que es la que da soporte Ole a Harbour. En las ultimas versiones de harbour creo que ya viene incluido, pero en las antiguas no.
Gracias por tu ejemplo, me funciono bien.

Te pregunto con Mysql , se pueden manejar los indices asi como los archivos DBF se puede utilizar la funcion SEEK. No se si has utilizado el ADORDD
Post Reply