Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
1-11147
Stocker!
2002-10-24 10:13
2002.11.04
TImage и таблица Word или Excel


1-11161
mmb
2002-10-24 09:25
2002.11.04
Какой максимальный размер Canvas


3-11052
ACR
2002-10-15 02:00
2002.11.04
ACCESS


6-11374
PDV
2002-09-06 09:02
2002.11.04
Проблема с кодировками


4-11564
sadreg
2002-09-13 23:20
2002.11.04
Надо взять содержимое одного из лэйблов диалогового окна





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский