Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 26-03-2005
ale21alito ale21alito is offline
Miembro
 
Registrado: feb 2005
Ubicación: Mar del Plata . Argentina
Posts: 49
Poder: 0
ale21alito Va por buen camino
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 ?
Responder Con Cita
  #2  
Antiguo 26-03-2005
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
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, roducto_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
Responder Con Cita
  #3  
Antiguo 26-03-2005
ale21alito ale21alito is offline
Miembro
 
Registrado: feb 2005
Ubicación: Mar del Plata . Argentina
Posts: 49
Poder: 0
ale21alito Va por buen camino
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,escuento,:Total,:Factura,:Fecha,etalle)';

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 ? . =( .
Responder Con Cita
  #4  
Antiguo 28-03-2005
Avatar de Pablo Carlos
Pablo Carlos Pablo Carlos is offline
Miembro
 
Registrado: jun 2004
Ubicación: Mendoza - Argentina
Posts: 270
Poder: 20
Pablo Carlos Va por buen camino
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...
Saludos
__________________
Por qué todas las personas saben exactamente cómo debemos vivir nuestra vida, y nunca tienen idea de cómo deben vivir sus propias vidas.
Responder Con Cita
  #5  
Antiguo 03-08-2005
SALVADORPC SALVADORPC is offline
Registrado
 
Registrado: ago 2005
Posts: 1
Poder: 0
SALVADORPC Va por buen camino
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
Responder Con Cita
  #6  
Antiguo 04-08-2005
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
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
Responder Con Cita
  #7  
Antiguo 04-08-2005
Avatar de vtdeleon
vtdeleon vtdeleon is offline
Miembro
 
Registrado: abr 2004
Ubicación: RD & USA
Posts: 3.236
Poder: 24
vtdeleon Va por buen camino
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,escuento,:Total,:Factura,#01/01/2005#,:detalle)';//o #15/01/2005# 
 //tambien pruebalo con #01/15/2005#
Si esto no arroja alguna idea,....
__________________
Van Troi De León
(Not) Guía, Code vB:=Delphi-SQL, ¿Cómo?
Viajar en el tiempo no es teóricamente posible, pues si lo fuera, ya estarían aqui contándonos al respecto!
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 08:49:11.


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
Copyright 1996-2007 Club Delphi