Page 1 of 1

crear tabla en MySql

PostPosted: Thu Nov 01, 2007 3:39 pm
by horacio
He podido conectarme con el servidor sin problemas mediante ado. Pero al momento de crear una tabla me da error. Esta es la cadena del comando:

oCn : Execute( "create table alumnos( codigo int( 10 ) default 0 primary key auto_increment, nombre varchar(30), fecha_nacimiento varchar(15), Importe decimal( 10, 2 ) Default 0.00 ) TYPE=InnoDB ", "CREATE" )

Sin embargo si la creo sin la sentencia "primary key auto_increment" el comando funciona. Alguien tiene alguna punta sobre este asunto. Desde ya muchas gracias

PostPosted: Thu Nov 01, 2007 5:39 pm
by sysctrl2
Prueba cambiando el primary key al final ,



cQry := "CREATE TABLA IF NOT EXISTS ALUMNOS ( "

cQry += "codigo INT(10) DEFAULT 0, "

cQry += "nombre VARCHAR(30) NOT NULL,"

cQry += "auto INT NOT NULL AUTO_INCREMENT,"

cQry += "PRIMARY KEY (codigo))"

cQry += "ENGINE = INNODB"

oCn:Execute( cQry )


Saludos Cordiales..

PostPosted: Thu Nov 01, 2007 7:46 pm
by sjingo
Prueba a quitarle el default 0

así:

oCn : Execute( "create table alumnos( codigo int( 10 ) primary key auto_increment, nombre varchar(30), fecha_nacimiento varchar(15), Importe decimal( 10, 2 ) Default 0.00 ) TYPE=InnoDB ", "CREATE" )

Un Saludo

Marcelo Jingo

PostPosted: Thu Nov 01, 2007 9:50 pm
by horacio
Cesar, Marcelo muchas gracias por las respuestas. He probado las dos soluciones que me propusieron pero no funcionan ( por lo menos en mi servidor ). Estoy utilizando MySql 5.0. MI pregunta si esta secuencia de comandos soporta estas instrucciones ( primary key, foreign key, etc. ). No sé si hay otra manera de hacerlo. Seguiré investigando

PostPosted: Fri Nov 02, 2007 3:16 pm
by sjingo
Qué error te devuelve?

Porque probé tu código de la forma como te indiqué y la tabla se creó sin problema en mi base de datos.


Un Saludo

Marcelo Jingo

PostPosted: Fri Nov 02, 2007 8:27 pm
by horacio
Gracias marcelo por tu respuesta. Te adjunto el codigo y puedes mirar que está mal. Yo no he podido hacerlo funcionar.
[code][/code]
Function Creatabla()

Local i
Local cCadena
Local oCn :=CreateObject("ADODB.Connection")
Local aNombres := { { "Pedro", "3222551.00", "1998-10-15" }, { "Juan", "2.21", "1998-10-15" }, { "Tadeo", "3.58", "1998-10-15" } }

oCn : Open( "Driver={MySQL ODBC 3.51 Driver};Server=localhost;Database=alumnos;User=root;Password=root;Option=3;")
oCn : Execute( "drop database if exists alumnos", "DROP" )
oCn : Execute( "create database alumnos", "CREATE" )
oCn : Execute( "create table alumnos( codigo int( 10 ) primary key auto_increment, nombre varchar(30), fecha_nacimiento varchar(15), Importe decimal( 10, 2 ) Default 0.00 ) TYPE=InnoDB ", "CREATE" )

For i := 1 To Len( aNombres )
cCadena := "insert into alumnos(nombre,fecha_nacimiento,importe) values ( '" + aNombres[ i ][ 1 ] + "', '" + aNombres[ i ][ 3 ] + "', " + aNombres[ i ][ 2 ] + " )"
oCn : Execute( cCadena, 'INSERT' ) <- aqui marca error
Next i
oCn : Close()
Return 0

Fichero de error

Path and name: C:\ado\T-REX.EXE (32 bits)
Size: 1,702,400 bytes
Time from start: 0 hours 0 mins 2 secs
Error occurred at: 11/02/07, 17:24:42
Error description: Error ADODB.Connection/16389 E_FAIL: EXECUTE
Args:
[ 1] = C create table alumnos( codigo int( 10 ) primary key auto_increment, nombre varchar(30), fecha_nacimiento varchar(15), Importe decimal( 10, 2 ) Default 0.00 ) TYPE=InnoDB
[ 2] = C CREATE

Stack Calls
===========
Called from: win32ole.prg => TOLEAUTO:EXECUTE(0)
Called from: ado.prg => CREATABLA(213)
Called from: ado.prg => (b)MUESTRASQL(127)
Called from: TOOLBAR.PRG => TTOOLBAR:COMMAND(0)
Called from: window.prg => TMDICHILD:COMMAND(949)
Called from: window.prg => TWINDOW:HANDLEEVENT(0)
Called from: MDICHILD.PRG => TMDICHILD:HANDLEEVENT(0)
Called from: window.prg => _FWH(3159)
Called from: => WINRUN(0)
Called from: window.prg => TMDIFRAME:ACTIVATE(895)
Called from: ado.prg => MAIN(14)

Amigo...

PostPosted: Fri Nov 02, 2007 11:18 pm
by leandro
Amigo prueba con este a mi me funciona de maravilla

Code: Select all  Expand view

cCommandSql   := "CREATE TABLE IF NOT EXISTS Cliente (" +;
               "CLI_NUM INTEGER UNSIGNED COMMENT 'Número de cliente'," +;
               "CLI_NOM VARCHAR(70) DEFAULT ''COMMENT 'Nombre del cliente'," +;
               "PRIMARY KEY(CLI_NUM) )" +;
               "ENGINE = InnoDB COMMENT = 'Maestro de clientes';"



Si tienes los permisos para crear tablas?

Espero te sirva..

PostPosted: Sat Nov 03, 2007 5:40 am
by sjingo
Horacio

Probé tu código tal cual (comentando las líneas de eliminación , creacion de la BD), creando la tabla en mi base de datos y funcionó bien insertando los registros en la tabla creada.

A lo mejor tu problema es de privilegios del usuario sobre la Base de datos o algo así.

Perdona por no poder ayudar más

Un saludo

Marcelo Jingo

PostPosted: Sat Nov 03, 2007 1:10 pm
by horacio
Marcelo: Ya lo solucioné. No entiendo bien la lógica del motor. Supuse que eliminando la base de datos se eliminaba la tabla, pero parece que no es así. Si elimino solamente la tabla la crea perfectamente pero si elimino la database y vuelvo a crear la base de datos y la tabla me marca un error. Gracias a todos por haber seguido este hilo y la ayuda que me brindaron