Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Базы данных
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 11.03.2018, 11:42
Аватар для son_yaa
son_yaa son_yaa вне форума
Прохожий
 
Регистрация: 10.03.2018
Сообщения: 6
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию Как заполнить ComboBox данными из TADOTable программно в делфи - Delphi БД/Delphi 6-7

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

пробовала так но не работает
[DELPHI]form21.suiDBLookupComboBox1.KeyValue := QueryPoliMes.DataSetField.Fields[4].Value;[/DELPHI]

вобщем в ComboBox или DBComboBox или DBLookupComboBox у меня должен быть список из таблицы
DataModule3.DataSource1
а при редактировании заказа у меня еще и значение должно ему присвоиться такое как в запросе QueryPoliMes соответствующее полю FieldByName('ВидПолиграфии')
Изображения
Тип файла: jpg Безымянный.jpg (61.5 Кбайт, 4 просмотров)
Тип файла: jpg Безымянный1.jpg (33.9 Кбайт, 4 просмотров)
Ответить с цитированием
  #2  
Старый 12.03.2018, 00:00
Аватар для Guaho
Guaho Guaho вне форума
Начинающий
 
Регистрация: 27.08.2017
Сообщения: 179
Версия Delphi: Delphi7
Репутация: 10
По умолчанию

Надо сделать отдельную таблицу и работать с ней через DBLookupComboBox. Прописываете для DBLookupComboBox параметры: ListSource (это таблица, откуда будут браться справочные данные, т.е. тот самый "резиновый" список), ListField (поле из справочной таблицы, которое должно отображаться в DBLookupComboBox), KeyField (ключевое поле - первичный ключ с автоинкрементом в справочной таблице), DataSource - источник данных для главной таблицы, и DataField (Integer-поле в главной таблице, в которое будет помещаться код ссылочной записи).
А по частностям... Конструкцию вида "Fields[4]" лучше не используйте, т.к. поле можно случайно перетащить, и функционал нарушится. Точнее и нагляднее будет использование "FieldByName", что-то вроде этого:
Код:
naimen_OLD := fq.FieldByName('Naimen').AsString;
Также Вы можете сократить имена (не использовать дефолтные) - вместо DataModule3 задать dm3, вместо DataSource1 - например, dsZakazy. Кажущаяся потеря времени на указание имён потом с лихвой окупится, т.к. писать код (и читать его!) будет проще.

Последний раз редактировалось Guaho, 12.03.2018 в 00:44.
Ответить с цитированием
  #3  
Старый 12.03.2018, 07:03
Аватар для son_yaa
son_yaa son_yaa вне форума
Прохожий
 
Регистрация: 10.03.2018
Сообщения: 6
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Я знаю об этом, так и делала для отображения списка. Но сейчас у меня не в том проблема. мне нужно отредактировать данные. И часть записей должно выводиться из запроса в DbLookupCombobox, DbCombobox либо просто в Combobox. Пока я это сделала через DbCombobox и просто вручную ввела значения в Items. но эти списки у меня могут пополняться в программе на отдельных формах, и при редактировании новых пунктов уже не будет в итемсах(. мне это нужно сделать программно.
И еще пр редактировании мне нужно чтобы была возможность менять значение комбобокса
Ответить с цитированием
  #4  
Старый 12.03.2018, 12:14
Аватар для Kailon
Kailon Kailon вне форума
Активный
 
Регистрация: 06.06.2010
Сообщения: 340
Версия Delphi: 11.3
Репутация: 429
Сообщение

Цитата:
Сообщение от son_yaa
Я знаю об этом, так и делала для отображения списка. Но сейчас у меня не в том проблема. мне нужно отредактировать данные. И часть записей должно выводиться из запроса в DbLookupCombobox, DbCombobox либо просто в Combobox. Пока я это сделала через DbCombobox и просто вручную ввела значения в Items. но эти списки у меня могут пополняться в программе на отдельных формах, и при редактировании новых пунктов уже не будет в итемсах(. мне это нужно сделать программно
Ну и в чем проблема? Пробежаться по набору данных и заполнить ComboBox по требуемому условию.
__________________
Всегда пишите код так, будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете.
Ответить с цитированием
  #5  
Старый 12.03.2018, 12:16
Аватар для Kailon
Kailon Kailon вне форума
Активный
 
Регистрация: 06.06.2010
Сообщения: 340
Версия Delphi: 11.3
Репутация: 429
Сообщение

Цитата:
Сообщение от son_yaa
И еще пр редактировании мне нужно чтобы была возможность менять значение комбобокса
Эти значения взялись из таблицы? Значит менять их нужно в таблице, а ComboBox только метод отображения.
__________________
Всегда пишите код так, будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете.
Ответить с цитированием
  #6  
Старый 12.03.2018, 12:22
Аватар для Kailon
Kailon Kailon вне форума
Активный
 
Регистрация: 06.06.2010
Сообщения: 340
Версия Delphi: 11.3
Репутация: 429
Сообщение

Цитата:
Сообщение от Guaho
Конструкцию вида "Fields[4]" лучше не используйте, т.к. поле можно случайно перетащить, и функционал нарушится
Это куда поле можно перетащить? Перетаскиваются столбцы таблицы, если вы конечно про это, но это только визуально. В запросе все поля идут так, как Вы их прописали. И поменять их следование можно только изменив запрос. А если же запрос будет не изменяемый, то и поля всегда будут на своих местах.
__________________
Всегда пишите код так, будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете.
Ответить с цитированием
  #7  
Старый 16.03.2018, 19:22
Аватар для Guaho
Guaho Guaho вне форума
Начинающий
 
Регистрация: 27.08.2017
Сообщения: 179
Версия Delphi: Delphi7
Репутация: 10
По умолчанию

Цитата:
Сообщение от son_yaa
...мне нужно отредактировать данные. И часть записей должно выводиться из запроса в DbLookupCombobox, DbCombobox либо просто в Combobox. Пока я это сделала через DbCombobox и просто вручную ввела значения в Items. но эти списки у меня могут пополняться в программе на отдельных формах, и при редактировании новых пунктов уже не будет в итемсах(. мне это нужно сделать программно.
И еще пр редактировании мне нужно чтобы была возможность менять значение комбобокса
Ещё раз. Данные в ссылочных таблицах Вы меняете на отдельных формах. Содержимое ссылочных таблиц отображаете на главной (или любой другой) форме через компонент DBLookupCombobox. Этому компоненту, кроме всего прочего, для отображения ссылочных данных нужны коды записей из ссылочной таблицы. Когда Вы редактируете ссылочное поле в главной таблице, Вы должны туда при необходимости вставлять код ссылочной записи.
Я, к примеру, делаю так. В главной таблице "Контрагенты" у меня есть поле "Код страны" (Kod_strany). Если мне нужно, например, указать в главной таблице страну, откуда родом контрагент, я должен в главной таблице, в поле "Kod_strany" указать код (уникальное автоинкрементное значение, первичный ключ; обычно во всех таблицах я его обозначаю словом "Kod") из таблицы "Страны". Это делается либо выбором существующей страны из списка DBLookupCombobox, либо вызовом окна "Страны", добавлением туда отсутствующей страны и возвратом в главное окно с запоминанием кода ссылочной записи в поле "Kod_strany". Это самое запоминание должен делать Ваш код. В случае с выбором существующего значения из списка это делается автоматически, а в случае с отдельным окном надо прописывать код.

Последний раз редактировалось Guaho, 16.03.2018 в 19:31.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 13:45.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter