Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Обновление значений полей взятых из присоединенной таблицы


Страницы:   1 2 3

Kostafey ©   (2007-04-17 18:54:00) 

В продолжение темы http://www.delphimaster.ru/cgi-bin/forum.pl?n=1&id=1173792940

Итак, есть набор даных (ADODataSet, СУБД Access), построенный как

select * from
(
 (
   Meropr
   left join TipMeropr on TipMeropr.TMer_id = Meropr.Mer_TMer_id
 )
 left join Valute on  Valute.V_id = Meropr.Mer_V_id
)
left join Location on  Location.L_id = Meropr.Mer_L_id

значения свойств

ADODataSetMeropr.Properties['Unique Table'].Value := 'Meropr';
ADODataSetMeropr.Properties['Resync Command'].Value := '...'
ADODataSetMeropr.Properties['Update Resync'].Value := adResyncAll;

соответствующим образом введены.

Проблема в том, что при изменении, например Meropr.Mer_TMer_id
значения других полей взятых из таблицы TipMeropr будут обновлены
только после выполнения Post.
Можно ли это каким-либо образом сделать до выполнения Post ?


Johnmen   (2007-04-22 15:28:00) [21]

Тогда ещё один вопрос - как организован справочник в плане уникального ключа?


Kostafey   (2007-04-22 15:15:00) [22]

> что за одну "операцию" выполняется внесение в справочник
> нового значения

Перед выбором имеется и такая возможность.


> и выбор его для подстановки в основной НД?

Да, да, все верно.


Johnmen   (2007-04-22 15:13:00) [23]

Правильно ли я догадываюсь, что за одну "операцию" выполняется внесение в справочник нового значения и выбор его для подстановки в основной НД?
И проблема именно в этом?


Kostafey   (2007-04-22 15:09:00) [24]

> А кроме того, разьве значения в DBLookupCombobox обновятся
> до Post?
> Попробую.

Да, конечно, изменения отображаются до выполнения Post.

Но тут вот какое дело. Мне не нужно иметь список всех записей из ListSource.
Т.е. DBLookupEdit был бы идеальным решением, но его нет.

Почему не устраивает DBLookupCombobox?
В примере [11] все упрощено, но если к Фамилии добавить Имя, Отчество и т.д.,
то получается, что выбирать значение из связанной таблицы по одному только полю в
DBLookupCombobox никак нельзя, а в другой форме (выбора значения связаннной таблицы)
можно и все поля показать, и поиск записи сделать.

А Вы случайно не знаете, где DBLookupEdit можно взять или, как вариант,
убрать кнопку в DBLookupCombobox для отображения выпадающего списка ?


Johnmen   (2007-04-22 15:03:00) [25]


> Дело в том, что для выбора значений полей из связанной (справочной
> таблицы)я использую другую форму, т.е. роль DBLookupCombobox
> выполняет DBEdit с кнопкойпринажатии на которую отображается
> форма с DBGrid.

Опять не понимаю... ЗАЧЕМ ДЛЯ ВЫБОРА ИЗ СПРАВОЧНОЙ ТАБЛИЦЫ используется не к селу не к городу DBEdit, а не специально для этого предназначенный DBLookupCombobox?


Kostafey   (2007-04-22 14:50:00) [26]

> Какие запросы, какие поля в НД.

Привети тексты запросов ?


> Зачем DBEdit, если существует DBLookupCombobox

Дело в том, что для выбора значений полей из связанной (справочной таблицы)
я использую другую форму, т.е. роль DBLookupCombobox выполняет DBEdit с кнопкой
принажатии на которую отображается форма с DBGrid.

А кроме того, разьве значения в DBLookupCombobox обновятся до Post?
Попробую.


> ЗЫ
> Заметь, что кроме меня никто в этой ветке не пытается что-
> то сказать. Я так думаю, что в связи с недостаточной ясностью
> постановки вопроса

За это спасибо, но как можно объяснить задачу кратко и в то же время
понятно? В [11] я это поробовал сдалать на упрощенном примере.


Johnmen   (2007-04-22 14:28:00) [27]


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

Нет.

> А чем ADODataSet плох?Запросы на получение наборов данных
> из разных таблиц,фильтрации, сортировки я делаю за счет SQL.

Он вполне хорош.
Теперь надо бы взглянуть с его позиций на [11]. Какие запросы, какие поля в НД. Зачем DBEdit, если существует DBLookupCombobox...

