Форум: "Базы";
Текущий архив: 2002.11.04;
Скачать: [xml.tar.bz2];
ВнизКак составить динамический запрос? Найти похожие ветки
← →
NightCon (2002-10-15 12:09) [0]Вся проблема в том что в запрос может входить разное число полей. Выглядит это примерно так: на форме запроса ставится галочка (CheckBox) напротив поля, и вводится значение.
← →
Max Zyuzin (2002-10-15 12:22) [1]Ну и в чем проблемма?
В цикле проходите по всем вашим checkbox ам и добавляете связонное с ними имя поля в строку запроса...
← →
Наталия (2002-10-15 12:23) [2]with Query1 do
begin
active:=false;
sql.clear;
sql.add("select ");
if (условие) then sql.add("pole1,");
.....
sql.add("from table1")
active:=true;
end;
← →
NightCon (2002-10-15 12:34) [3]Наверна, я немного неправильно объяснил...
запрос будет выглядеть примерно так:
select * from table where
pole1 = x
pole2 = y
pole4 = z;
Т.е. может не быть pole1 и быть pole3.
← →
Max Zyuzin (2002-10-15 12:38) [4]Ну и какая разница?
в цикле добавляй строки
pole1 = x;
Или вы не знаете как проити в цикле по всем CheckBox..??
← →
gek (2002-10-15 12:39) [5]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)
← →
NickBat (2002-10-15 12:39) [6]все равно никакой проблемы:
if CheckBox then
... добавляешь свое условие.
← →
Alexandr (2002-10-15 12:43) [7]ну и что...
в чем проблема? Такие задачки изучают еще в школе на уроках программирования...
← →
NightCon (2002-10-15 12:56) [8]2 GEK:
CheckBox1.Checked = False;
CheckBox2.Checked = True;
=>
select * from table where and pole2=y and pole3=z;
вот на такую строку запроса IMHO выпадет ошибка.
2 Alexandr
А хочется сделать красиво, а не в лоб как в школе...
← →
gek (2002-10-15 13:03) [9]Ну ешки-матрешки
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
← →
Alexandr (2002-10-15 13:14) [10]нет просто надо было в всое время в школе тоже красиво код писать а не тяп ляп.
Тут же все проще паренной репы.
А вы развели флейм.
2NightCon: если уж совсем руки не оттдута растут, то после того как получишь select * from table where and pole2=y and pole3=z;
примени патч replacestr(s, "where and" "and");
← →
novill (2002-10-15 13:21) [11]Alexandr RULEZZZ!!!
← →
NightCon (2002-10-15 13:23) [12]Все уже разобрался...
2Alexandr: и это по-твоему красиво?
← →
Alexandr (2002-10-15 13:26) [13]да, и еще хочу добавить.
Пока эту задачу не научишься решать минимум 5 алгоритмически разными способами при этом с первого раза, без ошибок компиляции и исполнения, к программированию реальных задач не приступай.
← →
gek (2002-10-15 13:27) [14]А вот и ни черта, если будет
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:30) [15]а на форуме кричать "Я ДУРАК потому что не могу решить элементарную задачку, что говорит о том, что в школе я учился исключительно плохо" красиво?
Мой тебе совет: пей поменьше "вотки" пока не поздно...
Ну все пора останавливаться, а то меня понесло...
← →
Alexandr (2002-10-15 13:32) [16]бля,
replacestr(s, "where and" "where");
ну что, уж так трудно сообразить?
← →
Max Zyuzin (2002-10-15 13:36) [17]Алекс, успокойся :)) Сходи на хоккей :))
← →
Max Zyuzin (2002-10-15 13:36) [18]Сорри за оффтоп.
← →
Alexandr (2002-10-15 13:39) [19]я спокоен.
Просто некоторые меня выводят.
Ну не понимаю я их, как врочем и хоккей ;)
← →
gek (2002-10-15 13:40) [20]> Alexandr © (15.10.02 13:32)
Саня, не кипятись.
← →
Nikolay M. (2002-10-15 15:23) [21]
> 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 or field1="value1" and field2="value2"". Это уже нюансы :)
← →
gek (2002-10-15 15:28) [22]приведи реальный код, а именно
на
select * from table where 1
select * from table where true
это как же такое может работать?
← →
Nikolay M. (2002-10-15 16:02) [23]
> 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 + " AND pole1 =2"
else
if (CheckBox2.Checked)
s:=s + "AND pole2 =20"
........
else
if (CheckBox3.Checked)
s:=s + "AND pole3 =4"
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2002.11.04;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.165 c