PDA

Ver la Versión Completa : problemas con parametros


pollo_c
01-07-2008, 13:56:23
hola amigos les pido una ayuda, tengo un programa para una biblioteca muy simple con cuatro tablas alumnos, libros, prestamos y prestamos_detalle, al correr mi programa no me marca ningún error pero al llegar al siguiente código:

MD.Caux.SQL.Clear;
MD.Caux.SQL.Add('insert into alumnos values (:v1,:v2,:v3,:v4,:v5,:v6');
MD.Caux.Params.Items[0].AsString:=Edit1.Text;
MD.Caux.Params.Items[1].AsString:=Edit2.Text;
MD.Caux.Params.Items[2].AsString:=Edit3.Text;
MD.Caux.Params.Items[3].AsString:=Edit4.Text;
MD.Caux.Params.Items[4].AsString:=Edit5.Text;
MD.Caux.Params.Items[5].AsString:=Edit6.Text;
MD.Caux.ExecSQL();
Donde:
MD =Objeto Modulo de datos.
Caux= objeto Query.
Aparece el siguente error project1.exe raised exceptionclass EDBEEngineError with message ‘ Unexpected en of command. Token:?’
Saben a que se deba este error ?
Espero de su ayuda gracias

marcoszorrilla
01-07-2008, 14:30:51
Por lo que veo te falta un paréntesis:

hola amigos les pido una ayuda, tengo un programa para una biblioteca muy simple con cuatro tablas alumnos, libros, prestamos y prestamos_detalle, al correr mi programa no me marca ningún error pero al llegar al siguiente código:

MD.Caux.SQL.Clear;
MD.Caux.SQL.Add('insert into alumnos values (:v1,:v2,:v3,:v4,:v5,:v6)');
MD.Caux.Params.Items[0].AsString:=Edit1.Text;
MD.Caux.Params.Items[1].AsString:=Edit2.Text;
MD.Caux.Params.Items[2].AsString:=Edit3.Text;
MD.Caux.Params.Items[3].AsString:=Edit4.Text;
MD.Caux.Params.Items[4].AsString:=Edit5.Text;
MD.Caux.Params.Items[5].AsString:=Edit6.Text;
MD.Caux.ExecSQL();
Donde:
MD =Objeto Modulo de datos.
Caux= objeto Query.
Aparece el siguente error project1.exe raised exceptionclass EDBEEngineError with message ‘ Unexpected en of command. Token:?’
Saben a que se deba este error ?
Espero de su ayuda gracias

Caro
01-07-2008, 14:57:57
Hola, como te dice Marcos, le falta un parentesis y la comilla debe estar fuera del primer parentesis.


MD.Caux.SQL.Add('insert into alumnos values (:v1,:v2,:v3,:v4,:v5,:v6)');


Saluditos

pollo_c
02-07-2008, 06:17:38
Hola amigos ya corregí el código del error del paréntesis pero me sigue marcando el siguiente error a la ora de ejecutar el query MD.Caux.ExecSQL; type mismatch in expression amigo ayúdenme a darle una checada a mi código quiero saber si se pueden usar parámetros de la manera que quiero usarlos, si le ven algo raro díganme por favor es que soy muy novato en delphi
MD.Caux.SQL.Clear;
MD.Caux.SQL.Add('insert into alumnos values (:v1,:v2,:v3,:v4,:v5,:v6)');
MD.Caux.Params.Items[0].AsString:=Edit1.Text;
MD.Caux.Params.Items[1].AsString:=Edit2.Text;
MD.Caux.Params.Items[2].AsString:=Edit3.Text;
MD.Caux.Params.Items[3].AsString:=Edit4.Text;
MD.Caux.Params.Items[4].AsString:=Edit5.Text;
MD.Caux.Params.Items[5].AsString:=Edit6.Text;
MD.Caux.ExecSQL;

Caro
02-07-2008, 14:06:11
Hola pollo_c, si se pueden usar los parametros de la forma que lo estas haciendo, pero también lo puedes hacer utilizando ParamByName de esta forma.


MD.Caux.SQL.Clear;
MD.Caux.SQL.Add('insert into alumnos values (:v1,:v2,:v3,:v4,:v5,:v6)');
MD.Caux.ParamByName('v1').AsString:=Edit1.Text;
MD.Caux.ParamByName('v2').AsString:=Edit2.Text;
MD.Caux.ParamByName('v3').AsString:=Edit3.Text;
MD.Caux.ParamByName('v4').AsString:=Edit4.Text;
MD.Caux.ParamByName('v5').AsString:=Edit5.Text;
MD.Caux.ParamByName('v6').AsString:=Edit6.Text;
MD.Caux.ExecSQL;


Sobre el error que te marca, el tipo de dato que tienes en alguno de tus campos no esta coincidiendo con lo que le pasas en tus Edits, todos tus campos son String?? , ya que en todos utilizas AsString, que tampoco habría problema si le pasas como cadena el formato que necesita tu campo (Integer, Date....), si tienes diferentes tipos en tu tabla puedes utilizar AsInteger si es entero, AsDateTime (Fecha hora), AsDate (Fecha), AsFloat, AsBoolean......

Saluditos