Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как передать значения колонки DBGrid ComboBox-у!? База db1.mdb, в ней несколько таблиц... 
V
    Опции темы
Rodeon
  Дата 29.1.2009, 21:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 124
Регистрация: 28.8.2008
Где: Россия, Ухта

Репутация: нет
Всего: нет



Имееться база db1.mdb, в ней несколько таблиц T1, T2, T3 и т.д.
Список таблиц фиксированный, имена их тоже фиксированны!
В одних таблицах содержаться данные, в других параметры и списки для этих самых данных!
Сама таблица открываеться замечательно на редактирование, но встала проблемма, при добавлении новой записи к таблице данных не в ручную каждый раз вводить данные, а данные брались бы из этой же базы из таблицы параметров!
Таблица параметров как например!
---------------------------------------------------------------------------------------------
: Идентификатор : Поле : Цвет : Параметр : и. т.д.
---------------------------------------------------------------------------------------------
:             1             :  0.01 :   ГБ   :     СВД       : и т.д
---------------------------------------------------------------------------------------------
:             2             :  0.02 :   БГ   :     СВД       : и т.д
---------------------------------------------------------------------------------------------
:             3             :  0.02 :   ГЖ  :     СВД       : и т.д
---------------------------------------------------------------------------------------------
:             4             :  0.01 :   ЛБ   :     УМК       : и т.д
---------------------------------------------------------------------------------------------
:             5             :  0.03 :   МБ   :     ТГВ       : и т.д
и.т.д

Дохожу до заголовка заблицы:
ADOConnection.GetTableNames(ComboBox.Items);
...
ADOConnection.GetFieldNames(ComboBox.Text, ComboBox1.Items);
Пробую данные колонки передать в еще один Combobox:
adotable.TableName:='Etalon0';
adotable.Active:=true;
Пробую и так, но это лишь заголовки колонок выдает!
ComboBox2.Items:=adotable.FieldDefList;
А так вообще ничего не дает!?
ComboBox2.Items:=dbgrid.Columns.Items[1].PickList;

Подскажите плиз. как реализовать такое!


Это сообщение отредактировал(а) Rodeon - 29.1.2009, 23:43
PM MAIL   Вверх
Akella
Дата 29.1.2009, 23:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 29
Всего: 329



Как я понял, то у тебя есть таблица основная и таблицы-справочники?
PM MAIL   Вверх
Rodeon
  Дата 30.1.2009, 00:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 124
Регистрация: 28.8.2008
Где: Россия, Ухта

Репутация: нет
Всего: нет



Да, все правильно! и основная таблица, которых несколько и справочники к ним храняться в одной базе! заполняю их и сейчас, но многие данные повторяються и каждый раз их приходиться вбивать заново в новую строку в таблице, что нецелесообразно и времени тратиться больше! Хотелось бы что бы при открытии базы в нухные combobox-ы азгружались колонки данных с таблиц. Может есть какая нибудь функция натипо этих:
ADOConnection.GetTableNames(ComboBox.Items);
ADOConnection.GetFieldNames(ComboBox.Text, ComboBox1.Items);
только что бы саму колонку данных передавала в ComboBox!?


Это сообщение отредактировал(а) Rodeon - 30.1.2009, 00:59
PM MAIL   Вверх
Akella
Дата 30.1.2009, 17:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 29
Всего: 329



Есть основная таблица apart, в которой есть поля: ID, Input_Date, ID_TYPE

ID_TYPE - это поле справочника

Есть справочник TYPES, в котором только 2 поля ID и Name

Так вот, пользователь в выпадающем списке видит значения поля Name из таблицы TYPES.
Цитата

___ID_____|____NAME_____
10_____________|Первый тип___
11_____________|Второй тип___
12_____________|Третий тип___



Допустим, что пользователь выбрал какую-то строку из списка: id = 10, Name = 'Первый тип'. Теперь наша задача, как программистов присвоить основной таблице полю ID_TYPE какое значение?? Правильно - 10.

Выпадающий список соединяем с набором данных, в наборе данных такой запрос:
Код
select id, name from types


Теперь когда пользователь выберет что-то из списка, то будет видеть поле Name при соответствубщей настройке выпадающего списка - DBCombobox.

При редактировании основной таблицы мы присвоим значение поля ID справочной таблицы, полю ID_TYPE основной таблицы.

И в основной таблице будет запись
Цитата

ID |  Input_Date| ID_TYPE
----------------------------------
1  |  30.01.2009| 10

PM MAIL   Вверх
Rodeon
Дата 30.1.2009, 19:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 124
Регистрация: 28.8.2008
Где: Россия, Ухта

Репутация: нет
Всего: нет



В принципе направление правильное, но немного не то, что я имел ввиду!
Вот таблица в архиве! db.mdb
Для уменьшения объема удалил несколько таблиц!
Таблица в базе T_18 - это таблица данных!
Поля в ней (балл, цвет и битумоид) можно заполнять вручную, а можно было бы из списка, заранее загруженного брать!
Для поля (балл) все возможные комбинации храняться в другой таблице D1_35 в колонке "код" комменты к ним в колонке "Наименнование"
Для поля (цвет) все возможные комбинации храняться в другой таблице D1_36 в колонке "код" комменты к ним в колонке "Наименнование"
Для поля (битумоид) все возможные комбинации храняться в другой таблице D1_37 в колонке "код" комменты к ним в колонке "Наименнование"
и вот когда будет создаваться новая запись в таблице T_18, указываеться вручную "кровля", "подошва" а (балл, цвет и битумоид) хотелось бы что-бы брались с выбранных в ComboBox-ах! А вот как в них загрузить данные из таблиц я не знаю!?
Т.е. как из таблиц D1_35, D1_36, D1_37 с колонок "код" передать все значения в соответствующие Combobox-ы!?

Присоединённый файл ( Кол-во скачиваний: 3 )
Присоединённый файл  db1.rar 301,37 Kb
PM MAIL   Вверх
Akella
Дата 30.1.2009, 20:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 29
Всего: 329



Ты уж извини, у меня нет времени да и желания (( разбираться в твоей базе.
PM MAIL   Вверх
Rodeon
Дата 30.1.2009, 20:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 124
Регистрация: 28.8.2008
Где: Россия, Ухта

Репутация: нет
Всего: нет



Ну может есть тогда функция какая передать данные со всей колонки из таблицы и занести их в combobox или присвоить значение колонки combobox-у?
PM MAIL   Вверх
Akella
Дата 30.1.2009, 20:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 29
Всего: 329



Цитата(Rodeon @  30.1.2009,  20:34 Найти цитируемый пост)
Ну может есть тогда функция какая передать данные со всей колонки из таблицы и занести их в combobox 

 smile  дык в цикле по таблице и заполняй комбобокс, в чём проблема-то?
это всего несколько строк кода

Добавлено через 5 минут и 31 секунду
Цитата(Rodeon @  30.1.2009,  20:34 Найти цитируемый пост)
присвоить значение колонки

Колонки чего? Грида? Советую работать не с гридом, а с набором данных.
http://forum.vingrad.ru/index.php?showtopi...t&p=1767484
PM MAIL   Вверх
Данкинг
Дата 30.1.2009, 20:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 35
Всего: 130



Цитата(Akella @  30.1.2009,  20:41 Найти цитируемый пост)
дык в цикле по таблице и заполняй комбобокс, в чём проблема-то?

Проблема тут в скорости будет, если число записей соответствующее. Но другого способа я лично не вижу...


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
Пикачу
Дата 30.1.2009, 22:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 18.7.2006
Где: Московская област ь.

Репутация: нет
Всего: нет



Цитата(Rodeon @ 30.1.2009,  20:34)
Ну может есть тогда функция какая передать данные со всей колонки из таблицы и занести их в combobox или присвоить значение колонки combobox-у?

Rodeon У меня не много опыта в программировании, это больше хоби чем работа.
Я  поступил так.  Может это и не оптимальный код и при большом количестве данных займет много времени, не знаю. У меня заполняло около 600 значений довольно быстро. 

Код

 with QueryMark do begin   {Создадим SQL запрос для считавания маркировок}
      Active:=false; 
      ConnectionString:='Provider=MSDAORA.1;Password=*****;User ID=****;Data Source=dbsbase; Persist Security Info=True'; {Укажем строку подключения} 
        with SQL do begin 
          Clear; {Очистим SQL запрос}
          Add('SELECT MARK FROM SKU'); {Выберем поле маркировок}
        end;
      Active := True; {Активируем}
      First; {Укажем на первую запись}
  end;
    {Очистим комбобокс статуса и считаем в него данные и добавим свое значение}
    ComboS.Items.Clear; {Очищаем}
    ComboS.Items.Add('Все Маркировки'); {Дополняем своим значением}
  While not QueryMark.EOF do
    begin
      ComboS.Items.Add(QueryMark.FieldByName('MARK').AsString); {Заполняем комбобокс значениями}
      QueryMark.Next;
    end;
      ComboS.ItemIndex :=0; {Установим в комбобоксе первое значение}
    
PM MAIL   Вверх
Rodeon
  Дата 30.1.2009, 22:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 124
Регистрация: 28.8.2008
Где: Россия, Ухта

Репутация: нет
Всего: нет



Забыл сказать, я в грид только вывожу данные а работаю как раз с набором!
Akella спасибо большое за ответ, то что нужно было!
ComboBox2.Items.Add(ADOTable.FieldList.Fields[1].asString);
Я оказываеться путал местами:
писал ADOTable.Fields[1] и пытался подобрать дальше метод...

Спасибо всем:
вот что вышло в итоге:
Код

For i:= 0 to Adotable.RecordCount-1 do begin
ComboBox2.Items.Add(ADOTable.Fields[0].AsString);
adotable.Next;
end;


Пикачу, вам также спасибо, но пока я писал свое сообщение вы уже опубликовали свое!  smile 

Akella правильно? Вы про эти несколько строк писали?

Это сообщение отредактировал(а) Rodeon - 30.1.2009, 22:33
PM MAIL   Вверх
Akella
Дата 30.1.2009, 22:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 29
Всего: 329



Цитата(Данкинг @  30.1.2009,  20:49 Найти цитируемый пост)
Проблема тут в скорости будет, если число записей соответствующее. Но другого способа я лично не вижу...

Не будет проблем в скорости.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема »


 




[ Время генерации скрипта: 0.0520 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.