Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.05.07;
Скачать: CL | DM;

Вниз

Запрос за период в ADO к Paradox путает день с месяцем   Найти похожие ветки 

 
newby   (2006-03-10 15:29) [0]

На форме есть два стандартных DateTimePicker"a для выбора периода.
Вот код:

procedure TForm1.FormCreate(Sender: TObject);
begin
 DateSeparator := ".";
 ShortDateFormat := "dd.mm.yyyy";
 //ShortDateFormat := "yyyy.mm.dd";
 ShortTimeFormat := "hh.mm:ss";

 ADODatabase1.Connected := true;
 DataSource1.DataSet.Active := false;
 DataSource2.DataSet.Active := false;

 DateTimePicker1.Date := Date - 7; && по умолчанию при запуске
 DateTimePicker2.Date := Date;

 ADOQuery1.SQL.Clear;
 ADOQuery1.SQL.Text :=
   "Select * From Nakl Where NaklData >= :Date1 and NaklData <= :Date2 Order By Code DESC";

 ADOQuery1.ParamByName("Date1").ParamType := ptInput;
 ADOQuery1.ParamByName("Date1").DataType := ftDate;
 ADOQuery1.ParamByName("Date2").ParamType := ptInput;
 ADOQuery1.ParamByName("Date2").DataType := ftDate;
 ADOQuery1.ParamByName("Date1").Value := DateToStr(DateTimePicker1.Date);
 ADOQuery1.ParamByName("Date2").Value := DateToStr(DateTimePicker2.Date);

//  ADOQuery1.SQL.Text :=
//    "Select * From Nakl Where NaklData >= "20060301" and NaklData <= "20060310" Order By Code DESC";

 DataSource1.DataSet.Active := true;
 DataSource2.DataSet.Active := true;
end;

Но работает странно.
Если указать диапазон с 1 марта (01.03.2006) по 10 марта (10.03.2006), то выбираются записи с 03 января (03.01.2006).
Т.е. получается что день и месяц престаляются местами.
Где выход?


 
Desdechado ©   (2006-03-10 15:32) [1]

это не запрос путает, а ты его путаешь вот этими строками
ADOQuery1.ParamByName("Date1").Value := DateToStr(DateTimePicker1.Date);
ADOQuery1.ParamByName("Date2").Value := DateToStr(DateTimePicker2.Date);

надо
ADOQuery1.ParamByName("Date1").Value := DateTimePicker1.Date;
ADOQuery1.ParamByName("Date2").Value := DateTimePicker2.Date;


 
newby   (2006-03-10 15:46) [2]

Ой, извините, я после разных "экспериментов" вставил не рабочий вариант, а "экспериментируемый", запутался и я блин :)

Вот реальный код для подстановки периода в параметры:

   ADOQuery1.ParamByName("Date1").AsDate := DateTimePicker1.Date;
   ADOQuery1.ParamByName("Date2").AsDate := DateTimePicker2.Date;

Вот в нем все и путается.


 
newby   (2006-03-10 15:56) [3]

Забыл указать провайдера:
Microsoft.Jet.OLEDB.4.0
Extended Properties=Paradox 7.x


 
newby   (2006-03-10 16:03) [4]

поле NaklData тип DateTime, но времени там нет
пробую и так результат все тот же :(

   ADOQuery1.SQL.Text :=
     "Select * From Nakl Where (NaklData >= :Date1) and (NaklData <= :Date2) Order By NaklData DESC, Code DESC";

   ADOQuery1.ParamByName("Date1").ParamType := ptInput;
   ADOQuery1.ParamByName("Date1").DataType := ftDateTime;
   ADOQuery1.ParamByName("Date2").ParamType := ptInput;
   ADOQuery1.ParamByName("Date2").DataType := ftDateTime;

   ADOQuery1.ParamByName("Date1").AsDateTime := DateTimePicker1.DateTime;
   ADOQuery1.ParamByName("Date2").AsDateTime := DateTimePicker2.DateTime;


 
newby   (2006-03-10 16:07) [5]

Попробовал и функцию BETWEEN, увы :(
   ADOQuery1.SQL.Text :=
     "Select * From Nakl Where NaklData Between :Date1 and :Date2 Order By NaklData DESC, Code DESC";


 
sniknik ©   (2006-03-10 21:52) [6]

> Т.е. получается что день и месяц престаляются местами.
не надо использовать строковые значения, для дат есть даты. при конвертации слишком от многого зависит, что где воспримет, легко запутаться.

> пробую и так результат все тот же :(
врать не надо... так ты пробовать не мог...  вернее мог, но результат тогда бы был совсем другой - "ошибка на этапе компиляции".

p.s. сделай нормально, и все получится.


 
ЮЮ ©   (2006-03-14 03:47) [7]

то выбираются записи с 03 января (03.01.2006).

Уверен? Там и за 05.01.06 присутствуют?

Может они просто так отображаются? Добавь EXTRACT(MONTH FROM NaklData) и убедись, январь это или март. ShortDateFormat, ИМНО, влияет на  DateTimePicker, а не на отображение данных в гриде.


 
newby   (2006-03-15 16:19) [8]

to ЮЮ
да, там присутствуют записи и за январь и за февраль, и месяц показывает в этих случаях 1 и 2 :(


 
newby   (2006-03-15 16:29) [9]

to sniknik
Извините, не упомянул что использую компоненты ADONIS


 
newby   (2006-03-15 17:29) [10]

Попробовал на стандартном ADO
если тип параметра ftDateTime - то таже ситуация,
а вот если ftFixedChar - то c датами все ОК! Хех :)


 
newby   (2006-03-15 17:38) [11]

Сорри, забыл добавить, что в случае с ftFixedChar
строка присвоения параметра выглядит так:

ADOQuery1.Parameters[0].Value := DateToStr(DateTimePicker1.Date);


 
newby   (2006-03-15 17:47) [12]

Все же проблема с датами не решена, строка - это обходной путь и значит  временный, до нахождения причины.
Будем разбираться...



Страницы: 1 вся ветка

Текущий архив: 2006.05.07;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.025 c
10-1118131658
-: MaxiM :-
2005-06-07 12:07
2006.05.07
F1 BOOK


15-1145126517
Loginov Dmitry
2006-04-15 22:41
2006.05.07
Сюрприз, однако


8-1134149328
Dark Lord
2005-12-09 20:28
2006.05.07
Гитарный тюнер на Дельфи


2-1145478801
Niko
2006-04-20 00:33
2006.05.07
как отобрать фокус ))


6-1137685582
Ibrox
2006-01-19 18:46
2006.05.07
Трафик