Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 18-05-2007
fernando1973 fernando1973 is offline
Miembro
 
Registrado: mar 2007
Posts: 32
Poder: 0
fernando1973 Va por buen camino
error con consulta a 2 tablas

quisiera hacer una consulta a dos tablas donde el campo en comun es 'codigo' yo coloque este codigo en sqldataset:

select venta.fecha, stock.codigo, stock.descrip
from ventas, stock
where stock.codigo = venta.codigo and fecha = :fec

y en el boton igual que el anterior

clientdataset1.Close;
sqldataset1.ParamByName('fec').AsDate := datetimepicker1.Date;
clientdataset1.Open;


pero me da el error siguiente:

Project Project1.exe raised exeption class EdatabaseError with message
‘No Value for parameter ‘fec’ Process stopped.Use step or run to continue.

desde ya muchas gracias por las respuestas.
Responder Con Cita
  #2  
Antiguo 18-05-2007
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola fernando1973
Usa las etiquetas, recuerda que el codigo lo ven muchos.
Código SQL [-]
clientdataset1.Close;
sqldataset1.ParamByName('fec').AsDate := datetimepicker1.Date;
clientdataset1.Open;
el otro:
Código Delphi [-]
clientdataset1.Close;
sqldataset1.ParamByName('fec').AsDate := datetimepicker1.Date;
clientdataset1.Open;
asi se ven mejor.
Saludos
Responder Con Cita
  #3  
Antiguo 18-05-2007
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Viendo bien el codigo, pregunto y para que dos botones, para que repetido todo, creo que tienes que analizar bien todo.
Saludos
Responder Con Cita
  #4  
Antiguo 18-05-2007
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 29
jhonny Va camino a la famajhonny Va camino a la fama
Que tal si prueba a cambiar la consulta, indicándole a la fecha la tabla a la que pertenece, algo como:

Código SQL [-]
select venta.fecha, stock.codigo, stock.descrip 
from ventas, stock
where stock.codigo = venta.codigo and ventas.fecha = :fec

O esto:

Código SQL [-]
 
select venta.fecha, stock.codigo, stock.descrip 
from ventas, stock
where stock.codigo = venta.codigo and stock.fecha = :fec

Según sea. Espero sea esto.
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/
Responder Con Cita
  #5  
Antiguo 18-05-2007
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Perdon no lo hice bien, lo vuelvo a poner:
Código SQL [-]
select venta.fecha, stock.codigo, stock.descrip
from ventas, stock
where stock.codigo = venta.codigo and fecha = :fec
el otro:
Código Delphi [-]
clientdataset1.Close;
sqldataset1.ParamByName('fec').AsDate := datetimepicker1.Date;
clientdataset1.Open;
asi esta mejor.
Saludos
Responder Con Cita
  #6  
Antiguo 18-05-2007
fernando1973 fernando1973 is offline
Miembro
 
Registrado: mar 2007
Posts: 32
Poder: 0
fernando1973 Va por buen camino
perdon por lo de las etiquetas voy a ver como se usan, por lo del codigo es solo un boton yo me exorese mal, el el form tengo un dbgrid conectado al datasource un datetimepicker que elijo la fecha a buscar y un botos que pasa el parametro de fecha que me sigue dando este error :

"Project Project1.exe raised exeption class EdatabaseError with message
‘No Value for parameter ‘fec’ Process stopped.Use step or run to continue."
Responder Con Cita
  #7  
Antiguo 18-05-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
no he leido el hilo, pero habría que cerrar el sqldataset que es quien tiene el parámetro.
Código Delphi [-]
clientdataset1.Close;
sqldataset1.Close;
sqldataset1.ParamByName('fec').AsDate := datetimepicker1.Date;
sqldataset.Open;
clientdataset1.Open;
Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #8  
Antiguo 18-05-2007
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 29
jhonny Va camino a la famajhonny Va camino a la fama
Ahh bueno¡¡¡, después de pensarlo mejor y de una manera mas razonable el problema quizá radica en que en la propiedad Params del Dataset no haz especificado el tipo de parámetro de fecha la cosa podría solucionarce de la siguiente manera.

Código Delphi [-]
 
clientdataset1.Params[0].DataType := ftDate;
clientdataset1.Close;
clientdataset1.ParamByName('fec').AsDate := datetimepicker1.Date;
clientdataset1.Open;

Pero tengo una pregunta ¿Al fin con cual de los dos trabajas, con clientdataset1 o con sqldataset1?, el ejemplo que te coloque lo asumí creyendo que usabas clientdataset1. Creo que esto si es .

Nota: Mi pregunta es para hacer ver lo mismo de Lepe, disculparme pues se me habia caido la conexión y cuando volvio solo me limite a presionar el boton de "Enviar" .
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/

Última edición por jhonny fecha: 18-05-2007 a las 19:59:32.
Responder Con Cita
  #9  
Antiguo 18-05-2007
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Para mi el problema es el uso de dos botones.
1- hace la sqntencia sql
2- ejecuta el parametro.
Como va a saber el segundo codigo que parametro es fec.
Hay muchas maneras de hacerlo, esta es una:
Código Delphi [-]
Query1.close;
Query1.sql.Add('select venta.fecha, stock.codigo, stock.descrip');
Query1.sql.Add('from ventas, stock');
Query1.sql.Add('where stock.codigo = venta.codigo and fecha = '+StrToDate(datetimepicker1.Date));
Esta es otra:
Código Delphi [-]
Query1.close;
Query1.sql.Add('select venta.fecha, stock.codigo, stock.descrip');
Query1.sql.Add('from ventas, stock');
Query1.sql.Add('where stock.codigo = venta.codigo and fecha = :fec');
sqldataset1.ParamByName('fec').AsDate := datetimepicker1.Date;
Y bueno hay mas.
Saludos
Responder Con Cita
  #10  
Antiguo 19-05-2007
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Cita:
Empezado por jhonny
el problema quizá radica en que en la propiedad Params del Dataset no haz especificado el tipo de parámetro de fecha
No se si estoy confundido, pero tengo entendido que sólo hay que especificar esto, si se está empleando tablas paradox. No me acuerdo donde lo había leido.
Puede que me equivoque, es muy probable ya que soy novato en este aspecto de Delphi+BD.

Yo hasta el momento no he tenido mayores inconvenientes, vengo siguiendo recomendaciones de La Cara Oculta y post leídos de los foros y hago lo mismo que los códigos que exponen y me sale.
De seguro esto puede resultar un poco tonto... ¿pero no será que los formatos de la fecha son distintos?...

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #11  
Antiguo 19-05-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
No hay que especificar el "Datatype" del parámetro, eso solo hay que hacerlo con ADO, porque ADO no tiene la opción de parambyname(...).AsDateTime. El resto de componentes de acceso, si tienen dicho método y al poner AsDateTime := datetimepicker.date, ya le estás diciendo a delphi que es un parámetro de fechas.

Al asignar el SQL, delphi internamente hace el parser y crea los parámetros automáticamente.

Esta forma NO la recomiendo para nada:
Código Delphi [-]
Query1.close;
Query1.sql.Add('select venta.fecha, stock.codigo, stock.descrip');
Query1.sql.Add('from ventas, stock');
Query1.sql.Add('where stock.codigo = venta.codigo and fecha = '+StrToDate(datetimepicker1.Date));
ya que incrustas la fecha directamente en el SQL, pero estas usando StrToDate, que depende de la configuración de windows para establecer el formato de fecha, leasé mm/dd/yyyy o bien dd/mm/yyyy o bien yyyy/mm/dd, y por ahí empiezan los problemas, dado que puede interpretar 01/02/2007 como el uno de febrero o como el 2 de enero devolviendo registros que no esperas, y este fallo es difícil de localizar.

Delphi sabe que ":fec" es algo especial porque lleva los dos puntos delante. Sabe que no es un campo porque ha mirado los campos del Select de la consulta y "fec" no aparece en ellos, por tanto, creará un parámetro.

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #12  
Antiguo 19-05-2007
Avatar de courtois
courtois courtois is offline
Miembro
 
Registrado: abr 2006
Ubicación: Mexico DF
Posts: 200
Poder: 18
courtois Va por buen camino
En lugar de
Código Delphi [-]
StrToDate(datetimepicker1.date);
podriamos usar
Código Delphi [-]
FormatDateTime('dd/mm/yyyy',datetimepicker1.date);
así el formato de la fecha lo determinas tu y es independiente de windows
Responder Con Cita
  #13  
Antiguo 19-05-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
La mayoría de motores de BBDD usan el formato mm/dd/yyyy, pero hay algunos que son "inteligentes", si enviamos una fecha 31/01/2007, como no encaja en ese formato, el motor cambia el formato a dd/mm/yyyy, por tanto nuestra consulta funciona correctamente. Cuando se le pasa la fecha 07/01/2007, lo encaja en formato mm/dd y nos devuelve los datos de Julio, mientras que nosotros esperamos los de enero.

Para evitar todo tipos de inconvenientes están los parámetros; delphi usa internamente un double para representar una fecha, así que no importa el formato de fecha que usemos, no importa la configuración de windows y no importa los formatos de fecha de la unidad SysUtils.

El motor de BBDD y delphi ya se entenderán (que para algo son compatibles ).

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #14  
Antiguo 19-05-2007
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 29
jhonny Va camino a la famajhonny Va camino a la fama
No vi que fernando1973 especificara un tipo de BD o la conexión que utiliza y por esta razón me inclino por el lado del DataType, pues podría ser el problema.
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Error en Consulta de tablas creadas en tiempo de ejecucion javicho_villa Varios 1 02-02-2006 18:14:28
Consulta SQL con dos tablas... emeceuy Conexión con bases de datos 2 06-08-2005 08:41:59
consulta de dos tablas tgsistemas SQL 4 15-04-2005 14:25:59
Consulta con dos tablas candido SQL 2 09-08-2004 14:02:07
Consulta SQL con 4 tablas nefy SQL 2 04-05-2004 00:25:22


La franja horaria es GMT +2. Ahora son las 03:17:15.


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