Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Problemas insertando en mysql delphi 2010 (https://www.clubdelphi.com/foros/showthread.php?t=79889)

nickolas 19-08-2012 23:28:15

Problemas insertando en mysql delphi 2010
 
hola a todos, tengo un problema con las inserciones que tengo que hacer en una base de datos mysql. trato de insertar registros y siempre me tira el erro que esta mal la sintaxis y no se porque por que hasta hace unos dias funcionaba y de pronto dejo de funcionar y la verdad no se porque dejo el codigo abajo por lo que se la sintaxis de mysql no tiene nada malo.

Aclaracion: uso mysql 5 y delphi 2010 con los componentes zeos.

Cita:

begin
QRY_Acciones.Close;// cierro la conexion
QRY_Acciones.SQL.Clear; //limpio por si tenia alguna consulta anterior

//inserto los datos en la base de datos
QRY_Acciones.SQL.Add('INSERT into pasajero VALUES (null, :apellido, :nombre, :dni)');
//paso los parametros
QRY_Acciones.ParamByName('apellido').AsString := ED_Apellido.Text;
QRY_Acciones.ParamByName('nombre').AsString := ED_Nombre.Text;
QRY_Acciones.ParamByName('dni').AsInteger := StrToInt(ED_Dni.Text);

//ejecuto la sentencia SQL
QRY_Acciones.ExecSQL;
end;
El query que hace las acciones es "QRY_Acciones".
agradeceria cualquier solucion que me puedan dar porque la vardad no se que pasa esto ya que antes funcionaba bien y me dejo de funcionar.gracias espero sus respuestas.

MartinS 19-08-2012 23:38:18

Hola Nickolas: Creo que el tu sentencia te faltan los campos. Solo le estas dando los valores y a donde van?.-

Saluods

MartinS 19-08-2012 23:47:22

Supuestamente va asi:

Código SQL [-]
insert into Pasajero
  (ID,Apellido,Nombre,DNI)
values
  (:Apellido,:Nombre,:DNI)

Saludos

nickolas 19-08-2012 23:51:53

si gracias ya lo modifique pero me sigue tirando el mismo error

quedo asi

Cita:

begin
QRY_Acciones.Close;// cierro la conexion
QRY_Acciones.SQL.Clear; //limpio por si tenia alguna consulta anterior
//inserto los datos en la base de datos
QRY_Acciones.SQL.Add('INSERT into pasajero (id_pasajero, apellido, nombre, dni) VALUES (null, :apellido, :nombre, :dni)');
QRY_Acciones.ParamByName('apellido').AsString := ED_Apellido.Text;
QRY_Acciones.ParamByName('nombre').AsString := ED_Nombre.Text;
QRY_Acciones.ParamByName('dni').AsInteger := StrToInt(ED_Dni.Text);
//ejecuto la sentencia SQL
QRY_Acciones.ExecSQL;
//refresco el dbgrid

end;
No se le debe de poner el primer valor de como null cuando se manda el dato ya que el id es un campo autincrementable? gracias por reponder

MartinS 20-08-2012 00:02:27

Cita:

Empezado por nickolas (Mensaje 439958)
No se le debe de poner el primer valor de como null cuando se manda el dato ya que el id es un campo autincrementable? gracias por reponder

No conozco mysql aunque supongo que es similar a Firebird. Si vez el ejemplo que puse podras observar que para el valor de id no le di ningun valor (es decir, no lo invoque ni mucho menos escribi null). Se supone que el autoincremental en tu base de datos se hace a partir de un trigger o algo parecido ¿No?. En definitiva cuando los demas valores viajan a la base de datos falta el asignado al id por lo que no escribe null si no que esta vacio y ahi interviene el trigger generando el que corresponda...

Saludos.-

No se la version de mysql pero creo que el soporte de trigger se implementa despues de la 5.0.-

nickolas 20-08-2012 00:06:09

igual me sigue tirando erro y no se por que, la verdad me sorpende por que antes andaba bien.

MartinS 20-08-2012 00:09:47

Ok, Seria mas facil si indicas el error y subi el triggers asi tal ves demos una alternativa.-

nickolas 20-08-2012 00:17:31

la verdad no se cual es le trigger por lo que se en mysql siempre que se agrega un registro se autoincrementa en numero de id si es autoincrementable, el error que me da es el siguiente

"SQL: Error you have an error in your SQL sintax"

MartinS 20-08-2012 00:28:36

Ok, y de donde armaste la base de datos?... Proba pasandole el valor nulo por parametro o bien pasale un cero aunque todo depende del trigger, por ejemplo

Este es un trigger que se activa si el valor de Id es nulo o cero y por parametro lo pasarias asi: (Obvio que segun mi ejemplo)

Código SQL [-]
  IF ((NEW.ID_PASAJERO IS NULL) or (NEW.ID_PASAJERO =0)) THEN
      NEW.ID_PASAJERO = GEN_ID(PASAJERO_ID_GEN, 1);


Código Delphi [-]
begin
QRY_Acciones.Close;// cierro la conexion
QRY_Acciones.SQL.Clear; //limpio por si tenia alguna consulta anterior
//inserto los datos en la base de datos
QRY_Acciones.SQL.Add('INSERT into pasajero (id_pasajero, apellido, nombre, dni) VALUES (:Indice, :apellido, :nombre, :dni)');
QRY_Acciones.ParamByName('Indice').AsString := ''; // ó QRY_Acciones.ParamByName('Indice').AsInteger := 0;
QRY_Acciones.ParamByName('apellido').AsString := ED_Apellido.Text;
QRY_Acciones.ParamByName('nombre').AsString := ED_Nombre.Text;
QRY_Acciones.ParamByName('dni').AsInteger := StrToInt(ED_Dni.Text);
//ejecuto la sentencia SQL
QRY_Acciones.ExecSQL;
//refresco el dbgrid
end;

Fijate que cambie null por :indice y proba con open en vez de execSql ya que es un Query...
Hasta aca llego mi amor :D:D

Saludos

nickolas 20-08-2012 00:33:20

lo cambie pero todavia nada que funcione bien, igual gracias por intentarlo.


La franja horaria es GMT +2. Ahora son las 12:21:38.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi