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,'+
' (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, '+
' (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;
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.