Конференция "Базы" » Выборка по датам [D7, Access]
 
  • Павел (14.05.11 08:26) [0]
    Здравствуйте. У меня есть БД в 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)))',но не вижу ее.
  • Galera (14.05.11 09:12) [1]
    Даты случайно местами не перепутал? Поменяй местами dt1 и dt2
    типа:
    'select*from igra where ((date is null)or((date>=:dt2)'+'and (date<=:dt1)))',
  • b z (14.05.11 09:38) [2]

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

    > date is null
    это плохо. У события всегда есть дата.
    А CentralPoint когда работает?
  • adigozelov © (14.05.11 09:53) [3]
    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'
  • Anatoly Podgoretsky © (14.05.11 10:02) [4]
    > Павел  (14.05.2011 08:26:00)  [0]

    Для первого - не может быть одновременно и min, и max
    Для второго - не может быть больше dt1 и одновременно меньше dt2 при
    одинаковой базе
    Третье это форум по использованию Дельфи, а не по программированию в
    конкретной СУБД
  • Anatoly Podgoretsky © (14.05.11 10:02) [5]
    Забыл сказать резюме - с этим в SQL школу
  • sniknik © (14.05.11 10:03) [6]
    в дататайме есть время... избавься от него в дататаймпикере, ну и даты задавать нужно периодом, а не один день. типа того, в общем -

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

  • Павел (14.05.11 10:36) [7]

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

    он ваще не работает...просто в программе есть несколько критериев выбора(по дате,через ComboBox) и эта процедура была введена для обобщения получается в одном месте программы.
  • Ega23 © (15.05.11 09:50) [8]
    where ((date is null)or


    Есть смутное подозрение, что тут должно быть что-то типа
    where ((:dt1 is null) or (date between :dt2 and :dt3))


    Ну и оперировать параметрами, хочешь всё - первый параметр ставишь null,
    хочешь период - первый параметр ставишь не нулл, второй и третий - период.
    Как-то так, хотя возможно, что я пока не проснулся.. :)
  • Petr V. Abramov © (15.05.11 15:57) [9]

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

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

  • sniknik © (15.05.11 16:47) [10]
    > тогда уж between nvl(:dt1, '09.05.1945') and nvl(:dt2, '12.12.2012')
    работает в nvl access и не работает в jet...
  • sniknik © (15.05.11 16:48) [11]
    > работает в nvl access
    nvl работает в access ...
  • Petr V. Abramov © (16.05.11 21:54) [12]

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

    ну небось называется как-нить по-другому, не верю я, что МС - такие казлы :)
  • sniknik © (16.05.11 22:48) [13]
    > ну небось называется как-нить по-другому
    iif + isNull
    но оно и работает "немного" по другому, "красиво" не получится.
  • Anatoly Podgoretsky © (16.05.11 23:58) [14]
    > Petr V. Abramov  (16.05.2011 21:54:12)  [12]

    Конечно козлы, придумали Акцесс и практически почти все функии в VBA. Наружу
    только несколько статистических функций
  • Плохиш © (17.05.11 22:33) [15]

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

    Они ваще уже LINQ придумали, теперь батонокидателям и sql-я знать не надо.
  • Anatoly Podgoretsky © (18.05.11 08:53) [16]
    > Плохиш  (17.05.2011 22:33:15)  [15]

    И даже база не обязательна. Кроме того они козлы его сделали с права на
    лево.
 
Конференция "Базы" » Выборка по датам [D7, Access]
Есть новые Нет новых   [134431   +13][b:0][p:0.001]