|
|
|
Как сделать обновляемой хитрую связь?
|
|||
|---|---|---|---|
|
#18+
Есть 2 таблицы: Dogovora: Dog_id ID договора (ключевое) N_dog Номер договора поля атрибутов (не участвуют в связях) Dog_to_Dop_soglash: Dog_id ID договора N_Dop_soglash Номер доп. соглашения Связь 1:М осуществляется по полю N_dog. Каждый договор может быть как просто договором, так и дополнительным соглашением по договору. Атрибуты у доп. соглашения такие же как и у договора и, фактически доп. соглашение является тем же договором. Хочу сделать связанные формы, чтоб к конкретному договору добавлять доп. соглашения. Вот как выглядит запрос: SELECT Dog_to_Dop_soglash.Dog_id, Dogovora.Dog_id, Dog_to_Dop_soglash.N_dop_soglash, Dogovora.N_dog, Dogovora.* FROM Dogovora INNER JOIN Dog_to_Dop_soglash ON Dogovora.Dog_id = Dog_to_Dop_soglash.N_dop_soglash; Привязки работают, формы показываются корректно, но при удалении и добавлении данных возникают ошибки (такой индекс уже существует, не могу добавить данные, таблица Dogovora не содержит необходимого id и т.п.) По всей видимости данные во вспомогательной таблице не добавляются и не удаляются (проверял). Как сделать так, чтоб все-таки в доп. таблице данные обновлялись??? Спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2004, 03:28 |
|
||
|
Как сделать обновляемой хитрую связь?
|
|||
|---|---|---|---|
|
#18+
Может лучше использовать подчиненные формы В главной форме отображаете запись из таблицы Dogovora, а в подчиненной связазанные записи из таблицы Dog_to_Dop_soglash ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2004, 10:24 |
|
||
|
Как сделать обновляемой хитрую связь?
|
|||
|---|---|---|---|
|
#18+
Формы являются подчиненными. Проблема в том, что в таблице доп. соглашения хранятся только привязки доп. соглашений к договорам. И эта табличка не обновляется.. :(( Например у 10 договора есть доп.соглашения 20 и 21. Таблица доп. договора тогда выглядит так: Dog_to_Dop_soglash: Dog_id N_dop_soglash 10 20 10 21 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2004, 12:35 |
|
||
|
Как сделать обновляемой хитрую связь?
|
|||
|---|---|---|---|
|
#18+
А что является первичным ключом в каждой из таблиц? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2004, 12:39 |
|
||
|
Как сделать обновляемой хитрую связь?
|
|||
|---|---|---|---|
|
#18+
Читаем внимательнее... В первой таблице Dog_id, во второй ключа нет, оба поля индексируемые ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.05.2004, 00:18 |
|
||
|
Как сделать обновляемой хитрую связь?
|
|||
|---|---|---|---|
|
#18+
Что-то я запутался. По-моему, вот эти два утверждения противоречат друг другу: авторСвязь 1:М осуществляется по полю N_dog. Dogovora INNER JOIN Dog_to_Dop_soglash ON Dogovora.Dog_id = Dog_to_Dop_soglash.N_dop_soglash; И еще: авторКаждый договор может быть как просто договором, так и дополнительным соглашением по договору. Какие из этих трех вхождений слова договор относятся к первой таблице, а какие ко второй? Может, с примером данных станет понятнее... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.05.2004, 00:25 |
|
||
|
Как сделать обновляемой хитрую связь?
|
|||
|---|---|---|---|
|
#18+
Вот пример таблицы и тип связи. Галки стоят все. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.05.2004, 23:37 |
|
||
|
Как сделать обновляемой хитрую связь?
|
|||
|---|---|---|---|
|
#18+
Первое, что бросается в глаза. В запросе указана связь Dogovora.Dog_id = Dog_to_Dop_soglash.N_dop_soglash а на схеме такой связи между таблицами нет. То есть надо таблицу Dogovora поместить на схему еще раз (она получит название Dogovora_1) и привязать так, как в запросе. Второе. Я не знаю, как сделаны форма и сабформа, какие RecordSource'ы у той и другой и как организована связь между ними, но я бы сделал так: главная форма: SELECT * FROM Dogovora WHERE Dog_id in (SELECT Dog_id FROM Dog_to_Dop_soglash) сабформа: SELECT Dogovora.*, Dog_to_Dop_soglash.Dog_Id AS ParentId FROM Dogovora INNER JOIN Dog_to_Dop_soglash ON Dogovora.Dog_id = Dog_to_Dop_soglash.N_dop_soglash; поля для связи: LinkMasterFields = Dog_id LinkChildFields = ParentId ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.05.2004, 23:51 |
|
||
|
Как сделать обновляемой хитрую связь?
|
|||
|---|---|---|---|
|
#18+
При этом новая связь, которую я предложил добавить, будет 1:1. Это не есть хорошо. Лучше было бы поле ParentId добавить прямо в таблицу Dogovora (и заполнить его из Dog_to_Dop_soglash.Dog_id), а таблицу Dog_to_Dop_soglash убрать как ненужную. И тогда на схеме связей будет только одна связь между двумя экземплярами одной таблицы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.05.2004, 23:57 |
|
||
|
Как сделать обновляемой хитрую связь?
|
|||
|---|---|---|---|
|
#18+
Тогда у каждого договора будет ParentId. Вполне возможен такой вариант, что доп. соглашение ссылается на доп. соглашение... а такого по бизнес-логике быть не может.. Как убрать такую нежелетельную возможность? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.05.2004, 16:59 |
|
||
|
Как сделать обновляемой хитрую связь?
|
|||
|---|---|---|---|
|
#18+
Просто при добавлении/изменении добавить проверку. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.05.2004, 19:38 |
|
||
|
Как сделать обновляемой хитрую связь?
|
|||
|---|---|---|---|
|
#18+
Первое, что бросается в глаза - это проблема в некорректной связке в запросе: SELECT Dog_to_Dop_soglash.Dog_id, Dogovora.Dog_id, Dog_to_Dop_soglash.N_dop_soglash, Dogovora.N_dog, Dogovora.* FROM Dogovora INNER JOIN Dog_to_Dop_soglash ON Dogovora.Dog_id = Dog_to_Dop_soglash. N_dop_soglash ; вместо выделенного наверно имелось ввиду Dog_id Это если связь между таблицами по Dog_id Если Вы хотите, чтобы было дерево договоров и доп.соглашений, то надо и те и другие хранить в одной таблице с ParentID, если нет, то Ваш вариант вполне нормален для того, чтобы доп.соглашение ссылалось только на какой нибудь договор. Да и еще, наверно нужно подкорректировать: главная форма: SELECT * FROM Dogovora WHERE Dog_id in (SELECT Dog_id FROM Dog_to_Dop_soglash) - в главной форме нельзя увидеть договора без доп.соглашений Если заменить просто на SELECT * FROM Dogovora, тогда все будет нормально. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2004, 15:37 |
|
||
|
|

start [/forum/topic.php?fid=45&msg=32511006&tid=1674764]: |
0ms |
get settings: |
8ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
489ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
35ms |
get tp. blocked users: |
1ms |
| others: | 202ms |
| total: | 765ms |

| 0 / 0 |
