Page 1 of 1

Amigos expertos en MySql + xHarbour

PostPosted: Thu Jun 04, 2009 6:59 am
by FranciscoA
Amigos del foro:
Estoy tratando de empezar a usar MySql+xHarbour, y estoy confundido con el codigo que describo abajo (el que está en negrilla). Tengo dos dias sin lograr que funcione. ¿Este codigo puede trabajar solamente con MySql+xHarbor, o estoy omitiendo algún otro componente?
Estoy utilizando las librerias MySql .lib y LibMySql.lib que las cree sin problemas. El caso es que no crea la tabla.
Aquí el codigo que estoy empleando, y que brinda gentilmente William. (la coneccion al servidor trabaja bien)

#include "fivewin.ch"

STATIC oCon

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

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

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

if MsgNoYes("Crear tabla tipo xBase?")
// Aquí llamaremos a la creación de la tabla tipo xbase
Createxbase()
else
// Aquí llamaremos a la creación de la tabla SQL directa
**Createsqldirecta()
MiTablaSql()
Endif

oCon:end()

RETURN NIL

//-------------------------
STATIC FUNCTION 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} )

if oCon:TableExist( "tipoxbase" )
MsgInfo("Tabla TIPOXBASE existe... vamos a borrarla.")
if oCon:DeleteTable("tipoxbase")
Msginfo("Tabla TIPOXBASE ha sido borrada")
else
MsgInfo(oCon:Error())
endif
endif

if oCon:TableExist( "tipoxbase" )
MsgInfo("La Tabla TIPOXBASE aun existe")
else
MsgInfo("Tabla TIPOXBASE no existe")
endif

// CreateTable( cTable, aStruct, cPrimaryKey, cUniqueKey, cAuto)
IF !oCon:CreateTable( "tipoxbase", aTabla, "clave" )
MsgInfo( "No pudo crear la tabla, verifique..." )
ELSE
MsgInfo("Tabla TIPOXBASE ha sido creada")
ENDIF

RETURN NIL

//-------------------------//Esta tampoco me funciona
STATIC FUNCTION Createsqldirecta()
LOCAL cQuery

if oCon:TableExist( "modosql" )
MsgInfo("Tabla MODOSQL existe...")
else
MsgInfo("Tabla MODOSQL NO EXISTE...")
endif

