Форум: "Начинающим";
Текущий архив: 2007.04.22;
Скачать: [xml.tar.bz2];
ВнизОрганизация модификации данных в связанных таблицах. Найти похожие ветки
← →
Kostafey © (2007-04-04 13:28) [0]Подскажите пожалуйста как сделать следующее.
Пусть у нас есть 2 связанные таблицы. Первая с данными, вторая спрвочная.
Например:
Table1
T1_id - автоинкрементное поле
FIO - поля с данными
T2_id - поле связи
Table2
T2_id - автоинкрементное поле
Gorod - поля с данными
Нужно выполнить, например, добавление записи в основную таблицу (Table1).
При этом в поле ввода (пусть это будет DBComboBox) хотелось бы видеть
значения соответствующей справочной таблицы (Gorod).
Набор данных, в который производиться добавление записи должен содержать
только 1 таблицу. Поэтому понадобиться еще один набор данных для справочной таблицы.
А значание поля связи (T2_id) можно располагать в DBComboBox.Tag.
Это все хорошо для приведенного примера о двух таблицах. Но если таблиц больше.
Наверняка есть более рациональный путь ?
← →
Megabyte © (2007-04-04 13:54) [1]По-моему, тебе надо DBLookupComboBox.
← →
Kostafey © (2007-04-04 14:09) [2]> По-моему, тебе надо DBLookupComboBox.
Гм. что-т не могу понять как он работает.
DataSource - фактическая привязка к Table1
ListSource - выводимый список значений. Или нет так ?
А как осушествляется например добавление в основную таблицу поля связи
(для приведенного примера T2_id в Table1)
← →
Sonia © (2007-04-04 14:12) [3]ListSource, ListField - это для справочника, а
DataSource, DataField - это для Table1
← →
Sergey13 © (2007-04-04 14:13) [4]> [2] Kostafey © (04.04.07 14:09)
Почитай про лукап-поля. Для каждого справочника должно быть создано лукап-поле и быть открыт соответствующий датасет со справочными данными.
← →
Sonia © (2007-04-04 14:15) [5]Указываешь KeyField для справочной таблицы и в DataField указываешь FK на справочную
← →
Kostafey © (2007-04-04 16:12) [6]> Sonia, Sergey13, Megabyte
Вот спасибо как хорошо все объяснили !!!
Но вот что. Я нашел только 2 Lookup компонента (DBLookupListBox, DBLookupComboBox).
А как быть если нужно например:
1) Просто вывести значение Gorod (для приведеннго примера) в компонент типа TDBEdit
(не весь список значений а только значение соответствующее текущей записи)
и при этом иметь в этом же компоненте фактическое значение FK: T2_id.
В таком случае есть более грамотное решение чем в [0]?
2) Выводить значения нескольких полей в какой-то аналог ListField, но если у нас
есть помимо значение Gorod еще и Strana?
← →
Sonia © (2007-04-04 16:33) [7]
> Просто вывести значение Gorod (для приведеннго примера)
> в компонент типа TDBEdit
> (не весь список значений а только значение соответствующее
> текущей записи)
А почему нельзя для этого использовать DBLookupComboBox?
> и при этом иметь в этом же компоненте фактическое значение
> FK: T2_id.
Ты и получишь T2_id при выборе значения из DBLookupComboBox, если правильно организуешь select
> 2) Выводить значения нескольких полей в какой-то аналог
> ListField, но если у нас
> есть помимо значение Gorod еще и Strana?
ТЫ можешь организовать select так, что при выборе в DBLookupComboBox города в DBEdit, например, у тебя будет выводиться страна
Или создать на страну отдельный DBLookupComboBox
← →
Kostafey © (2007-04-04 16:55) [8]> [7] Sonia © (04.04.07 16:33)
Все-то это хорошо, все-то это здорово.
Но несколько не то...
Дело в том, что с Table1,2 я взял для простоты.
В реальности Table2 точно такая же таблица со множеством полей и своими полями связей, берущими значения из справочных таблиц, и т.д.
Поэтому для выбора значения записи таблицы, будем называть ее Table2 я делал отдельную форму.
А вот результат этого выбора может быть представлен одним-двумя полями Table2 которые заносятся в поле DBEdit формы
редактирования занчений записи Table1. Так вот я хотел чтобы T2_id из Table2 заносилось в FK: T2_id из Table1 при выполнении Post.
Хотел узнать как это правильнее реализовать, где хранить T2_id и т.д.
Во всяком случае, спасибо за участие!
← →
Sonia © (2007-04-04 17:15) [9]
> А вот результат этого выбора может быть представлен одним-
> двумя полями Table2 которые заносятся в поле DBEdit формы
У тебя 2 поля заносятся в 1 Edit? А как ты их различаешь?
← →
Kostafey © (2007-04-04 17:22) [10]> У тебя 2 поля заносятся в 1 Edit? А как ты их различаешь?
Псевдокод, конечно:
//ADODataSet2 - подключен н Table2
Edit1.text:=ADODataSet2.FieldByName("Strana").asString+" "+ADODataSet2.FieldByName("Gorod").asString;
Edit1.tag:=ADODataSet2.FieldByName("T2_id").asInteger;
...
//ADODataSet1 - подключен н Table1
ADODataSet1.FieldByName("FK_T2_id").asInteger:=Edit1.tag;
ADODataSet1.Post;
Теперь понимяу чего я хочу?
Работать-то оно работает, но уж больно притянуто за уши...
← →
Kostafey © (2007-04-04 17:37) [11]Кроме того, не понятно как загружать в форме редактирования значений Table1
текущее значение в Edit1.text. Это ж фактически нужно еще один набор данных
делать специально чтобы получить и вывести это единственное значение.
← →
Kostafey © (2007-04-04 17:46) [12]Вообще, фактически вопрос можно свести к следующему:
Как сделать так чтобы DBLookupListBox или DBLookupComboBox выводили бы
значение соответствующее только текущей записи Table1 из Table2 ?
Это уже знчительно упростило бы задачу.
← →
Kostafey © (2007-04-04 19:30) [13]Начал копать в сторону TXXXField.
Интересно ж получается LookupKeyFields может быть несколко,
а вот LookupResultField - только одно.ничего не понимаю (с)
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2007.04.22;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.043 c