Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > MS SQL Server
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 09-02-2015
Avatar de jeremiselxi
jeremiselxi jeremiselxi is offline
Miembro
 
Registrado: ago 2008
Posts: 199
Poder: 16
jeremiselxi Va por buen camino
Smile Ejecucion de consulta de fechas con problemas

Buenas tardes.

Esperando se encuentren bien, expreso mi siguiente situación.

Estoy trabajando con D7 y SQLServer 2012.

Tengo una tabla llamada fechas y tiene la siguiente estructura:

Fecha date
Descripcion nvarchar(50)
No int

con la siguiente información:

Código:
Fecha	        Descripción    No
2015-01-01	Enero	    1
2015-02-01	Febrero	    2
2015-03-01	Marzo	    3
2015-04-01	Abril	            4
2015-05-01	Mayo	            5
2015-06-01	Junio	            6
2015-07-01	Julio	            7
2015-08-01	Agosto	    8
2015-09-01	Septiembre   9
2015-10-01	Octubre	   10
2015-11-01	Noviembre	   11
2015-12-01	Diciembre	   12

Además tengo una tabla llamada procedimientos y en la misma hay varios tipos de nóminas (Empleados fijos, vacaciones y licencias entre otras).

Adjunto la estructura:

No int
Descripcion_del_Procedimiento nvarchar(255)
Fecha date
Cantidad_de_registros int
Monto float


y algunos registros de ejemplo

Código:
Descripcion del¨Procedimiento	                Monto	        Cantidad_de_registros	Fecha
Generación de Nómina Bono Vacacional	562502.15	        38	                               23/01/2015
Generación de Nómina Empleados Fijos	52981362.56	2057	                               23/01/2015
Generación de Nómina Empleados Fijos	53163587.86	2060	                               23/12/2014
Generación de Nómina Bono Vacacional	0	                0	                               04/12/2014

El problema es este código que me esta dando dolor de cabeza:

Código Delphi [-]

procedure TForm1.Button1Click(Sender: TObject);
var
STRSQL: string;
begin


STRSQL := 'SET LANGUAGE Spanish; ' +
' select fechas.No,  datename(month, fechas.fecha) Fecha,'+

//Campo con la fecha escrita manual (2014-12-01)   y   (2015-01-31)
'   (select  sum(empcant.Cantidad_de_registros) from  Procedimientos empcant  where (datename(month, fechas.fecha) = datename(month, empcant.fecha)) and empcant.Descripcion_del_Procedimiento like ''%Nómina Empleados Fijos%'''+
' and (empcant.Fecha >= ''2014-12-01'' and empcant.Fecha <=   ''2015-01-31'' )) CantidadEmpleado, '+

//Campo con la fecha elegida con dos datetimepicker llamado fechadesde y fechahasta.

'   (select  sum(emp.monto) from  Procedimientos emp  where (datename(month, fechas.fecha) = datename(month, emp.fecha)) and emp.Descripcion_del_Procedimiento like ''%Nómina Empleados Fijos%'''+
' and (emp.Fecha >= :fechadesde and emp.Fecha <= :fechahasta)) MontoEmpleado '+



' from fechas fechas '+
' group by datename(month, fechas.fecha), fechas.No order by fechas.No asc ';




query_procedimientos.Close;
query_procedimientos.SQL.Clear;
query_procedimientos.SQL.Text := STRSQL;
query_procedimientos.Parameters.ParamByName('fechadesde').Value :=   FormatDateTime('yyyy-mm-dd', Fechadesde.date);
query_procedimientos.Parameters.ParamByName('fechahasta').Value :=   FormatDateTime('yyyy-mm-dd', fechahasta.date);
query_procedimientos.Open;
//' and Upper('+ComboBox1.Text+') LIKE Upper(' + QuotedStr('%' + txtBuscar.Text + '%') + ')' +



end;

Si ejecuto el sql anterior funciona a la perfección.

Cual es el problema?

Si pueden observar en el código SQL está esto:

Código SQL [-]
'   (select  sum(empcant.Cantidad_de_registros) from  Procedimientos empcant  where (datename(month, fechas.fecha) = datename(month, empcant.fecha)) and empcant.Descripcion_del_Procedimiento like ''%Nómina Empleados Fijos%'''+
' and (empcant.Fecha >= ''2014-12-01'' and empcant.Fecha <=   ''2015-01-31'' )) CantidadEmpleado, '+
en la cual las fechas están digitadas de forma manual y en el siguiente código están elegidos con los datetimepicker