cQuery := [CREATE TABLE IF NOT 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
MsgInfo( "No se pudo crear la tabla, verifique...¿porque?" )
ELSE
MsgInfo( "Tabla ha sido creada." )
ENDIF

RETURN NIL


//-------------------------//ESTA ES LA DEL PROBLEMA
STATIC FUNCTION MiTablaSql()
LOCAL cCmdSql
local cTablas:="Tablas: ",aTablas, n:=0

if oCon:TableExist( "clientes" )
MsgInfo("Tabla CLIENTES ya existe...")
else
MsgInfo("Tabla CLIENTES NO EXISTE...")
endif

cCmdSql:= "CREATE TABLE IF NOT EXISTS clientes (" +;
"ROW_ID INTEGER NOT NULL AUTO INCREMENT COMMENT 'Llave'," +;
"CODIGO DECIMAL(05,0) NOT NULL COMMENT 'Codigo de Cliente'," +;
"NOMBRE CHAR(50) NOT NULL COMMENT 'Nombre o Razón Social'," +;
"OBSERVAC TEXT NOT NULL COMMENT 'Observaciones'," +;
"FECHA DATE NOT NULL COMMENT 'Fecha de actualizacion'," +;
"HORA TIME NOT NULL COMMENT 'Hora de actualizacion'," +;
"PRIMARY KEY(ROW_ID))" +;
"ENGINE = InnoDB COMMENT 'clientes';"

oCon:Execute(cCmdSql) //a pesar de que no encuentro en la Classe este comando, compila sin error)

IF oCon:lError
MsgInfo( "No se pudo crear la tabla, verifique..." )
ELSE
MsgInfo( "Tabla ha sido creada... supuestamnte." )
ENDIF


if oCon:TableExist( "clientes" )
MsgInfo("OK, La Tabla CLIENTES fue creada.","Comprobando")
else
MsgInfo("OJO, no fue creada la Tabla CLIENTES","Comprobando")
endif

aTablas:=oCon:ListTables()
For n:=1 to len(aTablas)
cTablas+=" "+aTablas[n]
Next
MsgInfo(cTablas)

RETURN NIL


Gracias de antemano.
Francisco.

Re: Amigos expertos en MySql + xHarbour

PostPosted: Thu Jun 04, 2009 7:15 am
by wmormar
FranciscoA,

En lugar de esto:
oCon:Execute(cCmdSql) //a pesar de que no encuentro en la Classe este comando, compila sin error)

Usa esto:
oCon:Query(cCmdSql)

saludos

Re: Amigos expertos en MySql + xHarbour

PostPosted: Thu Jun 04, 2009 7:19 am
by wmormar
FranciscoA,

Aquí el problema:

//-------------------------//Esta tampoco me funciona
STATIC FUNCTION Createsqldirecta()
LOCAL cQuery

if oCon:TableExist( "modosql" )
MsgInfo("Tabla MODOSQL existe...")
else
MsgInfo("Tabla MODOSQL NO EXISTE...")
endif

cQuery := [CREATE TABLE IF NOT 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 )

Si te fijas, después de modosql, hay un paréntesis, bueno, pues como toda estructura, hay que cerrarlo.

Después de PRIMARY KEY (clave") aqui, va el otro paréntesis

saludos

Re: Amigos expertos en MySql + xHarbour

PostPosted: Thu Jun 04, 2009 12:47 pm
by FranciscoA
William, muchisimas gracias por contestar.
Ya modifiqué lo indicado, pero sigue igual. Solo crea la tabla en modoxbase. Sigo en la batalla.
Saludos.

Re: Amigos expertos en MySql + xHarbour

PostPosted: Thu Jun 04, 2009 1:25 pm
by FranciscoA
William: Estoy utilizando El paquete MySql-cluster-gpl 7.05-win32 y la TMySql que la bajé de xharbour-1.2.1.scr.contrib. ¿Crees que hay alguna incompatilidad? ¿Qué versiones estás usando?
Gracias.

Re: Amigos expertos en MySql + xHarbour

PostPosted: Thu Jun 04, 2009 2:12 pm
by Willi Quintana
Hola,,,
dale un vistazo a : http://wmormar.blogspot.com/

Salu2

Re: Amigos expertos en MySql + xHarbour

PostPosted: Thu Jun 04, 2009 2:51 pm
by FranciscoA
Gracias Willi. En efecto, casi a diario le doy seguimiento al blog de William.
Saludos.

Re: Amigos expertos en MySql + xHarbour

PostPosted: Thu Jun 04, 2009 3:12 pm
by ricardog
Francisco
Buenos dias

En la sintaxis tienes este error :
tu escribes AUTO INCREMENT
debe ser AUTO_INCREMENT

SALUDOS

Re: Amigos expertos en MySql + xHarbour

PostPosted: Thu Jun 04, 2009 5:04 pm
by FranciscoA
Ricardo:
¡Magnifico! ¡Excelente!...!Al fin funciona!. Estaba a punto de "colgar los guantes". En lo futuro, voy a ser más cuidadoso para no "trabarme". Lo raro es que no presenta ningún mensaje de error por mala sintaxis. Sólo no creaba la tabla.
Muchas gracias a tí, y a cada uno de ustedes.

Saludos.

Re: Amigos expertos en MySql + xHarbour

PostPosted: Thu Jun 04, 2009 5:20 pm
by wmormar
FranciscoA wrote:Ricardo:
¡Magnifico! ¡Excelente!...!Al fin funciona!. Estaba a punto de "colgar los guantes". En lo futuro, voy a ser más cuidadoso para no "trabarme". Lo raro es que no presenta ningún mensaje de error por mala sintaxis. Sólo no creaba la tabla.
Muchas gracias.

Saludos.


FranciscoA,

De hecho si envía un mensaje, solo que regresa una consulta. en esa consulta va el error.

saludos

Re: Amigos expertos en MySql + xHarbour

PostPosted: Thu Jun 04, 2009 5:23 pm
by FranciscoA
Entendido, William. Muchisimas gracias.
Saludos.