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 28-04-2017
netcom netcom is offline
Miembro
NULL
 
Registrado: nov 2014
Posts: 11
Poder: 0
netcom Va por buen camino
Problemas entre fechas con resto de la sentencia

Buenas,
Primero de todo gracias de antemano por vuestras posibles respuestas.
Tengo un problema con la siguiente sentencia SQL, pero no se donde radica el error. Haciendo pruebas, si la modifica para solo condición 1 y 2, funciona. Si la modifico solo para condición 3 y 4, también funciona. Pero si la modifico para que tenga las 4 da error. Os adjunto el código completo:

Código Delphi [-]
With Datamodule1.ADOQuery_consultasFlujo Do
            Begin
              Close;
              SQL.Clear;
              SQL.Add('SELECT * FROM Entradas_Salidas_ECS WHERE tipo_de_entrada=condicion1 and tipo_de_salida=condicion2 and Fecha_salida BETWEEN :condicion3 and :condicion4');                
              Parameters.ParamByName('condicion1').Value:=RG_Entradas.ItemIndex;
              Parameters.ParamByName('condicion2').Value:=RG_Salidas.ItemIndex;
              Parameters.ParamByName('condicion3').Value:=E_Entrada_Inicio.Text;
              Parameters.ParamByName('condicion4').Value:=E_Entrada_Fin.Text;              
              Open;
            End;

Gracias de nuevo!
Responder Con Cita
  #2  
Antiguo 28-04-2017
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.020
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
¿Y cuál es el error?
Responder Con Cita
  #3  
Antiguo 28-04-2017
manelb manelb is offline
Miembro
 
Registrado: mar 2017
Posts: 280
Poder: 8
manelb Va por buen camino
Código Delphi [-]
SQL.Add('SELECT * FROM Entradas_Salidas_ECS WHERE tipo_de_entrada=condicion1 and tipo_de_salida=condicion2 and Fecha_salida BETWEEN :condicion3 and :condicion4');

En condición1 y condicion2 no veo los dos puntos (:condicion1, :condicion2). Podría ser esto??
Responder Con Cita
  #4  
Antiguo 28-04-2017
netcom netcom is offline
Miembro
NULL
 
Registrado: nov 2014
Posts: 11
Poder: 0
netcom Va por buen camino
Buenas,

Cuando cambio la sentencia solo para condicion1 y 2 o solo para condicion3 y 4 no hay error ninguno. Cuando lo pongo junto como veis lanza un error indicando que el parámetro condicion1 no lo encuentra, algo muy raro.

He probado lo de los puntos por si las moscas, no tienen nada que ver.

Gracias por las respuestas!
Responder Con Cita
  #5  
Antiguo 28-04-2017
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.020
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por netcom Ver Mensaje
Buenas,
Cuando cambio la sentencia solo para condicion1 y 2 o solo para condicion3 y 4 no hay error ninguno. Cuando lo pongo junto como veis lanza un error indicando que el parámetro condicion1 no lo encuentra, algo muy raro.
He probado lo de los puntos por si las moscas, no tienen nada que ver.
Gracias por las respuestas!
Lo primero de todo, la sentencia está mal, faltan los : como indica manel, a partir de ahí tienes que ver qué parámetros recibe y ver qué error da.
Responder Con Cita
  #6  
Antiguo 28-04-2017
netcom netcom is offline
Miembro
NULL
 
Registrado: nov 2014
Posts: 11
Poder: 0
netcom Va por buen camino
nuca he usado los puntos con este tipo de sentencias, haciendo pruebas y modificando código:
Código Delphi [-]
With Datamodule1.ADOQuery_consultasFlujo Do
            Begin
              Close;
              SQL.Clear;
              SQL.Add('SELECT * FROM Entradas_Salidas_ECS WHERE tipo_de_entrada =condicion1 and tipo_de_salida =condicion2 and nombre =condicion3 ');
              SQL.Add('and Fecha_salida BETWEEN :condicion4 and :condicion5 ');
              SQL.Add('and Fecha_de_entrada BETWEEN :condicion6 and :condicion7');
              Parameters.Refresh;
              Parameters.ParamByName('condicion1').Value:=RG_Entradas.Items.strings[RG_Entradas.ItemIndex];
              Parameters.ParamByName('condicion2').Value:=RG_Salidas.Items.strings[RG_Entradas.ItemIndex];
              Parameters.ParamByName('condicion3').Value:='Cliente';
              Parameters.ParamByName('condicion4').Value:=StrToDatetime(E_Entrada_Inicio.Text);
              Parameters.ParamByName('condicion5').Value:=StrToDate(E_Entrada_Fin.Text);
              Parameters.ParamByName('condicion6').Value:=StrToDate(E_Salida_Inicio.Text);
              Parameters.ParamByName('condicion7').Value:=StrToDate(E_Salida_Fin.Text);
              Open;
            End;

Ahora melanza el error "PArameter 'codición4' not found". Me estoy volviendo tarumba. ¿alguna otra idea?
Responder Con Cita
  #7  
Antiguo 28-04-2017
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.020
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por netcom Ver Mensaje
nuca he usado los puntos con este tipo de sentencias, haciendo pruebas y modificando código:
Ahora melanza el error "PArameter 'codición4' not found". Me estoy volviendo tarumba. ¿alguna otra idea?
Para empezar, ¿qué base de datos estás usando?
Responder Con Cita
  #8  
Antiguo 28-04-2017
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.020
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Y que leas nuestra guía de estilo
Responder Con Cita
  #9  
Antiguo 28-04-2017
netcom netcom is offline
Miembro
NULL
 
Registrado: nov 2014
Posts: 11
Poder: 0
netcom Va por buen camino
Perdón, uso acces 2013, windows 10 y delphi XE2. Si necesitais otro dato importante que me haya dejado ya me decis. Gracias!!
Responder Con Cita
  #10  
Antiguo 28-04-2017
manelb manelb is offline
Miembro
 
Registrado: mar 2017
Posts: 280
Poder: 8
manelb Va por buen camino
Otra sugerencia:
Cambia los .Value por el tipo concreto de cada parametro
Responder Con Cita
  #11  
Antiguo 02-05-2017
Avatar de mRoman
mRoman mRoman is offline
Miembro
 
Registrado: nov 2003
Posts: 599
Poder: 21
mRoman Va por buen camino
Creo q tienes algunos errores....
Código Delphi [-]
With Datamodule1.ADOQuery_consultasFlujo Do
            Begin
              Close;
              SQL.Clear;
              SQL.Add('SELECT * FROM Entradas_Salidas_ECS WHERE tipo_de_entrada =:condicion1 and tipo_de_salida =:condicion2 and nombre =:condicion3 ');
              SQL.Add('and Fecha_salida BETWEEN :condicion4 and :condicion5 ');
              SQL.Add('and Fecha_de_entrada BETWEEN :condicion6 and :condicion7');
              Parameters.Refresh;
              Parameters.ParamByName('condicion1').Value:=RG_Entradas.Items.strings[RG_Entradas.ItemIndex];
              Parameters.ParamByName('condicion2').Value:=RG_Salidas.Items.strings[RG_Entradas.ItemIndex]; //AQUI HACE REFERENCIA RG_ENTRADAS... no debería ser a RG_Salidas.ItemIndex???
              Parameters.ParamByName('condicion3').Value:='Cliente';
              Parameters.ParamByName('condicion4').Value:=StrToDatetime(E_Entrada_Inicio.Text);
              Parameters.ParamByName('condicion5').Value:=StrToDate(E_Entrada_Fin.Text);
              Parameters.ParamByName('condicion6').Value:=StrToDate(E_Salida_Inicio.Text);
              Parameters.ParamByName('condicion7').Value:=StrToDate(E_Salida_Fin.Text);
              Open;
            End;

Y mas arriba te hacian un comentario de registrar el tipo de dato que debe aceptar, es decir cambiar VALUE por el tipo de dato que deberá aceptar como parametro:

Código Delphi [-]
Parameters.ParamByName('condicion5').Value:=StrToDate(E_Entrada_Fin.Text);
              Parameters.ParamByName('condicion6').AsDate:=StrToDate(E_Salida_Inicio.Text);//AsDate o AsDateTime, segun...si el campo TimeStamp
              Parameters.ParamByName('condicion7').AsDate:=StrToDate(E_Salida_Fin.Text);

Saludos.
__________________
Miguel Román

Afectuoso saludo desde tierras mexicanas....un aguachile?, con unas "cetaseas" bien "muertas"?, VENTE PUES !!
Responder Con Cita
  #12  
Antiguo 02-05-2017
netcom netcom is offline
Miembro
NULL
 
Registrado: nov 2014
Posts: 11
Poder: 0
netcom Va por buen camino
Gracias por la sugerencia Manel.
Roman, bien visto el error de entrada/salida, aunque no afecta en nada al problema que tengo.

Intento cambiar "value" por el tipo concreto de cada parámetro como me sugerís, pero el delhpi da error de sentencia. ParamByName no acepta otra cosa queno sea Value, ni AsString, ni Asdate... quizá tengo una versión algo obsoleta? trabajo con XE2:

Código Delphi [-]
With Datamodule1.ADOQuery_consultasFlujo Do
            Begin
              Close;
              SQL.Clear;
              SQL.Add('SELECT * FROM Entradas_Salidas_ECS WHERE tipo_de_entrada =condicion1 and tipo_de_salida =condicion2 and nombre =condicion3 ');
              SQL.Add('and Fecha_salida BETWEEN :condicion4 and :condicion5 ');
              SQL.Add('and Fecha_de_entrada BETWEEN :condicion6 and :condicion7');
              Parameters.Refresh;
              Parameters.ParamByName('condicion1').AsString:=RG_Entradas.Items.strings[RG_Entradas.ItemIndex];
              Parameters.ParamByName('condicion2').AsString:=RG_Salidas.Items.strings[RG_Salidas.ItemIndex];
              Parameters.ParamByName('condicion3').AsString:='Cliente';
              Parameters.ParamByName('condicion4').AsString:=E_Entrada_Inicio.Text;
              Parameters.ParamByName('condicion5').AsString:=E_Entrada_Fin.Text;
              Parameters.ParamByName('condicion6').AsString:=E_Salida_Inicio.Text;
              Parameters.ParamByName('condicion7').AsString:=E_Salida_Fin.Text;
              Open;
            End;

Alguna otra idea?

Gracias de nuevo.
Responder Con Cita
  #13  
Antiguo 02-05-2017
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.020
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por netcom Ver Mensaje
Intento cambiar "value" por el tipo concreto de cada parámetro como me sugerís, pero el delhpi da error de sentencia. ParamByName no acepta otra cosa queno sea Value, ni AsString, ni Asdate... quizá tengo una versión algo obsoleta? trabajo con XE2:
Copia aquí tu código que lo veamos, y copia y pega también el error exactamente que sale y dónde.
Responder Con Cita
  #14  
Antiguo 02-05-2017
netcom netcom is offline
Miembro
NULL
 
Registrado: nov 2014
Posts: 11
Poder: 0
netcom Va por buen camino
Primero, perdón... estaba obcecado con el problema y no veía más allá de mi nariz...
Ya lo he resuelto, el problema, los dos puntos, como muy bien me habíais indicado en primera instancia, y en segundo lugar había puesto mál uno de los campos de la tabla, que se llamaba "fecha recepcion' y en la consulta lo estaba llamando 'fecha entrada'. Os adjunto el código final que funciona:

Código Delphi [-]
With Datamodule1.ADOQuery_consultasFlujo Do
            Begin
              Close;
              SQL.Clear;
              SQL.Add('SELECT * FROM Entradas_Salidas_ECS WHERE tipo_de_entrada =:condicion1 and tipo_de_salida =:condicion2 and nombre =:condicion3');
              SQL.Add('and Fecha_salida BETWEEN :condicion4 and :condicion5 ');
              SQL.Add('and Fecha_recepcion BETWEEN :condicion6 and :condicion7');
              Parameters.ParamByName('condicion1').Value:=RG_Entradas.Items.strings[RG_Entradas.ItemIndex];
              Parameters.ParamByName('condicion2').Value:=RG_Salidas.Items.strings[RG_Salidas.ItemIndex];
              Parameters.ParamByName('condicion3').Value:='Test 1';
              Parameters.ParamByName('condicion4').Value:=E_Entrada_Inicio.Text;
              Parameters.ParamByName('condicion5').Value:=E_Entrada_Fin.Text;
              Parameters.ParamByName('condicion6').Value:=E_Salida_Inicio.Text;
              Parameters.ParamByName('condicion7').Value:=E_Salida_Fin.Text;
              Open;
            End;

De nuevo, siento haberos hecho perder el tiempo!! muchísimas gracias por vuestro interes y por vuestras respuestas. Tenéis un foro cojonudo, desde años que le hago consultas siempre que tengo alguna dudilla.

Vemos!
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
Sentencia SQL entre Fechas y horas Chogo Firebird e Interbase 2 29-10-2010 02:12:55
slq entre dos fechas comparar fechas taru MySQL 2 30-07-2007 17:10:36
Problemas de fechas entre Foxpro y Delphi reynaldo Tablas planas 4 20-06-2006 10:31:42
Problemas con Calculo entre Fechas CamiloU OOP 2 04-04-2006 00:48:51
Problema entre query y sentencia sql ilichhernandez Conexión con bases de datos 1 17-11-2005 22:00:05


La franja horaria es GMT +2. Ahora son las 10:44:28.


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