Форум программистов, компьютерный форум, киберфорум
Наши страницы
C++ Builder: Базы данных
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.83/18: Рейтинг темы: голосов - 18, средняя оценка - 4.83
Starget-93
0 / 0 / 0
Регистрация: 12.11.2012
Сообщений: 13
1

Отображение значений из таблицы в combobox

30.06.2014, 15:13. Просмотров 3437. Ответов 5
Метки нет (Все метки)

Доброго времени суток ! Возможно уже кто-то задавал подобный вопрос. Подскажите: к проекту подключена база данных Acсess. Как можно реализовать отображение значений ячеек из определенной таблицы БД в combobox? И можно ли сделать так, что при выборе какого то объекта из combobox автоматически заполнялись поля edit значениями, с которыми связан объект из БД (к примеру в таблице название объекта - в первом столбце, а во втором его числовое значение)? Заранее спасибо за ответ.
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.06.2014, 15:13
Ответы с готовыми решениями:

ComboBox, отображение пункта в Edit
Здравствуйте!Подскажите пожалуйста как можно это реализовать: В общем,есть...

Отображение таблиц базы даних Microsoft Access в ListBox или ComboBox
Подскажите, пожалуйста. Как отразить в ListBox'се или ComboBox'се список всех...

Удаление значений в combobox
помогите кто может... как удалить повторяющиеся значения из ComboBox

Отображение подсказок для строк, превышающих длину ComboBox при наведении курсора
На форме имеется ComboBox, в него автоматически заносятся данные. Длина...

Объединение значений ComboBox'a по первым символам
Имеется ComboBox, отображающий классы школы(5а, 5б, 6а, 6б и тд) Нужно, чтобы...

5
D1973
Модератор
3650 / 2630 / 1282
Регистрация: 21.01.2014
Сообщений: 11,135
Записей в блоге: 3
Завершенные тесты: 1
01.07.2014, 06:58 2
Лучший ответ Сообщение было отмечено Starget-93 как решение

Решение

Есть БД Base с таблицей t_Clnt
ID - Идентификатор клиента (целочисленное поле)
Client_Name - наименование клиента
Client_Address -адрес клиента
На форме компонеты ComboBox, Edit, ADOConnection (ADO1), ADOQuery (Q1)
При старте программа заполняет комбобокс значениями поля Client_Name. При выборе какого-либо клиента из комбобокса в Едите отображается его адрес
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
void __fastcall TForm1::FormActivate(TObject *Sender)
{
   //Подключились к базе
   String Bases = ExtractFilePath(Application->ExeName) + "base.mdb";
   String s = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Bases + ";Persist Security Info=False";
   ADO1->ConnectionString = s;
   ADO1->Connected;
   //Заполнили Комбобокс
   Q1->Close();
   Q1->SQL->Clear();
   Q1->SQL->Add("SELECT Client_Name FROM t_Clnt");
   Q1->Open();
   Q1->First();
   for(int i = 0; i < Q1->RecordCount; i++)
    {
      ComboBox1->Items->Add(Q1->FieldValues["Client_Name"]);
      Q1->Next();
    }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ComboBox1Change(TObject *Sender)
{
  Q1->Close();
  Q1->SQL->Clear();
  Q1->SQL->Add("SELECT * FROM t_Clnt WHERE ID = " +IntToStr(ComboBox1->ItemIndex));
  Q1->Open();
  Edit1->Text = Q1->FieldValues["Client_Address"];
}
Ограничение: БД должна лежать там же, где ехе-шник программы
Совет: в подобных проектах я всегда выделяю в отдельную функцию код выполнения SQL-запроса, в которую в качестве параметра передаю строку самого запроса. Функцию делаю членом класса формы. Например вместо
C++
1
2
3
4
Q1->Close();
Q1->SQL->Clear();
Q1->SQL->Add("SELECT * FROM t_Clnt WHERE ID = " +IntToStr(ComboBox1->ItemIndex));
Q1->Open();
пишу
C++
1
DoSQL("SELECT * FROM t_Clnt WHERE ID = " +IntToStr(ComboBox1->ItemIndex));
Когда в программе много запросов - выгода очевидна...
1
Миниатюры
Отображение значений из таблицы в combobox  
c0rvax
89 / 89 / 22
Регистрация: 02.07.2013
Сообщений: 290
Завершенные тесты: 1
01.07.2014, 11:11 3
Чем не устраивает DBLookupComboBox?
0
Starget-93
0 / 0 / 0
Регистрация: 12.11.2012
Сообщений: 13
02.07.2014, 16:43  [ТС] 4
Позвольте еще задать вопрос. Допустим у меня в БД есть несколько таблиц (к примеру Бетон, Камень, Дерево).В программе используется два комбобокса. Как можно реализовать вот такой вариант: В первом комбобоксе выбираем таблицу, а во втором выбираем уже содержимое данной таблицы ? (Например выбрали в первом Бетон, во втором выбираем тип бетона).
0
D1973
Модератор
3650 / 2630 / 1282
Регистрация: 21.01.2014
Сообщений: 11,135
Записей в блоге: 3
Завершенные тесты: 1
02.07.2014, 20:46 5
Ну вот так как-то...
Пример: есть база, содержащая 3 таблицы. На форме компоненты ADOConnection (ADO1), ADOQuery (Q1), 2 ComboBox.
При старте программы соединяемся с базой и заполняем 1-й Комбобокс именами таблиц. При смене значения первого комбобокса заполняется второй комбобокс значениями какого-то поля указанной таблицы (для примера я сделал разные названия полей в каждой из таблиц)
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
void __fastcall TForm6::FormCreate(TObject *Sender)
{
   //Коннектимся к базе
   if(ADO1->Connected) ADO1->Connected = false;
   String Bases = ExtractFilePath(Application->ExeName) + "DB.mdb";
   String s = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Bases + ";Persist Security Info=False";
   ADO1->ConnectionString = s;
   ADO1->Connected;
   //Получаем список таблиц и заполняем 1-й комбобокс
   ADO1->GetTableNames(ComboBox1->Items);
}
//---------------------------------------------------------------------------
void __fastcall TForm6::ComboBox1Change(TObject *Sender)
{
  //Очистили и заполнили 2-й Комбобокс
   ComboBox2->Items->Clear();
   ComboBox2->Text = "";
   Q1->Close();
   Q1->SQL->Clear();
   Q1->SQL->Add("SELECT * FROM " + ComboBox1->Text);
   Q1->Open();
   String fName;
   switch(ComboBox1->ItemIndex)
    {
      case 0 : fName = "Name_A"; break;
      case 1 : fName = "Name_B"; break;
      case 2 : fName = "Name_C"; break;
    }
   Q1->First();
   for(int i = 0; i < Q1->RecordCount; i++)
    {
      ComboBox2->Items->Add(Q1->FieldValues[fName]);
      Q1->Next();
    }
}
Если же заполнение 2-го комбобокса производится из поля, которое во всех 3-х таблицах имеет одинаковое название - тогда просто выкидываем строки 22-28, а в 32-й строке прописываем конкретное имя поля
0
Соточка
0 / 0 / 0
Регистрация: 08.09.2013
Сообщений: 16
19.05.2015, 14:08 6
Подскажите, пожалуйста, а как можно реализовать такой вариант: Есть форма, на ней комбобокс, в который выгружается два поля из таблицы : id, naim. id-ключевое, naim - наименование... как сделать так, что бы id сохранялось в одно поле в таблице table, а naim в другое поле той же таблицы? Могу скинуть базу, если понадобится...
0
19.05.2015, 14:08
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.05.2015, 14:08

Перебор значений в поле с добавлением в ComboBox
Нужно вытащить элемент из строки, в котором значение равно, допустим, 1 по...

Таблицы и их отображение на форме
Здравствуйте. Есть около 20 таблиц с форматированием(обьединение ячеек, цвет...

Задача значений переменных при пункте ComboBox
Здравствуйте, уважаемые программисты! Мне 13 лет и я пытаюсь освоить...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru