При передаче даты из delphi в mssql, сдвигается дата

  • Автор темы Boatswain
  • Дата начала
B

Boatswain

Доброго времени суток.
Есть Delphi 7 +SDAC и MSSQL 2005 SQLExpress.
При передаче даты из Delphi в MSSQL, сдвигается дата, никак не пойму почему и как с этим бороться.((

Из Delphi передается:

var
StartDate:TDateTime;
EndDate:TDateTime;
..........
StartDate:=StartOfAMonth(seSYear.Value,cbSMonth.ItemIndex+1);
EndDate:=EndOfAMonth(seEYear.Value,cbEMonth.ItemIndex+1);
.......
spReport.Params[2].AsDateTime:=StartDate;
spReport.Params[3].AsDateTime:=EndDate;
.......
spReport.Open;

Если, например, здесь на выходе параметры 01.01.2014 и 31.12.2014, то в MSSQL они уже 03.01.2014 и 03.01.2015
Если написать
startdate:=StrToDate('01.01.2014'); enddate:=StrToDate('31.12.2014');
эффект тотже.
В общем любую дату сдвигает на 3 дня вперед.

Кусок процедуры:
....
@StartPayDate smalldatetime,
@EndPayDate smalldatetime
.....
select *
from mytable
where paydate>=@StartPayDate and paydate<=@EndPayDate

Заранее благодарен за ответ.
 
M

-master-

а как вы поняли что идет смещение
 
S

sinkopa

Доброго времени суток.
Есть Delphi 7 +SDAC и MSSQL 2005 SQLExpress.
При передаче даты из Delphi в MSSQL, сдвигается дата, никак не пойму почему и как с этим бороться.((
spReport.Params[2].AsDateTime:=StartDate;
.....
@StartPayDate smalldatetime,
@EndPayDate smalldatetime
Ну вообще говоря тема то гугло-избитая ... если говорить об DATETIME применительно MSSQL.
тут много нюансов...
Если коротко резюмировать "матчасть", то единственным "безнюансовым" вариантом передачи даты/времени MSSQL-ю , является явная передача в виде строки в формате ISO (родной формат MSSQL)

Учитывая что у Вас в процедуре используется smalldatetime, попробуйте передавать параметр как строковый
Код:
spReport.Params[2].AsString := FormatDateTime('yyyy-mm-dd hh:nn:ss',[StartDate]);
spReport.Params[3].AsString := FormatDateTime('yyyy-mm-dd hh:nn:ss',[EndDate]);
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!