Мастера DELPHI, Delphi programming community Рейтинг@Mail.ru Титульная страница Поиск, карта сайта Написать письмо 
| Новости |
Новости сайта
Поиск |
Поиск по лучшим сайтам о Delphi
FAQ |
Огромная база часто задаваемых вопросов и, конечно же, ответы к ним ;)
Статьи |
Подборка статей на самые разные темы. Все о DELPHI
Книги |
Новинки книжного рынка
Новости VCL
Обзор свежих компонент со всего мира, по-русски!
|
| Форумы
Здесь вы можете задать свой вопрос и наверняка получите ответ
| ЧАТ |
Место для общения :)
Орешник
Коллекция курьезных вопросов из форумов
Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / rsdn.org

 
Чтобы не потерять эту дискуссию, сделайте закладку « предыдущая ветвь | форум | следующая ветвь »
Страницы: 1 2

Выборка данных по неизвестному кол.параметров


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

Здравствуйте мастера! Нужно в программе сделать выборку данных по некоторому количеству параметров которое задает пользователь во время работы. Пробовал сделать в цикле так:
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]


ну да


Страницы: 1 2 версия для печати

Написать ответ

Ваше имя (регистрация  E-mail 







Разрешается использование тегов форматирования текста:
<b>жирный</b> <i>наклонный</i> <u>подчеркнутый</u>,
а для выделения текста программ, используйте <code> ... </code>
и не забывайте закрывать теги! </b></i></u></code> :)


Наверх

  Рейтинг@Mail.ru     Титульная страница Поиск, карта сайта Написать письмо