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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.01.2014, 13:50   #1
Scorpuha
Форумчанин
 
Регистрация: 10.10.2013
Сообщений: 177
По умолчанию Динамически созданный TDBLookUpComboBox

Вот мои потуги. Создаю динамически TDBLookUpComboBox
условия что при количестве записей более одной вывести TDBLookUpComboBox. как теперь присвоить TDBLookUpComboBox значение равное полю id в таблице.

Код:
procedure TMainForm.Button1Click(Sender: TObject);
var
myComboBox: TDBLookUpComboBox;
begin
  with datamodule2.ADOQuery1 do begin
      SQL.Clear;

     SQL.Text:= 'Select id From Programmy' ;
      ExecSQL;
      datamodule2.ADOQuery1.Active:=true;
      if datamodule2.ADOQuery1.RecordCount=0 then ShowMessage('ничего не найдено')
else
  if datamodule2.ADOQuery1.RecordCount>1 then  myComboBox:=TDBLookUpComboBox.Create(self);
    myComboBox.Parent:=MainForm;
    myComboBox.Top:=myComboBox.Height;
end;
Scorpuha вне форума Ответить с цитированием
Старый 16.01.2014, 14:21   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Код:
 ExecSQL;
сразу - не корректно.
для запросов, возвращающих набор данных лучше использовать метод Open

потом, явно потеряны операторные скобки:
Код:
  if datamodule2.ADOQuery1.RecordCount>1 then  begin
   myComboBox:=TDBLookUpComboBox.Create(self);
    myComboBox.Parent:=MainForm;
    myComboBox.Top:=myComboBox.Height;
end;
end;
но и это всё пустяки. По сравнению с областью видимости (и существования вашего TDBLookUpComboBox.
Вы же его объявили на кнопке. Как только обработчик Button1Click завершит свою работу, ваш myComboBox перестанет существовать!

описывайте его либо глобально, либо переменной формы MainForm

Последний раз редактировалось Serge_Bliznykov; 16.01.2014 в 14:26.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 16.01.2014, 14:31   #3
Scorpuha
Форумчанин
 
Регистрация: 10.10.2013
Сообщений: 177
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение

но и это всё пустяки. По сравнению с областью видимости (и существования вашего TDBLookUpComboBox.
Вы же его объявили на кнопке. Как только обработчик Button1Click завершит свою работу, ваш myComboBox перестанет существовать!

описывайте его либо глобально, либо переменной формы MainForm
ну это перенесу, этот вариант я просто пробовал.
а что по моему главному вопросу, о присвоении значений из таблицы?
Scorpuha вне форума Ответить с цитированием
Старый 16.01.2014, 15:08   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

а что по сути?! Вы же не заполняете поля для работы DB-контрола (ну там DataField, DataSource)...
Вы бы кинули на форму контрол, настроили его, научились его использовать и вот только после этого, используя накопленные знания и опыт, создавать контрол в RunTime.

Кстати, может быть, делать его видимым/невидимым - Вас больше устроит? Головняка на порядок меньше!
Зачем Вам его пытаетесь в runtime создать? Просто для развлечения?

Цитата:
ну это перенесу, этот вариант я просто пробовал.
????? зачем делать заведомо неверно?! Объект будет уничтожен при выходе из процедуры клика. Ну и что Вы попробуете таким образом? Попытаетесь получить акссес виолейшен? Или что?

Последний раз редактировалось Serge_Bliznykov; 16.01.2014 в 15:10.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 16.01.2014, 15:11   #5
Scorpuha
Форумчанин
 
Регистрация: 10.10.2013
Сообщений: 177
По умолчанию

вот что пытаюсь реализовать

http://programmersforum.ru/showthread.php?t=253067
Scorpuha вне форума Ответить с цитированием
Старый 16.01.2014, 15:30   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

просмотрел по ссылке вашу тему ещё раз.
Всё равно не понял, что Вы за подзадачу решаете и зачем ДИНАМИЧЕСКИ создавать контрол.
Киньте на форму грид, привяжите к нему результаты выборки данных. Что Вы изголяетесь то?!!


Кстати, возникло подозрение..
А Вы знаете, что есть TCheckBox и TDBCheckBox, DB - означает, что данный контрол предназначен для работы с НАБОРОМ ДАННЫХ.
Вы уверены, что, например, Вам в данном случае не хватит обыкновенного ComboBox?!!

И ещё. Не обижайтесь, если я ошибся в ваших знаниях, но, судя по вопросам, Вам бы сначала книжки по программированию БД под Delphi почитать....
Serge_Bliznykov вне форума Ответить с цитированием
Старый 16.01.2014, 15:43   #7
Scorpuha
Форумчанин
 
Регистрация: 10.10.2013
Сообщений: 177
По умолчанию

не обижаюсь, книжки и инет читаю.
на счет DB в курсе.
на счет грида чето не допонял.
Scorpuha вне форума Ответить с цитированием
Старый 16.01.2014, 16:00   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

насчёт грида. Традиционно принято использовать грид (выглядить как таблица) для отображения данных пользователю.
в DesignTime киньте на форму TDataSource (пусть это будет компонент с именем DataSource1), TDBGrid (пусть это будет DBGrid1), , свяжите DataSource1 (поле Dataset) с ADOQuery1, потом в DBGrid1 в поле DataSource укажите DataSource1, запустите программу (в которой выполните нужный запрос в ADOQuery1) и
увидите, что я имею в виду.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 16.01.2014, 16:13   #9
Scorpuha
Форумчанин
 
Регистрация: 10.10.2013
Сообщений: 177
По умолчанию

сделал, заполняется грид данными из таблицы. дальше предлагаете на клик по гриду выбирать программы для сотрудников?
Scorpuha вне форума Ответить с цитированием
Старый 16.01.2014, 16:43   #10
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от Scorpuha Посмотреть сообщение
сделал, заполняется грид данными из таблицы. дальше предлагаете на клик по гриду выбирать программы для сотрудников?
Т.е. Вы хотите, чтобы я объяснил Вам, что Вам нужно?!

я просто показал как использовать средство визуализации (отображения) данных.
А уж как и какие данные Вам отображать - это Вам решать.

кстати, мне по прежнему кажется, что Вы решаете какие-то небольшие, технические подзадачки, вместо того, чтобы
1) исходя из требуемых данных и функциональности нарисовать схему данных (таблицы и связи между ними - логическую и физическую модели)

2) исходя из функциональности и модели данных (построенных в п.1) разработать перечень решаемых задач.

3) придумать интерфейс, как вводить данные, как их отобразить и т.д.

4) запрограммировать пп.1-3.

5) отладить и попытаться запустить в опытную эксплуатацию. При этом не исключено возникновение проблем, которые потребуют возвращения к любому из вышевыполненных пунктов (начиная с п.1 - изменение структуры данных).

и вот только на этапе программирования (пункт 4) у Вас может возникнуть задача - как создать динамически TDBLookupComboBox (кстати, простите, я так и не понял, зачем его создавать "на лету" и что, собственно, в этом комбобоксе должно быть )!

Не надо на этапе проектирования жилого дома решать, простой или крестовой отвёрткой Вы будете прикручивать дверные ручки.
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Динамически созданный Control (PictureBox) itea4you.ru C# (си шарп) 4 27.10.2013 12:39
Обработчик на динамически созданный компонент lexo Общие вопросы Delphi 5 01.06.2013 20:27
Перетаскиавние формы за динамически созданный компонент MyIE Общие вопросы Delphi 1 10.10.2010 11:15
Динамически созданный обьект, процедуры heart Общие вопросы Delphi 3 09.05.2009 17:32
Динамически созданный tabSheet S@fer Общие вопросы Delphi 7 08.04.2009 12:03