con la primer opción sí hay que tener cuidado con la hora. Pero bastaría con ponerle la hora 00:00 a un datetimpicker y la hora 23:59 al otro y con eso ya no habría problema.
Con la conversión a cadena utilizando CONVERT, tampoco hay problema, ya que el estilo 112 de SQL Server no considera la hora.
Con las funciones Year y Month de SQL Server tampoco importa la hora:
Código Delphi
[-]
uses DateUtils;
...
SQL.Add('where Year(Fecha) = :Year and Month(Fecha) between :MesInicio and :mesFin');
Parameters.ParamByName('Year').Value := YearOf(UnDateTimePicker.Date);
Parameters.ParamByName('MesInicio').Value := MonthOf(UnDateTimePicker.Date);
Parameters.ParamByName('mesFin').Value := MonthOf(UnDateTimePicker.Date);
El problema con esta forma es cuando se queire consultar de diciembre de un año a un mes de otro año...
como verás, hay muuuuuuuuuchas opciones.
yo prefiero esta:
Código Delphi
[-]
...
SQL.Add('Where Fecha between :FechaInicio and :FechaFin');
...
parameters.parambyname('FechaInicio').Value := UnDateTimepIcker.Date;
parameters.parambyname('FechaFin').Value := OtroDateTimepIcker.Date;
poniendo la hora 00:00 a un datetimpicker y la hora 23:59 al otro