Amigos expertos en MySql + xHarbour
Posted: Thu Jun 04, 2009 6:59 am
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.
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.