Конференция "Начинающим" » Выборка данных по неизвестному кол.параметров
 
  • Крылов И.В. (11.01.19 19:23) [0]
    Здравствуйте мастера! Нужно в программе сделать выборку данных по некоторому количеству параметров которое задает пользователь во время работы. Пробовал сделать в цикле так:
    for I := 1 to MyParamsCount
    begin
    MyData:='мои данные';
    IBQuery1.SQL.Add('(MYFIELD=:Name_param'+IntToStr(i)+')');
    IBQuery1.ParamByname('Name_param'+IntToStr(i)).AsString := MyData;
    end;
    где в переменную MyData(тип String) вношу нужные данные
    но в результате не получаю необходимый результат выборки.
    Как правильно реализовать эту процедуру?
  • manaka © (11.01.19 20:18) [1]
    А зачем в цикле?
  • Крылов И.В. (11.01.19 22:51) [2]
    По ходу работы программы кол.параметров меняется(выбирает пользователь)
    вот и решил менять размерность цикла по кол.параметров и вносить их так IBQuery1.SQL.Add но не работает. Как лучше сделать?
  • Крылов И.В. (12.01.19 14:45) [3]
    Может можно добавлять данные в DBGRID? Ну так чтобы результаты предыдущей выборки не пропали, тогда сделал бы последовательный перебор и вывод результатов по всем нужным параметрам...
  • Крылов И.В. (12.01.19 16:25) [4]
    может надо копать в сторону FOR SELECT DO?
  • ВладОшин © (12.01.19 19:52) [5]
    выведите  IBQuery1.SQL.Text куда-то посмотрите, правильно ли получается запрос
  • sniknik © (13.01.19 00:17) [6]
    > но в результате не получаю необходимый результат выборки.
    для правильного результата необходимо верно составить условие-задать значения..., а уж как, статически, динамически, в цикле - неважно.

    > MyData:='мои данные';
    в цикле? т.е. все параметры одно значение получают?
    кстати, еще чем смущает приведенный цикл, добавлением параметров+значение по одному... по идее это вызывает репарс запроса, и пересоздание переменных. т.е. первые значения занилятся, останется только последнее.
    попробуй разбить на 2 цикла, в первом добавь ВСЕ параметры, а уже после, во втором инициализируй их значениями.
  • Германн © (13.01.19 02:31) [7]
    Лично меня смущает получаемый в результате этого кода текст запроса
    "что-то" + '(MYFIELD=:Name_param'+IntToStr(1)+')'+'(MYFIELD=:Name_param'+IntToStr(2)+')'+'(MYFIELD=:Name_param'+IntToStr(3)+')'+...
  • ухты © (13.01.19 11:16) [8]

    > А зачем в цикле?
    а чтобы потом мучаться с запросами, дурное дело не хотрое
  • manaka © (13.01.19 22:53) [9]
    Повторюсь: зачем в цикле?
    есть ряд условий выборки: усл1, усл2, усл3
    почему вместо
     for i:=1 to 3 do условие=условие+усл(i);
    не сделать сразу
     условие=усл1.and.усл2.and.усл3
    ??????
  • niteshade © (15.01.19 06:29) [10]
    >manaka ©   (13.01.19 22:53) [9]
    потому что MyParamsCount не обязан быть равным 3
  • Плохиш © (15.01.19 14:49) [11]

    > Крылов И.В.   (11.01.19 19:23)  

    1. IBQuery1.Prepared = false;
    2. // перезаписать SQL
    3. // В цикле добавить параметры
    4. IBQuery1.Prepared = true;
    5. // В цикле присвоить значения параметрам
    6. // Если результат не удовлетворил, использовать отладчик
  • manaka © (20.01.19 16:28) [12]

    > niteshade ©   (15.01.19 06:29) [10]
    > >manaka ©   (13.01.19 22:53) [9]
    > потому что MyParamsCount не обязан быть равным 3


    да хоть 7.

    Кстати в цикле сработает условие a.and.b.and.c.and.d...
    А если пользователю надо ((a.and.b).or.(c.and.d)).or.e?
  • niteshade © (21.01.19 06:09) [13]
    >manaka ©   (20.01.19 16:28) [12]
    >да хоть 7.
    пример кода?
  • ухты © (22.01.19 00:08) [14]

    > пример кода?
     вы ниразу не видели код с 7 параметрами? или какой код..
  • niteshade © (22.01.19 06:42) [15]
    >ухты ©   (22.01.19 00:08) [14]
    например, sql-запрос с неизвестным заранее кол-вом параметров
    и как, в общем случае, его получить без цикла

    и, коли уж выступаете адвокатом manaka, поясните, откуда следует вот это:
    >Кстати в цикле сработает условие a.and.b.and.c.and.d...
  • ухты © (22.01.19 09:37) [16]
    MyParamsCount как получили? может там сразу и запрос составить, смотришь и цикл не нужен.
    И вообще тут похоже на поиски под фрнарем. Озвучте задачу, тогда и решать будем.
  • manaka © (22.01.19 15:02) [17]

    > niteshade ©   (22.01.19 06:42) [15]
    > и как, в общем случае, его получить без цикла


    условие=''

    пользователь задал усл1

    условие=усл1

    пользователь задал усл2

    условие=условие+".and."+усл2

    пользователь задал усл3

    условие=условие+".and."+усл3

    и т.д.
    Так можно?
  • niteshade © (23.01.19 06:18) [18]
    >manaka ©   (22.01.19 15:02) [17]
    т.е. после ввода пользователем условия, добавляем его (условие) к строке запроса?
  • manaka © (23.01.19 08:00) [19]

    > niteshade ©   (23.01.19 06:18) [18]


    ну да
  • niteshade © (23.01.19 08:34) [20]
    >manaka ©   (23.01.19 08:00) [19]
    два вопроса:
    1. в условиях "manaka ©   (22.01.19 15:02) [17]" пользователь удаляет усл2
    какова наша реакция?

    2. чем это лучше цикла?
  • manaka © (23.01.19 22:19) [21]

    > niteshade ©   (23.01.19 08:34) [20]


    1. можно придумать и это
    2. одно дело в цикле сразу составить условие выборки, другое - в цикле менять выборку каждый раз (как хотел автор)
  • niteshade © (24.01.19 05:42) [22]
    >manaka ©   (23.01.19 22:19) [21]
    >1. можно придумать и это
    можно
    зачем?

    >2. одно дело в цикле сразу составить условие выборки, другое - в цикле менять выборку каждый раз (как хотел автор)
    "одно дело", "другое дело"...
    можете в технических терминах сформулировать?
  • Плохиш © (26.01.19 16:34) [23]

    > manaka ©   (22.01.19 15:02) [17]

    До этого момента я ещё надеялся, что мы на форуме программистов.
 
Конференция "Начинающим" » Выборка данных по неизвестному кол.параметров
Есть новые Нет новых   [134427   +34][b:0][p:0.001]