Текущий архив: 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