Конференция "Начинающим" » Выборка данных по неизвестному кол.параметров
 
  • Крылов И.В. (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. // Если результат не удовлетворил, использовать отладчик
 
Конференция "Начинающим" » Выборка данных по неизвестному кол.параметров
Есть новые Нет новых   [96152   +68][b:0.001][p:0.001]