-
Здравствуйте. У меня есть БД в 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)))',но не вижу ее.
-
Даты случайно местами не перепутал? Поменяй местами dt1 и dt2 типа: 'select*from igra where ((date is null)or((date>=:dt2)'+'and (date<=:dt1)))',
-
> Верно ж? Нет, оно ваще не нужно.
> date is null это плохо. У события всегда есть дата. А CentralPoint когда работает?
-
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'
-
> Павел (14.05.2011 08:26:00) [0]
Для первого - не может быть одновременно и min, и max Для второго - не может быть больше dt1 и одновременно меньше dt2 при одинаковой базе Третье это форум по использованию Дельфи, а не по программированию в конкретной СУБД
-
Забыл сказать резюме - с этим в SQL школу
-
в дататайме есть время... избавься от него в дататаймпикере, ну и даты задавать нужно периодом, а не один день. типа того, в общем - ADOQuery3.parameters.ParamByName('dt1').value:= Trunc(DateTimePicker1.DateTime);
ADOQuery3.parameters.ParamByName('dt2').value:= Trunc(DateTimePicker2.DateTime) + 1;
-
> А CentralPoint когда работает?
он ваще не работает...просто в программе есть несколько критериев выбора(по дате,через ComboBox) и эта процедура была введена для обобщения получается в одном месте программы.
-
where ((date is null)or Есть смутное подозрение, что тут должно быть что-то типа where ((:dt1 is null) or (date between :dt2 and :dt3)) Ну и оперировать параметрами, хочешь всё - первый параметр ставишь null, хочешь период - первый параметр ставишь не нулл, второй и третий - период. Как-то так, хотя возможно, что я пока не проснулся.. :)
-
> where ((:dt1 is null) or (date between :dt2 and :dt3))
тогда уж between nvl(:dt1, '09.05.1945') and nvl(:dt2, '12.12.2012')
-
> тогда уж between nvl(:dt1, '09.05.1945') and nvl(:dt2, '12.12.2012') работает в nvl access и не работает в jet...
-
> работает в nvl access nvl работает в access ...
-
> sniknik © (15.05.11 16:48) [11] > > > работает в nvl access > nvl работает в access ... >
ну небось называется как-нить по-другому, не верю я, что МС - такие казлы :)
-
> ну небось называется как-нить по-другому iif + isNull но оно и работает "немного" по другому, "красиво" не получится.
-
> Petr V. Abramov (16.05.2011 21:54:12) [12]
Конечно козлы, придумали Акцесс и практически почти все функии в VBA. Наружу только несколько статистических функций
-
> Конечно козлы, придумали Акцесс и практически почти все > функии в VBA.
Они ваще уже LINQ придумали, теперь батонокидателям и sql-я знать не надо.
-
> Плохиш (17.05.2011 22:33:15) [15]
И даже база не обязательна. Кроме того они козлы его сделали с права на лево.
|