Форум программистов, компьютерный форум, киберфорум
Delphi: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/14: Рейтинг темы: голосов - 14, средняя оценка - 4.50
0 / 0 / 0
Регистрация: 12.05.2011
Сообщений: 8

передать в select несколько значений, выбранных в ListBox

23.01.2012, 16:44. Показов 3042. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
есть ListBox, заполняемый значениями из БД. ListBox в режиме MultiSelect. нужно написать select через IBQuery, в котором значения из ListBox должны передаваться как параметр. например:
Oracle 11 SQL
1
IBQuery1->SQL->Text = "select values from table where (values_name = '" +ListBox->Items->String[0]+ "') or (values_name = '" +ListBox->Items->String[1]+ "') or (...)
проблема в том, что я заранее не знаю сколько и какие значения выберет пользователь из ListBox
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
23.01.2012, 16:44
Ответы с готовыми решениями:

Условие в запросе - значение из listbox на форме. Как передать несколько значений?
Народ, не могу разобраться с построением запроса на основе значений из поля ListBox (на форме), в котором включен множественный выбор...

Написание метода для возвращения неизвестного количества значений из выбранных значений Select (ом)
Сейчас в коде я очень часто использую запрос Select для того чтобы взять значения из какой-то конкретной ячейки поэтому я написал метод: ...

Получение значений выбранных option в select
Доброго времени суток. Имеется такой select <?php $res = mysql_query("SELECT DISTINCT course FROM...

5
20 / 20 / 0
Регистрация: 26.11.2011
Сообщений: 64
23.01.2012, 17:04
Привет. вначале заполняешь 1 ListBox затем через выбор параметра ListBox заполнять следующий водя как параметр в SQl значения выбора и так далее. если скинете исходники по проще будит
0
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
23.01.2012, 18:33
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
var
  i: integer;
  sSQL,sWhere: string;
  
      ...
  sSQL := IBQuery1->SQL->Text;
  // Убрать из текста запроса "хвост", начинающийся с ' where '
  if Pos(' where ',sSQL)>0 then sSQL := Copy(sSQL,1,Pos(' where ',sSQL)-1);
  sWhere := '';
  for i := 0 to ListBox.Items.Count-1 do
   begin
     if i>1 then sWhere := sWhere +' or ';
     sWhere := sWhere + '(values_name='+QuotedStr(ListBox.Items[i])+')';
   end;
   if Where>'' then sSQL := sSQL+' where '+sWhere;
   IBQuery1->SQL->Text = sSQL;
    ...
0
0 / 0 / 0
Регистрация: 12.05.2011
Сообщений: 8
24.01.2012, 10:12  [ТС]
Привет, исходники-то ради бога счас попытаюсь выбрать что-то, чтоб было более понятно).
Итак, есть две формы, на одной происходит заполнение ListBox. по клику кнопки открывается другая форма, на которой и должен находиться IBQuery с select -ом с учетом параметров выбранных в ListBox
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
void __fastcall TForm18::Button4Click(TObject *Sender)//заполнение ListBox
{
  Label5->Caption = "Электрические параметры блока(узла)";
 IBQuery4->Active = true;
 IBQuery4->Close();
 IBQuery4->SQL->Clear();
 IBQuery4->SQL->Text = "select PARAM_TYPE FROM PARAM_TYPES WHERE PARAM_TYPE_NAME = '" + RadioButton4->Caption + "'";
 IBQuery4->Open();
 Label6->Caption = IBQuery4->FieldByName("PARAM_TYPE")->AsInteger;
 
 IBQuery6->Active = true;
 IBQuery6->Close();
 IBQuery6->SQL->Clear();
 IBQuery6->SQL->Text = "select DISTINCT PD.PARAM_ID, PD.PARAM_NAME, P.PARAM_TYPE FROM PARAMS_DATA PD, PARAMS P WHERE (PD.PARAM_ID = P.PARAM_ID) AND (P.PARAM_TYPE = '" + Label6->Caption + "') AND (PD.USEL_NUM = '" + ComboBox3->Text + "') AND (PD.USEL_ID = '" + Label1->Caption +"')";
 
 IBQuery6->Open();
 ListBox1->Clear();
 while (!IBQuery6->Eof)
     {
       ListBox1->Items->Add(IBQuery6->FieldByName("PARAM_NAME")->AsString);
       IBQuery6->Next();
     }
}
 
void __fastcall TForm18::Button3Click(TObject *Sender)// открываем другую форму для просмотра
{
Application->CreateForm(__classid(TForm21), &Form21);
Form21->Caption = "Настройка" + ComboBox1->Text;
Form21->Show();
}
 
void __fastcall TForm21::FormCreate(TObject *Sender)// и вот здесь формируется злосчастный select
{
IBQuery1->Active = true;// он прикреплен к DBGrid
IBQuery1->Close();
IBQuery1->SQL->Clear();
IBQuery1->SQL->Text = "select PARAM_ID, PARAM_NAME, ED_IZM, \042MIN\042, \042MAX\042,VALUE, SETUP_TEST_DATE WHERE (USEL_ID = '" + Form18->Label1->Caption +"') and (USEL_NUM = '" + Form18->ComboBox3->Text + "') and (PARAM_NAME = "ТО ЧТО ИЗ LISTBOX")"
IBQuery1->Open();
}
Добавлено через 12 минут
MsGuns, спасибо, только мне немного не понятно, так как делфу я не знаю, счас попробую сотворить что-нить по аналогии.
тока такой вопрос, может кто в курсе аналог дельфийского Pos - это strstr(S1,S2)?? а Copy - strcpu??
а вот насчет QuotedStr я вообще потерялась((
0
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
24.01.2012, 11:45
Стормозил, просто не обратил внимания, что у Вас си

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
  AnsiString sSQL = IBQuery1->SQL->Text;
  AnsiString sWhere = "";
  if (sSQL.Pos(" where ") > 0)
     sSQL = sSQL.SubString(1,sSQL.Pos(" where ")-1);
  sWhere = "";
  for (int i; i < cmbAstraPBE->Items->Count; i++)
  {
       if (i > 1)
           sWhere = sWhere + " or ";
       sWhere = sWhere + "(values_name="+QuotedStr(cmbAstraPBE->Items->Strings[i])+")";
  }
  if (sWhere > "")
     sSQL = sSQL + " WHERE "+sWhere;
  IBQuery1->SQL->Text  = sSQL;
Добавлено через 1 минуту
Пардон, cmbAstraPBE замените на Ваш листбокс
0
0 / 0 / 0
Регистрация: 12.05.2011
Сообщений: 8
24.01.2012, 16:49  [ТС]
СПАСИБО, помогло))
я сделала вот так:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
void __fastcall TForm21::FormCreate(TObject *Sender)
{
IBQuery1->Active = true;
IBQuery1->Close();
IBQuery1->SQL->Clear();
AnsiString s, sSQL;
int k = 0;
for (int i = 0; i < Form18->ListBox1->Items->Count; i++)
{ 
 if (Form18->ListBox1->Selected[i])
  {
  if (k > 0)
      {
       s = s + "or (PARAM_NAME = '" + Form18->ListBox1->Items->Strings[i]+ "')";
       k++;
     }
   if (k == 0) 
  { 
     s =  "(PARAM_NAME = '" + Form18->ListBox1->Items->Strings[i]+ "')";
      k++;
     }
 }
}
if (k > 1)
 {
 sSQL = "select DISTINCT PARAM_ID, PARAM_NAME, ED_IZM, \042MIN\042, \042MAX\042, \042VALUE\042, SETUP_TEST_DATE FROM PARAMS_DATA WHERE (USEL_ID = '" + Form18->Label1->Caption +"') and (USEL_NUM = '" + Form18->ComboBox3->Text + "') and " + "(" + s + ")";
}
if (k == 1)
{
 sSQL = "select DISTINCT PARAM_ID, PARAM_NAME, ED_IZM, \042MIN\042, \042MAX\042,\042VALUE\042, SETUP_TEST_DATE FROM PARAMS_DATA WHERE (USEL_ID = '" + Form18->Label1->Caption +"') and (USEL_NUM = '" + Form18->ComboBox3->Text + "') and " + s;
}
if (k==0)
 {
sSQL = "select DISTINCT PARAM_ID, PARAM_NAME, ED_IZM, \042MIN\042, \042MAX\042,\042VALUE\042, SETUP_TEST_DATE FROM PARAMS_DATA WHERE (USEL_ID = '" + Form18->Label1->Caption +"') and (USEL_NUM = '" + Form18->ComboBox3->Text + "')";
}
IBQuery1->SQL->Text = sSQL;
IBQuery1->Open();
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
24.01.2012, 16:49
Помогаю со студенческими работами здесь

Использование выбранных значений ListBox
Доброго времени суток! Подскажите, пожалуйста, как можно использовать несколько выбранных значений из ListBox. Например, каким образом...

ListBox Получение выбранных значений и добавление его в Массив
Здравствуйте, Уважаемые форумчане. Писал простую программу граббер картинок с онлайн читалки, она берет html страничку, парист её и...

Как в элемент формы внести несколько выбранных значений справочника?
Всем здравствуйте. При работе возник следующий вопрос. Как в элемент формы внести несколько выбранных значений справочника контрагенты?

Как передать тегом Select несколько переменных
есть Select, который передает одну переменную значение которой равно выбраному значению. А как сделать чтобы при выборе определенного...

Выбрать сразу несколько значений из select-а
Добрый день! Нужно выбрать сразу несколько значений из select, и отправить запрос. Нужно как то изменить этот код select-а (запроса),...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка SDL3 из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru