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
crear tabla en MySql
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..
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..
Cesar Cortes Cruz
SysCtrl Software
Mexico
' Sin +- FWH es mejor "
SysCtrl Software
Mexico
' Sin +- FWH es mejor "
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
Gracias marcelo por tu respuesta. Te adjunto el codigo y puedes mirar que está mal. Yo no he podido hacerlo funcionar.
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)
Code: Select all
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)
Last edited by horacio on Fri Dec 10, 2010 1:53 am, edited 1 time in total.
Amigo...
Amigo prueba con este a mi me funciona de maravilla
Si tienes los permisos para crear tablas?
Espero te sirva..
Code: Select all
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';"
Espero te sirva..
Saludos
LEANDRO ALFONSO
SISTEMAS LYMA - BASE
Bogotá (Colombia)
[ FWH 19.09 ] [ xHarbour 1.2.3 Intl. (SimpLex) (Build 20190613) ] [ Embarcadero C++ 7.30 for Win32 ]
LEANDRO ALFONSO
SISTEMAS LYMA - BASE
Bogotá (Colombia)
[ FWH 19.09 ] [ xHarbour 1.2.3 Intl. (SimpLex) (Build 20190613) ] [ Embarcadero C++ 7.30 for Win32 ]
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
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
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