Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2006.05.07;
Скачать: [xml.tar.bz2];

Вниз

Запрос за период в 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.009 c
2-1145478801
Niko
2006-04-20 00:33
2006.05.07
как отобрать фокус ))


15-1145210601
Гарри Поттер
2006-04-16 22:03
2006.05.07
С edlm2.exe кто знаком?


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


15-1145001120
balepa
2006-04-14 11:52
2006.05.07
Как обратиться к переменной %SYSTEMROOT% ?


15-1144819407
ps123
2006-04-12 09:23
2006.05.07
Делал ли кто-нибудь на Дельфи аналог ERWin?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский