Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   probelma con date en paradox (https://www.clubdelphi.com/foros/showthread.php?t=19776)

ale21alito 26-03-2005 02:51:03

probelma con date en paradox
 
estoy intentando hacer un alta de registro y me tira el siguiente error

TYPE MISSMATCH IN EXPRESSION

qryDebe.SQL.Text := 'INSERT INTO debes.db

(IDCliente,IDProducto,Recargo,Descuento,Total,Factura,Fecha,Detalle)

VALUES ('+ID.text+','+IDProducto.text+','+Recargo.text+','+Descuento.text+','+TotalNeto.text+',"'+NroFactur a.text+'",
"'+datetostr(fecha.date)+'","'+detalle.text+'")';

qryDebe.ExecSQL;


Fecha es un TDateTimePicker

y el campo Fecha es DATE en la paradox.

que puede ser el error ?

roman 26-03-2005 04:01:41

Cita:

Empezado por ale21alito
que puede ser el error ?

Muy posiblemente porque la configuración de fecha que usa Delphi (normalmente coincidente con la del sistema) no es la adecuada para Paradox: mm/dd/aaaa.

Por esta razón, por legibilidad del código y muchas veces por rendimiento, es mucho, pero mucho mejor usar parámetros en las consultas:

Código SQL [-]
insert into debes
(IDCliente,IDProducto,Recargo,Descuento,Total,Factura,Fecha,Detalle)
values(:id, :producto_id, :recargo, :descuento, :neto, :factura, :fecha, :detalle)

y sustituirlos antes de ejecutarla:

Código Delphi [-]
qryDebe.ParamByName('id').AsString := ID.Text;
qryDebe.ParamByName('producto_id').AsString := IDProducto.Text;
qryDebe.ParamByName('recargo').AsString := Recargo.Text;
qryDebe.ParamByName('descuento').AsString := Descuento.Text;
qryDebe.ParamByName('neto').AsString := TotalNeto.Text;
qryDebe.ParamByName('fecha').AsDate := Fecha.Date;
qryDebe.ParamByName('detalle').AsString := Detalle.Text;

qryDebe.ExecSQL;

// Saludos

ale21alito 26-03-2005 07:05:16

muchas gracias roman !

pero me sigue diciendo TYPE MISSMATCH EXPRESSION

qryDebe.SQL.Text := 'INSERT INTO debes.db (IDCliente,IDProducto,Recargo,Descuento,Total,Factura,Fecha,Detalle) VALUES (:id,:idProducto,:Recargo,:Descuento,:Total,:Factura,:Fecha,:Detalle)';

qryDebe.ParamByName('id').AsString := id.Text;
qryDebe.ParamByName('idProducto').AsString := idProducto.Text;
qryDebe.ParamByName('Recargo').AsString := recargo.Text;
qryDebe.ParamByName('Descuento').AsString := descuento.Text;
qryDebe.ParamByName('Total').AsString := totalneto.Text;
qryDebe.ParamByName('factura').AsString := nrofactura.Text;
qryDebe.ParamByName('fecha').AsDate := fecha.date;
qryDebe.ParamByName('Detalle').AsString := detalle.Text;

qryDebe.ExecSQL;


tendre algo mal en la paradox ? . =( .

Pablo Carlos 28-03-2005 00:39:45

Cita:

Empezado por ale21alito
"'+datetostr(fecha.date)+'","'+detalle.text+'")';

que puede ser el error ?

Hola... me parece que el error puede ser... si es un campo tipo Date y le pasas un string... Paradox debería protestar... :D
Saludos

SALVADORPC 03-08-2005 23:39:15

Hola amigos...

El problema realmente radica en el formato de fecha que paradox utiliza internamete para hacer la conversión de fechas es decir si en una sentencia SQL le envias una cadena a un campo fecha la conversión espera que la cadena que enviaste tenga el formato 'mm/dd/yyyy' para poder hacer la conversión correctamente... todo esto independientemente de la configuración de fecha que tengas en tu equipo...

Saludos

roman 04-08-2005 00:29:13

Lo que dices es cierto si colocas la fecha directamente en la consulta:

Código SQL [-]
insert into personas
(nombre, fecha)
values('roman', '19/05/2005')

Aquí la consulta falla por lo que mencionas; Paradox espera el formato mm/dd/aaaa y se le da en formato dd/mm/aaaa

Pero si usas parámetros:

Código SQL [-]
insert into personas
(nombre, fecha)
values('roman', :fecha)

Y sustituyes el parámetro:

Código Delphi [-]
Query1.ParamByName('fecha').AsDate := Fecha;

donde Fecha es de tipo TDate, la consulta no falla porque la componente transforma el valor TDate al formato adecuado para Paradox.

Por ello es que conviene usar parámetros sin tener que recordar el formato exacto que espera el manejador de bases de datos.

// Saludos

vtdeleon 04-08-2005 04:03:15

Saludos

Ale21alito, trata de hace por lo menos 3 pruebas
Código Delphi [-]
//Sin el campo de fecha, 
 //para ver si ese es el campo del problema
 qryDebe.SQL.Text := 'INSERT INTO debes.db (IDCliente,IDProducto,Recargo,Descuento,Total,Factura,Detalle) 
 VALUES (:id,:idProducto,:Recargo,escuento,:Total,:Factura,:detalle)';
 //Si funciona,... Introduciendo el Valor directamente
 qryDebe.SQL.Text := 'INSERT INTO debes.db (IDCliente,IDProducto,Recargo,Descuento,Total,Factura,Fecha,Detalle) 
 VALUES (:id,:idProducto,:Recargo,:Descuento,:Total,:Factura,#01/01/2005#,:detalle)';//o #15/01/2005# 
 //tambien pruebalo con #01/15/2005#
Si esto no arroja alguna idea,....:(


La franja horaria es GMT +2. Ahora son las 10:45:40.

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