Código SQL [-]
'   (select  sum(emp.monto) from  Procedimientos emp  where (datename(month, fechas.fecha) = datename(month, emp.fecha)) and emp.Descripcion_del_Procedimiento like ''%Nómina Empleados Fijos%'''+
' and (emp.Fecha >= :fechadesde and emp.Fecha <= :fechahasta)) MontoEmpleado '+


pero si cambio donde están las fechas digitadas manual por :fechadesde y :fechahasta me sale el siguiente error:


"Objeto Parameter mal definido. Se proporcionó información incompleta o incoherente."

Podrían ayudarme a solucionarlo?

Gracias de antemano por su ayuda.

Saludos.
__________________
Cristo te ama, ven a d él, ya k te espera con los brazos abiertos. Dios te bendiga mucho
Responder Con Cita
  #2  
Antiguo 10-02-2015
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.233
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Código Delphi [-]
query_procedimientos.Close;
query_procedimientos.SQL.Clear;
query_procedimientos.SQL.Text := STRSQL;
query_procedimientos.Parameters.ParamByName('fechadesde').Value :=   FormatDateTime('yyyy-mm-dd', Fechadesde.date);
query_procedimientos.Parameters.ParamByName('fechahasta').Value :=   FormatDateTime('yyyy-mm-dd', fechahasta.date);
query_procedimientos.Open;

Lo que no entiendo es que si estás usando parámetros y son de tipo fecha, fueerzas el formato a uno determinado.
Lo lógico sería enviar la fecha y que el driver lo formatee como sea necesario.

Código Delphi [-]
...
query_procedimientos.Parameters.ParamByName('fechadesde').AsDateTime := Fechadesde.date;
query_procedimientos.Parameters.ParamByName('fechahasta').AsDateTime := fechahasta.date;
...
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #3  
Antiguo 10-02-2015
Avatar de jeremiselxi
jeremiselxi jeremiselxi is offline
Miembro
 
Registrado: ago 2008
Posts: 199
Poder: 16
jeremiselxi Va por buen camino
Cita:
Empezado por Neftali Ver Mensaje
Código Delphi [-]
query_procedimientos.Close;
query_procedimientos.SQL.Clear;
query_procedimientos.SQL.Text := STRSQL;
query_procedimientos.Parameters.ParamByName('fechadesde').Value :=   FormatDateTime('yyyy-mm-dd', Fechadesde.date);
query_procedimientos.Parameters.ParamByName('fechahasta').Value :=   FormatDateTime('yyyy-mm-dd', fechahasta.date);
query_procedimientos.Open;

Lo que no entiendo es que si estás usando parámetros y son de tipo fecha, fueerzas el formato a uno determinado.
Lo lógico sería enviar la fecha y que el driver lo formatee como sea necesario.

Código Delphi [-]
...
query_procedimientos.Parameters.ParamByName('fechadesde').AsDateTime := Fechadesde.date;
query_procedimientos.Parameters.ParamByName('fechahasta').AsDateTime := fechahasta.date;
...

muchísimas Gracias Neftalí.

Saludos
__________________
Cristo te ama, ven a d él, ya k te espera con los brazos abiertos. Dios te bendiga mucho
Responder Con Cita
  #4  
Antiguo 10-03-2015
weltonsee4 weltonsee4 is offline
Registrado
NULL
 
Registrado: mar 2015
Posts: 1
Poder: 0
weltonsee4 Va por buen camino
En la instrucción SrtToDate veo que se le puede pasar el formato como parámetro pero.. ¿hay alguna forma de configurar este de una forma global para que el código funcione tal y como está?





________________________________
see
Responder Con Cita
  #5  
Antiguo 10-03-2015
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

Explícate mejor, creo que no se entiende bien lo que comentas.
Por cierto, bienvenido a clubdelphi, como siempre aconsejamos a los nuevos, no olvides leer nuestra guía de estilo, gracias por tu colaboración
Responder Con Cita
  #6  
Antiguo 10-03-2015
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
Cita:
Empezado por weltonsee4 Ver Mensaje
En la instrucción SrtToDate veo que se le puede pasar el formato como parámetro pero.. ¿hay alguna forma de configurar este de una forma global para que el código funcione tal y como está?
see
Si se puede. Que version de delphi? Hay un record que tiene toda la configuracion regional de windows y podes modificarlo

TFormatSettings
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
Problemas: consulta por fechas con parametros radiohead Conexión con bases de datos 0 06-08-2007 14:07:37
Problemas con una consulta de fechas tiagor64 SQL 6 08-02-2005 21:52:04
Consulta por fechas omy SQL 2 16-12-2003 20:40:14
Consulta de fechas YolandaM SQL 6 26-07-2003 22:10:34
Consulta con Fechas cmgenny SQL 8 20-06-2003 22:48:25


La franja horaria es GMT +2. Ahora son las 10:37:01.


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