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

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

Выборка по датам [D7, Access]


Павел ©   (2011-05-14 08:26:00) 

Здравствуйте. У меня есть БД в Access,соединил ее с Delphi. Значит имеется 4 таблицы. В одной из них матчи с датами команды. Хочу сделать выборку по датам через DateTimePicker1 и 2,но не получается. Задаем период в этих DateTimePicker1 и 2 и должен в DBGrid выходить список матчей за период.

есть код:(здесь я сделал min и max парам-ры,которые подставляются в DateTimePicker1 и DateTimePicker2. Верно ж?)
procedure TForm1.FormActivate(Sender: TObject);
begin
ADOQuery3.Close;
ADOQuery3.SQL.Text:='select min(date),max(date) from Igra';
ADOQuery3.Open;
DateTimePicker1.Date:=ADOQuery3.Fields[0].asdatetime;
DateTimePicker2.Date:=ADOQuery3.Fields[1].asdatetime;
end;

А вот это я списал:
procedure TForm1.CentralPoint;(написано,что эта процедура введена для концентрации всей логики SQL-запроса в одном месте программы)
begin
ADOQuery3.Close;
ADOQuery3.SQL.Text:=
'select*from igra where ((date is null)or((date>=:dt1)'+'and (date<=:dt2)))';
ADOQuery3.parameters[0].value:=DateTimePicker1.DateTime;
ADOQuery3.parameters[1].value:=DateTimePicker2.DateTime;
ADoQuery3.open;
end;

Я весь код этот пишу,запускаю программу и таблица с матчами пустая. Ну и соответственно выборка не идет( Мб как-нибудь другим способом можно решить? Предполагаю,что ошибка мб тут:SQL.Text:=
'select*from igra where ((date is null)or((date>=:dt1)'+'and (date<=:dt2)))',но не вижу ее.


Anatoly Podgoretsky   (2011-05-18 08:53:00) [1]

> Плохиш  (17.05.2011 22:33:15)  [15]

И даже база не обязательна. Кроме того они козлы его сделали с права на
лево.


Плохиш   (2011-05-17 22:33:00) [2]


> Конечно козлы, придумали Акцесс и практически почти все
> функии в VBA.

Они ваще уже LINQ придумали, теперь батонокидателям и sql-я знать не надо.


Anatoly Podgoretsky   (2011-05-16 23:58:00) [3]

> Petr V. Abramov  (16.05.2011 21:54:12)  [12]

Конечно козлы, придумали Акцесс и практически почти все функии в VBA. Наружу
только несколько статистических функций


sniknik   (2011-05-16 22:48:00) [4]

> ну небось называется как-нить по-другому
iif + isNull
но оно и работает "немного" по другому, "красиво" не получится.


Petr V. Abramov   (2011-05-16 21:54:00) [5]


> sniknik ©   (15.05.11 16:48) [11]
>
> > работает в nvl access
> nvl работает в access ...
>

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


sniknik   (2011-05-15 16:48:00) [6]

> работает в nvl access
nvl работает в access ...


sniknik   (2011-05-15 16:47:00) [7]

> тогда уж between nvl(:dt1, '09.05.1945') and nvl(:dt2, '12.12.2012')
работает в nvl access и не работает в jet...


Petr V. Abramov   (2011-05-15 15:57:00) [8]


> where ((:dt1 is null) or (date between :dt2 and :dt3))

тогда уж between nvl(:dt1, '09.05.1945') and nvl(:dt2, '12.12.2012')


Ega23   (2011-05-15 09:50:00) [9]

where ((date is null)or
Есть смутное подозрение, что тут должно быть что-то типа
where ((:dt1 is null) or (date between :dt2 and :dt3))
Ну и оперировать параметрами, хочешь всё - первый параметр ставишь null,
хочешь период - первый параметр ставишь не нулл, второй и третий - период.
Как-то так, хотя возможно, что я пока не проснулся.. :)


Павел   (2011-05-14 10:36:00) [10]


> А CentralPoint когда работает?

он ваще не работает...просто в программе есть несколько критериев выбора(по дате,через ComboBox) и эта процедура была введена для обобщения получается в одном месте программы.


sniknik   (2011-05-14 10:03:00) [11]

в дататайме есть время... избавься от него в дататаймпикере, ну и даты задавать нужно периодом, а не один день. типа того, в общем -

ADOQuery3.parameters.ParamByName('dt1').value:= Trunc(DateTimePicker1.DateTime);
ADOQuery3.parameters.ParamByName('dt2').value:= Trunc(DateTimePicker2.DateTime) + 1;


Anatoly Podgoretsky   (2011-05-14 10:02:00) [12]

> Павел  (14.05.2011 08:26:00)  [0]

Для первого - не может быть одновременно и min, и max
Для второго - не может быть больше dt1 и одновременно меньше dt2 при
одинаковой базе
Третье это форум по использованию Дельфи, а не по программированию в
конкретной СУБД


Anatoly Podgoretsky   (2011-05-14 10:02:00) [13]

Забыл сказать резюме - с этим в SQL школу


adigozelov   (2011-05-14 09:53:00) [14]

Ti pisis vot
DateTimePicker1.DateTime
pisi
prosta
DateTimePicker1.Date

Patamusta yesli pasmotris "object isispektor" property time na DateTimePicker1  ili
DateTimePicker2 to vidish shto tam yes naprimeer '01:01:49'.
yes 2 variant Problema dumuyu ya
napisi
prosta DateTimePicker1.Date,DateTimePicker2.Date

ili

zdeliy v "object isispektor" property time na DateTimePicker1 i DateTimePicker2
'00:00:00'
Vot tak
DateTimePicker1.time = '00:00:00'
DateTimePicker2.time = '00:00:00'


b z   (2011-05-14 09:38:00) [15]


> Верно ж?
Нет, оно ваще не нужно.

> date is null
это плохо. У события всегда есть дата.
А CentralPoint когда работает?


Galera   (2011-05-14 09:12:00) [16]

Даты случайно местами не перепутал? Поменяй местами dt1 и dt2
типа:
'select*from igra where ((date is null)or((date>=:dt2)'+'and (date<=:dt1)))',


Наверх

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