powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Проблема со связями в таблицах
5 сообщений из 5, страница 1 из 1
Проблема со связями в таблицах
    #37579994
dima_18
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем добрый день!
Будьте добры помогите пожалуйста разобраться со связями в таблицах.
Есть таблица: katrid, а в ней поля:
id
namek

Есть таблица podrazd, а в ней поля:
id
namep

Есть таблица vydkatrid, а в ней поля:
id
id_katr
id_podr
vydk

Я организую связь следующим образом:

select vydkatrid
set order to tag id_katr
SELECT katrid
SET RELATION TO id INTO vydkatrid

select vydkatrid
set order to tag id_podr
SELECT podrazd
SET RELATION TO id INTO vydkatrid

На форме у меня 3 грида: 1 грид связан с таблицей katrid, второй связан с podrazd, третий связан с vydkatrid.

Я хочу ходя по первому гриду - чтоб менялись связи во второй таблице, стоя на записи в первом гриде и ходя по второму менялись записи третьего грида.

Т.е. надо завязать три таблицы. А у меня пока - хожу по первому гриду меняются записи третьего грида, и хожу по второму - меняются записи третьего грида. И получается первая таблица и вторая разобщены. Посоветуйте пожалуйста как чтоб все менялось и обновлялось. спасибо большое заранее за помощь.
...
Рейтинг: 0 / 0
Проблема со связями в таблицах
    #37580103
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это невозможно. Судя по Вашей схеме данных Вы имеете такую структуру

katrid <== vydkatrid ==> podrazd

Т.е. таблицы katrid и podrazd между собой напрямую не связаны. Только опосредовано через таблицу vydkatrid.

Если Вы хотите, чтобы таблица vydkatrid "фильтровалась" при помощи значений из двух таблиц, то через Relation эта задача также не решается. Relation - это взгляд на подчиненную таблицу, со стороны главной. Попытавшись взглянуть на одну и ту же таблицу из двух главных можно заработать косоглазие.

Обычно это делается через фильтры или запросы. Т.е. на форме 2 ComboBox и один Grid. ComboBox имеют источником данных соответственно таблицы katrid и podrazd (никак не связанные между собой), а в Grid отображается содержимое таблицы vydkatrid с наложенными фильтрами по выбранным значениям ComboBox.
...
Рейтинг: 0 / 0
Проблема со связями в таблицах
    #37580191
dima_18
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте Владимир!

Я прочитал Ваш ответ и навсякий раз сформулирую задачу кратно. Для общего понимания:
Пусть будут три таблицы, соответственно: A,B,C.

Таблица А - содержит ручки и их количество.
Ручки отдаются в комнаты - это таблица B.
А в каждой комнате куча сотрудников - которые разбирают эти ручки - это таблица С.

Что от меня требуется. Я отдаю ручки в комнаты. И когда я отдал в первую комнату (таблица B) - вычитается количество из первой таблицы данного типа ручек. А уже с помощью таблицы С, я хочу связать кто конкретно взял эти ручки из комнаты (B).

Затем допустим тотже сорт ручек - я отдаю в другую комнату (таблица B). И там также сотрудники разбирают из (таблица C).

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

Помогите пожалуйста с подсказкой на данную задачу - как правильно конструировать логику в данному смысле.

Спасибо большое!
...
Рейтинг: 0 / 0
Проблема со связями в таблицах
    #37580294
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Через Relation решить можно. Но довольно экзотическим способом. Даже не буду объяснять как, чтобы не вводить в искушение . Поясню в чем проблема

У Вас таблица "ручек" имеет две ссылки: на комнату и на сотрудника. Если я отберу все записи из таблицы ручек, которые ссылаются на какую-то одну запись таблицы комнат, то получу "дубли" сотрудников. Одному и тому же сотруднику в одной и той же комнате давали разные ручки. Получим такую картину

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
Комната 1
  |- Сотрудник 1
  |  |- Ручка 1
  |  |- Ручка 2
  |- Сотрудник 1
  |  |- Ручка 1
  |  |- Ручка 2

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

Подобные задачи решаются через запросы, которые отбрасывают дубли. Запросы можно оформит в виде Local View или CursorAdapter. На первых порах проще использовать Local View.

Тогда имеем такую схему

Grid_1 - список комнат "как есть"
Grid_2 - запрос, отбирающий по таблице ручек только уникальные (не повторяющиеся) значения сотрудников по текущей комнате из Grid_1
Grid_3 - запрос, отбирающий по таблице ручек только те значения, которые соответствуют текущему значению комнаты из Grid_1 и сотрудника из Grid_2

Обновление запросов выполняется в событии Grid.AfterRowColChange(). Соответственно, в Grid_1 обновляется сначала содержимое Grid_2, а затем, срабатывание события Grid_2.AfterRowColChange() вызовет обновление содержимого Grid_3.

Хотя, повторюсь, технически проще было бы решить задачу с двумя независимыми ComboBox и одним Grid.

=========================

PS: Если "дубли" невозможны, то задача решается путем открытия таблицы ручек дважды. С разными алиасами

Код: plaintext
1.
2.
3.
4.
Комната
  |- Ручки (алиас 1)
    |- Сотрудники
      |- Ручки (алиас 2)

При этом первая копия таблица Ручки (алиас 1) вообще не отображается. Служит только для связки. А на вторую копию таблицы Ручки (алиас 2) надо будет дополнительно накладывать фильтр по комнате на случай, если один и тот же сотрудник может работать в нескольких комнатах.
...
Рейтинг: 0 / 0
Проблема со связями в таблицах
    #37585209
dima_18
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте, ВладимирМ!

Большое спасибо за ответ. Да, я согласен с этим, как Вы сказали - и понял свою ошибку. Буду комбами скорее всего делать.
Или последний Ваш вариант с запросами. Еще раз большое Вам спасибо за советы.
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Проблема со связями в таблицах
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]