Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.06.2009, 14:17   #1
kate158
Форумчанин
 
Регистрация: 01.08.2008
Сообщений: 383
Подмигивание несколько выбранных элементов checklistbox в sql запрос

Привет!
Вопрос в следующем.
Есть checklistbox,БД (ms sql,ado).
Как сделать таким образом, что выбираешь насколько элементов в чеклистбоксе и они передаются как параметры в скл запрос.
Вот пример для одного выбранного элемента
Код:
procedure TForm1.CheckListBox1ClickCheck(Sender: TObject);
var
ST:STRING;
i:integer;
begin
for i:=0 to CheckListBox1.Items.Count - 1 do
 if CheckListBox1.Checked[i] then
 begin
poisk.SQL.Clear; 
poisk.SQL.Add('select *');
poisk.SQL.Add('from mytest');
poisk.SQL.Add('where 0=0');
st:='and NUM_REP='+string(CheckListBox1.Items.Strings[i]);;
poisk.SQL.Add(st);
poisk.Open;
end;
, но как сделать если их несколько?Кто поможет?

Последний раз редактировалось kate158; 22.06.2009 в 14:20.
kate158 вне форума Ответить с цитированием
Старый 22.06.2009, 14:23   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Код:
for i:=0 to CheckListBox1.Items.Count - 1 do
 if CheckListBox1.Checked[i] then
 begin
poisk.SQL.Clear; 
poisk.SQL.Add('select *');
poisk.SQL.Add('from mytest');
poisk.SQL.Add('where 0=0');
 st:='';
 if CheckListBox1.Checked[i] then 
  st:=st+' and NUM_REP='+CheckListBox1.Items[i];
poisk.SQL.Add(st);
poisk.Open;
end;
Но не проверял.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 22.06.2009, 15:33   #3
kate158
Форумчанин
 
Регистрация: 01.08.2008
Сообщений: 383
По умолчанию

фух.Виталик, так не работает.
наверное нужно какнить типа..
Код:
' and NUM_REP in' +(здесь множество из чекнутых элементов)
kate158 вне форума Ответить с цитированием
Старый 22.06.2009, 16:11   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Так, Катюша,
Во-первых: Думаю тебе нужно заменить AND на OR ибо сам запрос бессмысленен. Не может одно значение быть одновременно другим.
Во-вторых: Я вот прикинул примерный запрос:
Код:
procedure TForm1.CheckListBox1ClickCheck(Sender: TObject);
var
ST:STRING;
i:integer;
begin
  for i:=0 to CheckListBox1.Items.Count - 1 do
 if CheckListBox1.Checked[i] then
  st:=st+' or NUM_REP='+string(CheckListBox1.Items[i]);
st:='select * from ww where 0=0 '+st;
caption:=st;
end;
Обрати внимание на код.

В-третьих: Если ничего из этого не подойдет, дай помацать свой проект. Прикрепи его в РАРе сюда, и поглядим.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 22.06.2009, 16:18   #5
kate158
Форумчанин
 
Регистрация: 01.08.2008
Сообщений: 383
По умолчанию

вот
Код:
procedure TForm1.CheckListBox1ClickCheck(Sender: TObject);
var
s:STRING;
i,k:integer;
 begin
 k:=0;
 poisk.SQL.Clear; 
poisk.SQL.Add('select *');
poisk.SQL.Add('from mytest');
poisk.SQL.Add('where 0=0');
for i:=0 to CheckListBox1.Items.Count - 1 do
if CheckListBox1.Checked[i] then
begin
if k=0 then
poisk.SQL.Add('AND NUM_REP='+CheckListBox1.Items[i])
ELSE
poisk.SQL.Add('OR NUM_REP='+CheckListBox1.Items[i]);
k:=1;
END;
 poisk.Open;
В ОБЩЕМ, ВОТ РЕШЕНИЕ. ПОКА БЕЗ ОШИБОК.
СПАСИБО! :-*

Последний раз редактировалось kate158; 22.06.2009 в 16:32.
kate158 вне форума Ответить с цитированием
Старый 22.06.2009, 16:32   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Вот так:
Код:
procedure TForm1.CheckListBox1ClickCheck(Sender: TObject);
var
s:STRING;
i,k:integer;
 begin
 k:=0;
 poisk.SQL.Clear; 
poisk.SQL.Add('select * ');
poisk.SQL.Add(' from mytest ');

s:='';
for i:=0 to CheckListBox1.Items.Count - 1 do
if CheckListBox1.Checked[i] then
begin
 if k=0 then
  s:=s+(' NUM_REP='+CheckListBox1.Items[i])
 ELSE
  s:=s+(' OR NUM_REP='+CheckListBox1.Items[i]);
k:=1;
END;
if s<>'' then
poisk.SQL.Add(' where '+s);
 poisk.Open;

Смысл в том чоб набить эти условия в переменку, а потом проверять если в ней непусто то прибавить WHERE и пустить запрос.
Впрочем предидущее where 0=0 должно обезопасить...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
БД, Запрос на приход/расход, не получается задействовать несколько обьектов kvadratnt Помощь студентам 0 06.06.2009 15:23
Помогите написать несколько SQL запросов grinch SQL, базы данных 12 23.03.2009 13:15
Как сделать запрос на привязку элементов управления к данным? sphomin Microsoft Office Access 2 25.11.2008 14:56
несколько запросов SQL Arteom БД в Delphi 3 09.09.2007 23:39
SQL запрос на основе другого SQL запрса... Timoxa БД в Delphi 1 07.01.2007 18:15