martes, 24 de marzo de 2009

TMySql y la creación de Contenedores y Tablas

Quiubo espero estemos bien,

He notado que muchos compañeros que se han animado a probar esta fabulosa clase han tenido el problema o por lo menos la duda de como crear tablas y base de datos.

Muchos prefieren el modo xBase otros prefieren la manera SQL directa.

Veremos la manera xBase primero, Veremos como iniciar la conexión de igual manera..

#include "fivewin.ch"

STATIC oCon

FUNCTION main()
MSGRun( "Conectando a server-sql, espere...", "INCOS - wmormar", ;
{|| oCon := TMYsqlServer():new( "localhost", "root", "123", 3306)} )
IF oCon:lError
? "Se ha generado un error, no hay conexión, verifique..."
RETURN NIL
ENDIF

IF oCon:DBExist( "tutor" )
MSGRun( "Creando contenedor, espere...",, {|| oCon:DBCreate( "tutor")} )
ENDIF

oCon:SelectDB( "tutor" )
IF oCon:lError
? "No se pudo seleccionar el contenedor..."
RETURN NIL
ENDIF

// Aquí llamaremos a la creación de la tabla tipo xbase
createxbase()

// Aquí llamaremos a la creación de la tabla SQL directa
createsqldirecta()

oCon:end()

RETURN NIL

STATIC FUNCION createxbase()
LOCAL aTabla := {}

aadd( aTabla, { "clave" , "C", 10, 0} )
aadd( aTabla, { "nombre" , "C", 40, 0} )
aadd( aTabla, { "otro" , "N", 5, 0} )
aadd( aTabla, { "otromas" , "N", 6, 2} )

// Sintaxis de :createtable()
// CreateTable( cTable, aStruct, cPrimaryKey, cUniqueKey, cAuto)
IF !oCon:createtable( "modoxbase", aTabla, "clave" )
? "No pudo crear la tabla, verifique..."
ENDIF

RETURN NIL

STATIC FUNCION createsqldirecta()
LOCAL cQuery

cQuery := [CREATE IF EXISTS modosql( ]
cQuery += [clave varchar(10) DEFAULT "wmormar", ]
cQuery += [nombre varchar(40) DEFAULT "william morales", ]
cQuery += [otro int(5) DEFAULT 0, ]
cQuery += [otromas decimal(6,2) DEFAULT 0.00, ]
cQuery += [PRIMARY KEY ("clave") ]
oCon:Query( cQuery )

IF oCon:lError
? "No se pudo crear la tabla, verifique..."
ENDIF

RETURN NIL

Bueno, pasamos a explicarlo.

En la primera función (la principal) hacemos la respectiva conexión al serveidor mysql, el cual está alojado en la misma maquina donde estamos codificando (localhost).

Ahí lo que hacemos, es tener una variable Estática oCon, la cual será visible en todo el PRG, está contendrá la conexión al servidor.

Con la data lError (oCon:lError), verificamos que se esté aceptando nuestras operaciones en el servidor, es decir, que lo que estemos haciendo sean correctas.

También verificamos que el Contenedor (base de datos) exista, eso lo hacemos con: oCon:DBExist( "tutor" )

Si el contenedor no existe, pues lo creamos, esto lo hacemos con: oCon:DBCreate( "tutor" )

Después lo colocamos en uso o activo. Debemos recordar siempre que es necesario, de hecho es una regla, que para hacer cualquier tipo de consulta, debemos de colocar en uso o activo un Contenedor. Es una regla de oro.

Ya teniendo todo esto colocado, podremos hacer lo que queramos en el servidor. Por ejemplo: INSERT, UPDATE, DELETE, ETC.

Recordemos cerrar la conexión del server antes de cerrar nuestra aplicación: oCon:end()

Bueno, pasamos a la función que crea la tabla en "modoxbase". Creamos una variable tipo Array de igual manera que lo hacemos para crear una DBF. La llenamos con la estructura a crear.

Ya llenada la estructura usamos el método: CreateTable( cTable, aStruct, cPrimaryKey, cUniqueKey, cAuto) de la siguiente manera:
oCon:createtable( "modoxbase", aTabla, "clave" )

En este caso la tabla se llamará "modoxbase", conteniendo la estructura colocada en el Array e indicando que tendrá una Primary Key "clave". Si se dan cuenta es el mismo nombre que nuestra primera columna (antes le llamamos campo). Después vodificamos para que nos indique si se creó o no.

Bueno, en nuestra ultima funcion de esta entrada, estamos viendo como podemos de igual manera crear una tabla, desde sentencias SQL directas. Y vamos con lo que sigue.

En una variable local hemos incluido el código totalmente SQL, éste indica como se llamará nuestra tabla, y la misma sentencia tambien verifica si la tabla existe o no, asi que el SERVER mysql se encarga de verificar la existencia de la tabla y actua según la condición expresada, así mismo también verificamos que la sentencia se haya ejecutada con un condicional.

Espero sea de ayuda esta breve explicación, nos leemos en la próxima.

Saludos

No hay comentarios:

Publicar un comentario