![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как составить динамический запрос? [D6, IB6.x]
NightCon © (2002-10-15 12:09:00)Вся проблема в том что в запрос может входить разноечисло полей. Выглядит это примерно так: на форме запроса ставится галочка (CheckBox) напротив поля, и вводится значение.
Nikolay M. (2002-10-15 16:02:00) [1]
> gek © (15.10.02 15:28)
> приведи реальный код, а именно на
> select * from table where 1
А что именно не нравится? Синтаксис запроса? Он будет разным, в зависимости от СУБД. MySQL, например, на "select * from table where 1" выдаст целиком всю таблицу. В IB, наверное, нужно писать "select * from table where true" или любое другое незначащее условие, вроде "1=1". Или вопрос по поводу кода, формирующего запрос? Вот твой вариант, в котором добавлено всего 4 символа:
var
s:string
begin
s:="select * from table where 1";
if (CheckBox1.Checked)
s:=s + " ANDpole1 =2"
else
if (CheckBox2.Checked)
s:=s + "AND pole2 =20"
........
else
if (CheckBox3.Checked)
s:=s + "AND pole3 =4"
gek (2002-10-15 15:28:00) [2]приведи реальный код, а именно
на
select * from table where 1
select * from table where true
это как же такое может работать?
Nikolay M. (2002-10-15 15:23:00) [3]
> NightCon © (15.10.02 12:56)
> select * from table where and pole2=y and pole3=z;
> вот на такую строку запроса IMHO выпадет ошибка.
А я обычно формирую перед циклом или таким вот списком условий не строку "select * from table where", а "select * from table where 1", а дальше не думая добавляю условия " and fieldN="valueN"". Даже если не пройдет ни одно из условий, запрос будет синтаксически правильный (select * from table where 1) и не нужно вбивать костыли вроде флага или replace-а.
ПС
Ну, ессесно с поправками, что может быть не "1", а "true", грамотно расставить скобки, чтобы не получилось "where 1 orfield1="value1" andfield2="value2"". Это уже нюансы :)
gek (2002-10-15 13:40:00) [4]> Alexandr © (15.10.02 13:32)
Саня, не кипятись.
Alexandr (2002-10-15 13:39:00) [5]я спокоен.
Просто некоторые меня выводят.
Ну не понимаю я их, как врочем и хоккей ;)
Max Zyuzin (2002-10-15 13:36:00) [6]Сорри за оффтоп.
Max Zyuzin (2002-10-15 13:36:00) [7]Алекс, успокойся :)) Сходи на хоккей :))
Alexandr (2002-10-15 13:32:00) [8]бля,
replacestr(s, "where and" "where");
ну что, уж так трудно сообразить?
Alexandr (2002-10-15 13:30:00) [9]а на форуме кричать "Я ДУРАК потому что не могу решить элементарную задачку, что говорит о том, что в школе я учился исключительно плохо" красиво?
Мой тебе совет: пей поменьше "вотки" пока не поздно...
Ну все пора останавливаться, а то меня понесло...
gek (2002-10-15 13:27:00) [10]А вот и ни черта, если будет
select * from table where and pole2=y and pole3=z;
а затем - replacestr(s, "where and" "and");
то получим
select * from table and pole2=y and pole3=z;
тогда уж надо
replacestr(s, "where and" "");
Alexandr (2002-10-15 13:26:00) [11]да, и еще хочу добавить.
Пока эту задачу не научишься решать минимум 5 алгоритмически разными способами при этом с первого раза, без ошибок компиляции и исполнения, к программированию реальных задач не приступай.
NightCon (2002-10-15 13:23:00) [12]Все уже разобрался...
2Alexandr: и это по-твоему красиво?
novill (2002-10-15 13:21:00) [13]AlexandrRULEZZZ!!!
Alexandr (2002-10-15 13:14:00) [14]нет просто надо было в всое время в школе тоже красиво код писать а не тяп ляп.
Тут же все проще паренной репы.
А вы развели флейм.
2NightCon: если уж совсем руки не оттдута растут, то после того как получишь select * from table where and pole2=y and pole3=z;
примени патч replacestr(s, "where and" "and");
gek (2002-10-15 13:03:00) [15]Ну ешки-матрешки
var
s,s1,s2:string
bool:boolean;
begin
bool:=false;
s:="select * from table ";
s2:="where ";
if (CheckBox1.Checked)
begin
bool:=true;
s1:=s1 + " pole1 =2";
end
.........
if bool then
s:=s + s2 + s1
NightCon (2002-10-15 12:56:00) [16]2 GEK:
CheckBox1.Checked = False;
CheckBox2.Checked = True;
=>
select * from table where and pole2=y and pole3=z;
вот на такую строку запроса IMHO выпадет ошибка.
2 Alexandr
А хочется сделать красиво, а не в лоб как в школе...
Alexandr (2002-10-15 12:43:00) [17]ну и что...
в чем проблема? Такие задачки изучают еще в школе на уроках программирования...
NickBat (2002-10-15 12:39:00) [18]все равно никакой проблемы:
if CheckBox then
... добавляешь свое условие.
gek (2002-10-15 12:39:00) [19]var
s:string
begin
s:="select * from table where ";
if (CheckBox1.Checked)
s:=s + " pole1 =2"
else
if (CheckBox2.Checked)
s:=s + "AND pole2 =20"
........
else
if (CheckBox3.Checked)
s:=s + "AND pole3 =4"
см Наталия © (15.10.02 12:23)
Max Zyuzin (2002-10-15 12:38:00) [20]Ну и какая разница?
в цикле добавляй строки
pole1 = x;
Или вы не знаете как проити в цикле по всем CheckBox..??