Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Insert into (https://www.clubdelphi.com/foros/showthread.php?t=41367)

jerosol 14-03-2007 02:08:12

Insert into
 
Hola
estoin intentando hacer un insert sobre tablas de database destok pero cuando lo ejecuto me da un error y no se si el codigo esta mal o si podria ser por alguna propiedad q deberia estar marcada.
si alguien me puede ayudar se lo agradeceria

qOperacion.Close;
qOperacion.SQL.Clear;

qOperacion.SQL.Add('Insert Into Mantenimiento (codigo, fecha, total_factura, Gasto, total) Values (:pcodigo, :pfecha, :ptotal_factura, :pGasto, :ptotal');

qOperacion.Params[0].Value:=strtoint(edCodigo.text);
qOperacion.Params[1].value:=dtpFecha.Date;
qOperacion.Params[2].Value:=strtofloat(edtotfac.Text);
qOperacion.Params[3].Value:=strtofloat(edgasto.Text);
qOperacion.Params[4].Value:=strtofloat(edtotal.Text);

qOperacion.ExecSQL;

ContraVeneno 14-03-2007 02:39:30

¿y cuál es el error?

roman 14-03-2007 02:41:00

¿Hay alguna posibilidad de que nos digas cuál es el error que te marca?

// Saludos

egostar 14-03-2007 02:49:19

Cita:

Empezado por jerosol
Values (:pcodigo, :pfecha, :ptotal_factura, :pGasto, :ptotal')

A mi se me hace raro las caritas, no sera por ahi el error:confused:

porque deberia de haberse visto en todo caso asi si es que estas oasando parametros, no crees?

Código Delphi [-]
     Values (:codigo, :fecha, :total_factura, :Gasto, :total')

Saludos

ContraVeneno 14-03-2007 02:52:25

jejeje
las caritas salen por esta utilizando el prefijo "p" antes del nombre para identificar que es parámetro. Cosa que no sería necesaria, pero en fin, cuestión de estilos.

La carita aparece proque aquí en la página se toma : p como carita, si hubiera puesto :P no creo que hubiera aparecido la carita :p

egostar 14-03-2007 02:53:24

Ah bueno, pues ya esta, jejeje

Entonces seguimos esperando que nos informe el error.

Saludos

ContraVeneno 14-03-2007 02:54:42

A mi me parece que el error estaría en las conversiones de tipos de datos ocasionados por utilizar:

Código Delphi [-]
qOperacion.Params[1].value:=dtpFecha.Date;

en lugar de
Código Delphi [-]
qOperacion.ParamByName('PFecha').AsDateTime:=dtpFecha.DateTime;

pero sin conocer el error, es pura adivinancia la que hace uno :p

egostar 14-03-2007 02:56:22

Podria ser tambien que el código sea String en lugar de Integer......:rolleyes::rolleyes::D

Saludos

roman 14-03-2007 02:58:40

Cuando quieran que no aparezcan esas caritas:

Código Delphi [-]

Values (:pcodigo,:pfecha, :ptotal_factura, :pGasto, :ptotal');

pongan la etiqueta [ noparse ]:

[ delphi ]
[ noparse]
...
[ /noparse ]
[ /delphi ]


:p


// Saludos

basti 14-03-2007 04:02:19

Puestos a conjeturar, el error podría ser este:


qOperacion.SQL.Add('Insert Into Mantenimiento (codigo, fecha, total_factura, Gasto, total) Values (:pcodigo, :pfecha, :ptotal_factura, :pGasto, :ptotal');

Falta un paréntesis:
qOperacion.SQL.Add('Insert Into Mantenimiento (codigo, fecha, total_factura, Gasto, total) Values (:pcodigo, :pfecha, :ptotal_factura, :pGasto, :ptotal)');

jerosol 14-03-2007 19:00:57

Type mismatch in expression.
 
Bueno e modificado el codigo siguiendo vuestras indicaciones y el error q me da es "Type mismatch in expression" a ver si ahora sale el fallo
gracias a todos por adelantado.

qOperacion.Close;
qOperacion.SQL.Clear;

qOperacion.SQL.Add('Insert Into Mantenimiento (codigo, fecha, total_factura, Gasto, total) Values (:codigo, :fecha, :total_factura, :Gasto, :total) ');

qOperacion.ParamByName('PCodigo').AsInteger :=strtoint(edCodigo.text);
qOperacion.ParamByName('PFecha').AsDate :=dtpFecha.Date;
qOperacion.ParamByName('PTotal_Factura').AsFloat:=strtofloat(edtotfac.Text);
qOperacion.ParamByName('PGasto').AsFloat :=strtofloat(edgasto.Text);
qOperacion.ParamByName('PTotal').AsFloat :=strtofloat(edtotal.Text);

qOperacion.ExecSQL;

end;

ArdiIIa 14-03-2007 19:07:58

Cita:

Empezado por jerosol
qOperacion.ParamByName('PCodigo').AsInteger :=strtoint(edCodigo.text);
qOperacion.ParamByName('PFecha').AsDate :=dtpFecha.Date;
qOperacion.ParamByName('PTotal_Factura').AsFloat:=strtofloat(edtotfac.Text);
qOperacion.ParamByName('PGasto').AsFloat :=strtofloat(edgasto.Text);
qOperacion.ParamByName('PTotal').AsFloat :=strtofloat(edtotal.Text);

No entiendo el prefijo P cuando en realidad ningún parámetro comienza con P
Código Delphi [-]
qOperacion.ParamByName('Codigo').AsInteger :=strtoint(edCodigo.text);
qOperacion.ParamByName('Fecha').AsDate     :=dtpFecha.Date;
qOperacion.ParamByName('Total_Factura').AsFloat:=strtofloat(edtotfac.Text);
qOperacion.ParamByName('Gasto').AsFloat     :=strtofloat(edgasto.Text);
qOperacion.ParamByName('Total').AsFloat      :=strtofloat(edtotal.Text);

jerosol 14-03-2007 19:13:43

lo de la P es una mania mia y de muxos pero en fin ya lo e cambiadocomo veras en el ultimo mensaje ademas de cambiar el params[n] por
parambyname('').value

ArdiIIa 14-03-2007 19:16:23

Cita:

Empezado por jerosol
lo de la P es una mania mia y de muxos pero en fin ya lo e cambiadocomo veras en el ultimo mensaje ademas de cambiar el params[n] por
parambyname('').value

Pues suponiendo que ya hayas cambiado correctamente el nombre de los parámetros... No se si sigues obteniendo el mismo error.
Si este persiste, tal vez te esté fallando en el formato de la fecha.

ContraVeneno 14-03-2007 19:18:11

Y si pudieras decirnos en que línea te aparece el error de tipos, sería mucho mejor

jerosol 14-03-2007 19:25:25

La cosa esta en q no me dice en q parte falla solo me da el error
Type mismatch in expression
e probado en poner el insert into en la propiedad sql directamente pero no me aclara nada
respecto a lo del formato de la fecha q me reconendais?
e pensado en pasarla como string.
podria funcionar??

ArdiIIa 14-03-2007 19:30:51

Prueba así a ver que pasa:

Código Delphi [-]

With qOperacion Do
Begin
  Close;
  SQL.Clear;
  SQL.Add('Insert Into Mantenimiento (codigo, fecha, total_factura, Gasto, total) Values (:codigo, :fecha, :total_factura, :Gasto, :total) ');
  ParamByName('Codigo').AsInteger :=strtoint(edCodigo.text);
  ParamByName('FECHA').AsString := FormatDateTime('dd/mm/yyyy',dtpFecha.Date);
  ParamByName('Total_Factura').AsFloat:=strtofloat(edtotfac.Text);
  ParamByName('Gasto').AsFloat     :=strtofloat(edgasto.Text);
  ParamByName('Total').AsFloat      :=strtofloat(edtotal.Text);

ExecSQL;
End;

jerosol 14-03-2007 19:36:50

Me sigue dando el mismo error.
Creo q el problema esta en el sql xq e puesto todos los parametros como estrings asignandoles ' ' es decir cadena vacia menos a la clave primaria q le e puesto un valor y me a seguido dando el error.
seguro q es una tonteria de error de esos q lo lees 100 veces y sigues sin verlo

roman 14-03-2007 19:41:48

Ponlo así:

Código Delphi [-]
qOperacion.ParamByName('Fecha').AsDate := Trunc(dtpFecha.Date);

La propiedad Date del DateTimePicker en realidad regresa también la parte decimal correspondiente al tiempo.

// Saludos

jerosol 14-03-2007 19:44:37

sigue dando errror


La franja horaria es GMT +2. Ahora son las 11:33: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