ЗЫ
Заметь, что кроме меня никто в этой ветке не пытается что-то сказать. Я так думаю, что в связи с недостаточной ясностью постановки вопроса...


Kostafey   (2007-04-22 01:06:00) [28]

> Вообще говоря, способы фильтрации и сортировки никакого
> отношения к способам редактирования не имеют.

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


> Рекомендую обратиться к Query компонентам, отказавшись навсегда
> от Table.

А чем ADODataSet плох?
Запросы на получение наборов данных из разных таблиц,
фильтрации, сортировки я делаю за счет SQL.


Johnmen   (2007-04-21 23:30:00) [29]

Вообще говоря, способы фильтрации и сортировки никакого отношения к способам редактирования не имеют.
Рекомендую обратиться к Query компонентам, отказавшись навсегда от Table.


Kostafey   (2007-04-21 23:06:00) [30]

Я ж хотел иметь гибкие наборы данных, чтобы в одном наборе данных можно было бы и все виды
фильтраций/сортировок проводить, и его же использовать для ввода/модификации данных !


Kostafey   (2007-04-21 23:05:00) [31]

Да нет, все я знаю про Лукап-поля, как раз наоборот и возникли такие проблемы,
что я отказался от их использования.
Необходимо было выполнять фильтрацию и сортировку по лукап-полям.


Johnmen   (2007-04-21 23:00:00) [32]

У меня такое ощущение, что ты не знаешь о лукапных полях.
Если это так, читай Lookup fields, TLookupCombobox, потренируйся добавлять лукапное поле в набор данных с пом. Field Editor'а(даблклик на компоненте - держателе НД, типа TQuery, TTable etc).


Kostafey   (2007-04-21 22:45:00) [33]

Источник Данных1 ссылается на Набор данных1


Kostafey   (2007-04-21 22:44:00) [34]

Короче,
Таблицы:

Table1:
 id
 Dogovor
 FK_Table2_id

Table2:
 id
 Familiya


Набор данных1: (работающий с Table1)

 Table1.id
 Table1.Dogovor
 Table1.FK_Table2_id
 Table2.Familiya


Form1 работает с Набором данных1, на ней есть
DBEdit1.DataSource= 'Источник Данных1';
DBEdit1.DataField= 'Table2.Familiya';

Form2 работает с Набором данных2 = Table2

Пользователь открывает Form1 и редактирует поле
Table1.Dogovor
Затем открывает Form2 и выибирает необходимое
Table2.Familiya

После чего происходит следующее:
-Form2 закрывается, пользователь возвращается к Form1
-Table2.id передается в Table1.FK_Table2_id
-DBEdit1.DataSource:= nil;
-DBEdit1.Text:=Table2.Familiya
-при Post/Cancel DBEdit1.DataSource:= 'Источник Данных1';

Работает, то оно работает но выглядит глуповато.


Kostafey   (2007-04-21 01:18:00) [35]

> [9] Kostafey ©   (21.04.07 01:11)

Похоже я несколько напутал с терминологией родительская-дочерняя таблицы.
Гм..


Kostafey   (2007-04-21 01:11:00) [36]

> Т.е. они известны? Откуда?

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


Johnmen   (2007-04-21 01:05:00) [37]


> DBEdit.Text я присваиваю данные, которые отобразились бы после Post.

Т.е. они известны? Откуда?


Kostafey   (2007-04-21 00:59:00) [38]

> Неясно вот это [1]

Попробую сказать то же самое другими словами.

Когда происходит изменение значения внешних ключей таблицы (указанной в 'Unique Table')
я присваиваю DataSource:=nil тем DBEdit, которые должны отображать поля из связанной
таблицы. То есть как раз те поля которые и изменятся послы выполнения Post.
DBEdit.Text я присваиваю данные, которые отобразились бы после Post.
Когда выполняется Post/Cancel все возвращается на круги своя и DBEdit.DataSource
получают прежние значения.

Так яснее или лучше на примере?


Johnmen   (2007-04-21 00:50:00) [39]

Да это [4] понятно, и почему после поста обновляется, тоже очевидно.
Неясно вот это [1]


Kostafey   (2007-04-21 00:49:00) [40]

В статье еще пример есть http://www.delphikingdom.com/zip/adopart3.zip(18k)
Можно с ним для наглядности поэкспериментировать.
нажать Button1 и менять значения в поле AbonentID.
Изменения не отобразятся до нажания Post.


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо