Форум программистов, компьютерный форум, киберфорум
Delphi: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.65/34: Рейтинг темы: голосов - 34, средняя оценка - 4.65
 Аватар для son_yaa
0 / 0 / 1
Регистрация: 10.03.2018
Сообщений: 51
Delphi 6-7

Как заполнить ComboBox данными из TADOTable программно?

11.03.2018, 11:39. Показов 7173. Ответов 30

Студворк — интернет-сервис помощи студентам
У меня в программе список в таблице может пополняться.
ComboBox я использую для редактирования заказов. И в нем должен быть список вида заказов (который я пополнять буду периодически как мне это сделать? не знаю что лучше взять ComboBox , DBComboBox или DBLookupComboBox .
Просто прописать в инспекторе в св-ве Items не могу, т.к. список будет пополняться

пробовала так но не работает
Delphi
1
form21.suiDBLookupComboBox1.KeyValue := QueryPoliMes.DataSetField.Fields[4].Value;
вобщем в ComboBox или DBComboBox или DBLookupComboBox у меня должен быть список из таблицы
DataModule3.DataSource1
а при редактировании заказа у меня еще и значение должно ему присвоиться такое как в запросе QueryPoliMes соответствующее полю FieldByName('ВидПолиграфии')
Миниатюры
Как заполнить ComboBox данными из TADOTable программно?   Как заполнить ComboBox данными из TADOTable программно?  
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
11.03.2018, 11:39
Ответы с готовыми решениями:

Как заполнить combobox данными для выбора?
Сделала форму кинула combobox.Как заполнить combo данными для выбора и как сделать, чтобы при выборе какого-либо пункта выходил отчет? ...

Как в combobox добавить значение key и value, а так же заполнить их данными?
Доброго дня. Перелазив интернет, так и не нашел как в форме дизайнера добавить значения с ключем. То бишь: petya, Петр fedya, Федор ...

Заполнить данными combobox в datagridview
Я новичок, не пинайте сильно... Заполняю данными dataGridView1 данными из таблицы Employees источник: dataGridView1.DataSource =...

30
Модератор
 Аватар для D1973
9917 / 6454 / 2455
Регистрация: 21.01.2014
Сообщений: 27,395
Записей в блоге: 3
11.03.2018, 16:03
Вот бы еще вместо этих "веселых картинок" более внятное объяснение своей проблемы озвучить. безо всяких "вобщем"...
0
 Аватар для son_yaa
0 / 0 / 1
Регистрация: 10.03.2018
Сообщений: 51
11.03.2018, 16:26  [ТС]
Form21.suiDBComboBox1 должен заполняться списком из таблицы DataModule3.VidPoligrafiya.FieldByName(' ВидПолиграфии') и вот у меня там такой список, он должен быть в моем комбобоксе.
могу бросить программу
Миниатюры
Как заполнить ComboBox данными из TADOTable программно?  
0
5967 / 4543 / 1094
Регистрация: 29.08.2013
Сообщений: 28,157
Записей в блоге: 3
11.03.2018, 16:55
если совсем просто то DbLookupCombobox можно использовать
но SQL запросом проще
0
 Аватар для son_yaa
0 / 0 / 1
Регистрация: 10.03.2018
Сообщений: 51
11.03.2018, 17:14  [ТС]
для редактирования данных DbLookupCombobox не подходит.
как это сделать запросом?
0
5967 / 4543 / 1094
Регистрация: 29.08.2013
Сообщений: 28,157
Записей в блоге: 3
11.03.2018, 17:31
Цитата Сообщение от son_yaa Посмотреть сообщение
как это сделать запросом?
обычно
SQL
1
SELECT * FROM xxx WHERE
Добавлено через 19 секунд
подставьте свою колонку и свою таблицу
0
 Аватар для son_yaa
0 / 0 / 1
Регистрация: 10.03.2018
Сообщений: 51
12.03.2018, 07:27  [ТС]
да, согласна,можно так сделать, но мне нужно привязывать этот DBCombobox по DataSource с запросом, чтобы редактировать данные в нем (он у меня именно для этого в размещен на форме), но в список мне нужно прописать как-то программно то что у меня в таблице ВидПолиграфии (VidPoligrafiya)
вот что-то на подобие такого, но не работает так

Delphi
1
form21.suiDBComboBox11.Items:= form21.DataSource1.DataSet.FieldList;
DataSource1 относится к запросу, который подключен к таблице в которой содержится список для комбобокса
0
5967 / 4543 / 1094
Регистрация: 29.08.2013
Сообщений: 28,157
Записей в блоге: 3
12.03.2018, 07:31
Цитата Сообщение от son_yaa Посмотреть сообщение
чтобы редактировать данные в нем
данные обычно в Combobox не редактируют - это выпадающий список

ЗЫ 21 форма? сколько же у тебя query\connection и datasource? почему ты их не назовешь по смыслу?
0
 Аватар для son_yaa
0 / 0 / 1
Регистрация: 10.03.2018
Сообщений: 51
12.03.2018, 07:36  [ТС]
пробовала еще так, не работает
Delphi
1
2
3
form21.ADOQuery1.SQL.Text := 'SELECT * FROM ВидПолиграфии ';
form21.suiDBComboBox11.Items:= form21.ADOQuery1.SQL;
form21.ADOQuery1.Active:=true;
все запросы и датасоурсы у меня названы именами, это я сейчас начала пробовать с этим списком и еще не успела назвать

я не собираюсь редактировать список комбобокса, мне нужно чтобы он пополнялся когда на другой форме я добавляю данные в этом списке. а редактирование в том смысле что я открываю редактирование заказа и у меня к примеру был выбран в заказе "журнал" а мне нужно сменить его на "тетрадь" она тоже есть в этом списке
0
5967 / 4543 / 1094
Регистрация: 29.08.2013
Сообщений: 28,157
Записей в блоге: 3
12.03.2018, 08:13
Цитата Сообщение от son_yaa Посмотреть сообщение
form21.suiDBComboBox11.Items:= form21.ADOQuery1.SQL;
ну что это за фигня?
то что у них одинаковый тип не значит что так ты загрузишь одно в другое

form21.ADOQuery1.SQL - это просто текст запроса
form21.suiDBComboBox11.Items - это просто список элементов (не помню можно ли их руками менять или они вытягивается из DataSet'а)

Цитата Сообщение от son_yaa Посмотреть сообщение
мне нужно
не подскажу как оно делается с помощью DB* компонентов, я делаю все SQL запросами - сам заполняю, сам выбираю.
0
 Аватар для son_yaa
0 / 0 / 1
Регистрация: 10.03.2018
Сообщений: 51
20.03.2018, 21:07  [ТС]
помогите пожалуйста с заполнением ComboBox .

У меня в базе есть таблица со списком Дизайнеров, и мне нужно заполнить мой ComboBox их именами, т.к. список дизайнеров может меняться.
но что-то не получается

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
procedure TForm1.Button1Click(Sender: TObject);
Var i,j:integer;
begin
j:=QueryDizajver.RecordCount;
QueryDizajver.Close;
QueryDizajver.Open;
QueryDizajver.First;
 for i:=1 to j do
 begin
 Combobox1.Items.Add(QueryDizajver.FieldByName('fio1' ).AsString);
QueryDizajver.Next;
 end;
Вложения
Тип файла: rar Макет.rar (509.6 Кб, 13 просмотров)
0
 Аватар для son_yaa
0 / 0 / 1
Регистрация: 10.03.2018
Сообщений: 51
20.03.2018, 21:14  [ТС]
вот пример набросала, но не работает
Вложения
Тип файла: rar Макет1.rar (507.7 Кб, 4 просмотров)
0
5967 / 4543 / 1094
Регистрация: 29.08.2013
Сообщений: 28,157
Записей в блоге: 3
20.03.2018, 21:19
Цитата Сообщение от son_yaa Посмотреть сообщение
QueryDizajver.RecordCount;
вот так не советую считать записи - так как если не указать выводить все записи в настройках (а об этом не все знают), то по умолчанию будет выводить по 50

Цитата Сообщение от son_yaa Посмотреть сообщение
QueryDizajver.First;
тоже не надо делать - при открытии все равно встаем на первую строку

вот так делается перебор
Delphi
1
2
3
4
5
QueryDizajver.Open;
while not QueryDizajver.EOF do begin
  Combobox1.Items.Add(QueryDizajver.FieldByName('fio1' ).AsString);
  QueryDizajver.Next;
end;
Цитата Сообщение от son_yaa Посмотреть сообщение
но что-то не получается
хотелось бы знать что именно

Добавлено через 1 минуту
Цитата Сообщение от son_yaa Посмотреть сообщение
вот пример набросала, но не работает
в третий раз говорю тебе - не задавай путь к базе данных на свой рабочий стол

почему бы в onShow формы не написать путь относительно твоего exe файла
тогда будет работать на любом компе
0
 Аватар для son_yaa
0 / 0 / 1
Регистрация: 10.03.2018
Сообщений: 51
20.03.2018, 21:23  [ТС]
Получилось вот так, но вначале показывает (ComboBox), а как сделать чтобы сразу была первая запись?

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
procedure TForm1.Button1Click(Sender: TObject);
begin
 QueryDizajver.SQL.Clear ;
 QueryDizajver.SQL.Text:='SELECT fio1 FROM Dizajner';
 QueryDizajver.open;
 ComboBox1.Items.Clear;
 QueryDizajver.First;
  while (not QueryDizajver.Eof)  do
   begin
     ComboBox1.Items.AddObject(QueryDizajver.Fields[0].AsString,TObject(QueryDizajver.Fields[0].AsString));
      QueryDizajver.Next;
   end;
Добавлено через 37 секунд
а как задавать путь к базе правильно?
0
5967 / 4543 / 1094
Регистрация: 29.08.2013
Сообщений: 28,157
Записей в блоге: 3
20.03.2018, 21:59
Цитата Сообщение от son_yaa Посмотреть сообщение
QueryDizajver.First;
убери

Цитата Сообщение от son_yaa Посмотреть сообщение
а как сделать чтобы сразу была первая запись?
Delphi
1
Combobox.ItemIndex:=0;
Цитата Сообщение от son_yaa Посмотреть сообщение
а как задавать путь к базе правильно?
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
procedure TForm1.Button1Click(Sender: TObject);
const
  //Файл БД располагается в папке DB, которая в свою очередь расположена в той же папке,
  //где лежит исполняемый файл программы.
  Fn = 'DB\db1.mdb';
var
  S, FileName : String;
begin
  ADOConnection1.Close;
  //Получаем полный путь к файлу БД с учётом текущего расположения исполняемого файла программы.
  FileName := ExtractFilePath(ParamStr(0)) + Fn;
  //Формируем строку соединения с учётом нового пути в файлу БД.
  S :=
    'Provider=Microsoft.Jet.OLEDB.4.0;'
    + 'Data Source="' + FileName + '";'
    + 'Mode=Share Deny None;'
    + 'User Id=;'
    + 'Password=;';
  //Записываем новую строку соединения.
  ADOConnection1.ConnectionString := S;
  //Открываем БД.
  ADOConnection1.Open;
end;
вот тут
Путь к БД
еще несколько способов
0
Модератор
 Аватар для D1973
9917 / 6454 / 2455
Регистрация: 21.01.2014
Сообщений: 27,395
Записей в блоге: 3
21.03.2018, 06:07
Цитата Сообщение от son_yaa Посмотреть сообщение
а как задавать путь к базе правильно?
qwertehok все правильно написал и в общем случае лучше всего делать именно так. Но, т.к. у Вас файл БД лежит прямо рядом с самой Вашей программой, то достаточно в свойстве ConnectionString компонента ADOConnection1 убрать путь, оставив только имя файла БД. т.е. начало этой строки буде выглядеть так:
Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;Data Source=Baza.mdb;...
дальше так, как есть и больше нигде и ничего не меняем...
0
 Аватар для son_yaa
0 / 0 / 1
Регистрация: 10.03.2018
Сообщений: 51
21.03.2018, 06:57  [ТС]
а мне прописывать этот код при открытии моего DataModule? или при открытии каждой формы? .
кстати поменяла путь в ADOConnection1 , и после запуска он всеравно сменился на прежний.


и еще вопрос по ComboBox. У меня получилось заполнить его запросом, но я буду использовать это для редактирования данных своих и мне нужно начальное значение его заполнить данными из поля другого запроса, т.е. в ComboBox.Text прописать DataModule3.QueryPoliMes.Fields[9].AsString (ну что-то такое) но так не правильно.
как правильно написать?
0
 Аватар для son_yaa
0 / 0 / 1
Регистрация: 10.03.2018
Сообщений: 51
21.03.2018, 07:15  [ТС]
не конектит в DbGrid почему-то((

Delphi
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
40
41
42
43
44
45
procedure TForm1.FormShow(Sender: TObject);
const
  //Файл БД располагается в папке DB, которая в свою очередь расположена в той же папке,
  //где лежит исполняемый файл программы.
  Fn = 'Baza.mdb';
var
  S, FileName : String;
begin
  ADOConnection1.Close;
  //Получаем полный путь к файлу БД с учётом текущего расположения исполняемого файла программы.
  FileName := ExtractFilePath(ParamStr(0)) + Fn;
  //Формируем строку соединения с учётом нового пути в файлу БД.
  S := 'Provider=Microsoft.Jet.OLEDB.4.0;'
    + 'Data Source="' + FileName + '";'
    + 'Mode=Share Deny None;'
    + 'User Id=;'
    + 'Password=;';
  //Записываем новую строку соединения.
  ADOConnection1.ConnectionString := S;
  //Открываем БД.
  ADOConnection1.Open;
 
//////// Заполняем ComboBox1 ///////
   QueryDizajver.SQL.Clear ;
 QueryDizajver.SQL.Text:='SELECT fio1 FROM Dizajner';
 QueryDizajver.open;
 ComboBox1.Items.Clear;
  while (not QueryDizajver.Eof)  do
   begin
     ComboBox1.Items.AddObject(QueryDizajver.Fields[0].AsString,TObject(QueryDizajver.Fields[0].AsString));
      QueryDizajver.Next;
   end;
 /////////////////////
 QueryNaruzhMes.SQL.Text:= 'SELECT * FROM ZakazNaruzh order by Data';
 QueryNaruzhMes.Active:=true;
end;
 
procedure TForm1.Button2Click(Sender: TObject);
var fio1, fio2: string;
i: integer;
s, dizajnerPoligr: string;
begin
QueryNaruzhMes.Edit;
/// ? ComboBox1.Items.Text:= QueryNaruzhMes.FieldValues
end;
Вложения
Тип файла: rar Макет.rar (563.6 Кб, 8 просмотров)
0
5967 / 4543 / 1094
Регистрация: 29.08.2013
Сообщений: 28,157
Записей в блоге: 3
21.03.2018, 10:28
Цитата Сообщение от son_yaa Посмотреть сообщение
не конектит в DbGrid почему-то((
проверяй значение ADOConnection1.ConnectionString
0
 Аватар для son_yaa
0 / 0 / 1
Регистрация: 10.03.2018
Сообщений: 51
21.03.2018, 21:00  [ТС]
в том то и проблема, что мне нужно как-то так привязать базу данных , чтобы она не слетала постоянно, точнее путь к ней не слетал. Попробовала сделать так как писали выше, но она вообще не конектится теперь
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
21.03.2018, 21:00
Помогаю со студенческими работами здесь

Заполнить comboBox данными из Excel
Добрый день, уважаемые знатоки :) Прошу сильно не пинать, форум почитал, но не разобраться :-( Есть на форме комбобокс, значения для...

Заполнить Combobox данными из столбца БД
Добрый день :curtsy:! Я новичок в VB 6.0. Подскажите, как в VB 6.0 реализовать след. задачку: на форме размещен Combobox . Нужно, чтобы в...

Программно заполнить ComboBox
Здравствуйте! Возможно-ли программно заполнить список для ComboBox Items(редактор коллекции строк)? Если да, киньте пожалуйста...

Заполнить ComboBox данными из листа Excel
Как сделать, чтобы список составлялся из данных на листе ексель, при этом данные могут прибавляться

Программно заполнить бланк Word-шаблона данными из TextBox
Привет всем!!!! Подскажите пожалуйста, как осуществить задуманное: На форме имеется ListBox с текстом, в котором есть так называемые...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru