Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Запрос за период в ADO к Paradox путает день с месяцем [D7, dBase, FoxPro]


newby ©   (2006-03-10 15:29:00) 

На форме есть два стандартных 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 = "20060301" and NaklData


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

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


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

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

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


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

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


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

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


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

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


ЮЮ   (2006-03-14 03:47:00) [6]

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

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

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


sniknik   (2006-03-10 21:52:00) [7]

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

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

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


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

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


newby   (2006-03-10 16:03:00) [9]

поле 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 15:56:00) [10]

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


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

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

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

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

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


Desdechado   (2006-03-10 15:32:00) [12]

это не запрос путает, а ты его путаешь вот этими строками
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;


Наверх

Титульная страница Поиск, карта сайта Написать письмо