Главная страница
    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.47 MB
Время: 0.012 c
3-1142223627
anubis
2006-03-13 07:20
2006.05.07
Работа БД Парадокс с Екселем


2-1145269028
Leshas
2006-04-17 14:17
2006.05.07
Математическое приложение - разбор формулы


2-1144849520
ANB
2006-04-12 17:45
2006.05.07
Как правильно зарегить плагин к 1С ?


6-1137681624
Volf_555
2006-01-19 17:40
2006.05.07
Как из кода html выделить только текст?


15-1145130006
homm
2006-04-15 23:40
2006.05.07
Мой первый проект на PHP :)





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский