Hola Armando, ya tengo MySQL instalado, he cargado algunas tablas grandes y estoy haciendo algunas pruebas. Tu blog es de gran utilidad. Las pruebas de velocidad van bien, en principio mejor que con letodb. He visto que las tablas ocupan más en espacio en disco que las DBF.
Tengo pensado hacer una clase similar a Tdatabase, para usar en los diálogos cuando se edita un registro, al menos con los métodos blank(), load(), save() y modified(). Como las tablas en MySQL las creo a partir de código, tengo una array en el código con el nombre de los campos, el tipo y la longitud, similar a la aStru de dbcreate. De tal forma puedo generar un buffer para los registros usando una clase similar a TPublic. ¿Hay algo ya hecho y me ahorro el trabajo?
Creo que con un par de clases sencillas y algunas funciones, se puede usar mysql sin depender de otras clases o librerías más complejas, y el esfuerzo de aprender sql siempre puede venir bien en el futuro.
Con los ejemplos de tu blog ya he creado algunas funciones para no tener que repetir tanto código, como por ejemplo las que copio a continuación. Lo mismo para crear tablas. También voy a modificar la clase txbrowse para añadir automáticamente estas líneas y algunos pequeños campos más: (dime si estoy repitiendo trabajo que ya está hecho).
- Code: Select all Expand view
oBrw:bGoTop := { || IF( ! oRsUni:BOF() .AND. ! oRsUni:EOF(), oRsUni:MoveFirst(), ) }
oBrw:bGoBottom := { || IF( ! oRsUni:BOF() .AND. ! oRsUni:EOF(), oRsUni:MoveLast(), ) }
oBrw:bBof := { || oRsUni:BOF() }
oBrw:bEof := { || oRsUni:EOF() }
oBrw:bBookMark:= { | uBm | IF( oRsUni:BOF() .AND. oRsUni:EOF() , 0, IF( uBm == NIL, oRsUni:BookMark, oRsUni:BookMark := uBm ) ) }
oBrw:bKeyNo := { | n | IF( oRsUni:BOF() .AND. oRsUni:EOF(), 0, IF( n == NIL, oRsUni:AbsolutePosition, oRsUni:AbsolutePosition := n ) ) }
oBrw:bKeyCount := { || oRsUni:RecordCount() }
- Code: Select all Expand view
// -----------------------------------------------------------------------------------------------//
function abre_rs(oCon,cSele,cTabla)
local oRs,oError
TRY
oRs := TOleAuto():New("adodb.recordset")
CATCH oError
MsgStop( "No se ha podido crear el RECORDSET de "+cTabla+" !")
ShowError(oError)
oRs := NIL
return nil
END
oRs:CursorLocation := adUseClient
oRs:LockType := adLockOptimistic
oRs:CursorType := adOpenDynamic
oRs:Source := "SELECT "+cSele
oRs:ActiveConnection(oCon)
TRY
oRs:Open()
CATCH oError
MsgStop( "No se ha podido abrir el RECORDSET de "+cTabla+" !")
ShowError(oError)
return nil
END
IF oRs:BOF() .AND. oRs:EOF()
ELSE
oRs:MoveFirst()
ENDIF
return oRs
// -----------------------------------------------------------------------------------------------//
function cierra_rs(oRs)
IF oRs <> NIL
IF oRs:State() = adStateOpen
oRs:Close()
ENDIF
ENDIF
return nil
Un saludo
Alvaro