|
|
|
Форма с источником-запросом из нескольких таблиц
|
|||
|---|---|---|---|
|
#18+
Помогите разобраться в трех соснах - описание долгое, но короче - никак и уж больно сильно достало!!!!!!! Преамбула(упрощенная и не суть вообще) : Ведем учет контактов с клиентами (клиент - это предприятие) - каждый день мы регистрируем с каким клиентом разговаривали ( в данный день с одним клиентом все переговоры регистрируется как один контакт ). При этом при контакте отмечаем - дату контакта, клиента и - кто был от клиента. Ведем т.о. три таблицы - справочник клиентов,справочник контактных лиц и операционную таблицу контактов. Обращаю внимание на условие - на момент заполнения справочника клиентов еще м.б. неизвестно с какими контактными лицами от этого клиента мы будем контактировать Теперь о проблеме - как это реализовать : Делаем Таблицы : ________________ Клиенты (PK:ИНН) : ИНН - связан с ообеспеч целост данных с ИНН в КонтЛица и Контакты Наим - наименование клиента ... - остальные поля КонтЛица (PK:ИНН,ФИО) Id - суррогатный ключ (счетчик) связан с ообеспеч целост данных с Контакты.IdKontLica ИНН - FK.Клиенты.ИНН (внешний ключ для Клиенты.ИНН ) ФИО Тел ... Контакты (PK:Дата,ИНН) : Id - суррогатный ключ (счетчик) Дата ИНН - FK.Клиенты.ИНН IdKontLica - FK.КонтЛица.Id (не обязательное!) ... Надо реализовать Желание пользователя видеть в форме(ленточной/табличной-не важно) список контактов, каждую запись которого он мог бы редактировать(!) и добавлять(!) в этот список новые записи. Причем Запись в списке должна ключать рекзизиты таблицы Контакты и одновремено таблиц Клиенты (Наим) и КонтЛица (ФИО лица, который представлял клиента при этом контакте) Так вот, если я строю форму на основе запроса SELECT Контакты.*, КонтЛица.ФИО FROM Клиенты INNER JOIN (КонтЛица INNER JOIN Контакты ON КонтЛица.Id = Контакты.IdKontLica) ON (Клиенты.ИНН = Контакты.ИНН) AND (Клиенты.ИНН = КонтЛица.ИНН); то запрос обновляем, НО! при попытке оставить незаполненным поле IdKonLica, а оно ,как я говорил,необязательное, выдается сообщение: В таблице КонтЛица ядром базы данных MsJet не найдены записи с совпадающим ключевым полем 'IdKontLica' Что я и не могу никак побороть. Может, описанная структура данных неправильная,-так ,вроде - три таблицы, все - верно с ключами и связями ?! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2004, 21:21 |
|
||
|
Форма с источником-запросом из нескольких таблиц
|
|||
|---|---|---|---|
|
#18+
SELECT Контакты.*, КонтЛица.ФИО FROM Клиенты INNER JOIN (КонтЛица INNER JOIN Контакты ON КонтЛица.Id = Контакты.IdKontLica) ON (Клиенты.ИНН = Контакты.ИНН) AND (Клиенты.ИНН = КонтЛица.ИНН); То, что я выделил красным, лишнее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2004, 21:28 |
|
||
|
Форма с источником-запросом из нескольких таблиц
|
|||
|---|---|---|---|
|
#18+
Пробовал и так - все-равно то же сообщение о необходимости IdKonLica ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2004, 23:37 |
|
||
|
Форма с источником-запросом из нескольких таблиц
|
|||
|---|---|---|---|
|
#18+
И еще. 1. КонтЛица INNER JOIN Контакты - лучше RIGHT JOIN (иначе не покажет те записи, где контактное лицо не выбрано). 2. Видимо, надо убрать обеспечение целостности данных между этими двумя таблицами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2004, 23:42 |
|
||
|
Форма с источником-запросом из нескольких таблиц
|
|||
|---|---|---|---|
|
#18+
Да, я тоже так мыслил, но RIGHT JOIN дает необновляемый запрос, а обеспечение целостности убирал - не помогает, и ЕЩЕ - эти ограничения на целостность НЕ МЕШАЮТ, если я просто редактирую(или добавляю запсись ) в таблицу Контакты и , как видно, не при чем здесь - дело ,видимо, в запросе, который не будет обновляемым, НО,но,... Как же решать поставленную задачу, мне она представляется обычной, но может, я не прав, может это для Access не посильно, надо в Форме разделять данные по таблицам а таким единым запросом никак ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2004, 23:52 |
|
||
|
Форма с источником-запросом из нескольких таблиц
|
|||
|---|---|---|---|
|
#18+
Я сейчас не поленился и построил у себя это все. У меня работает. Правда, я строил с учетом всех трех собственных замечаний. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2004, 00:07 |
|
||
|
Форма с источником-запросом из нескольких таблиц
|
|||
|---|---|---|---|
|
#18+
2 Владимир Саныч > НЕ поленись еще ,Христа ради, кинь сархивированную базку на yuniki@rambler.ru иначе - не въеду, в чем дело, сам эти примеры уже понастраивал... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2004, 00:34 |
|
||
|
Форма с источником-запросом из нескольких таблиц
|
|||
|---|---|---|---|
|
#18+
Отправлено! :^) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2004, 00:42 |
|
||
|
Форма с источником-запросом из нескольких таблиц
|
|||
|---|---|---|---|
|
#18+
В случае с Санычем вариант "Христа ради" не пройдет. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2004, 01:06 |
|
||
|
Форма с источником-запросом из нескольких таблиц
|
|||
|---|---|---|---|
|
#18+
:^) Я об этом подумал, но решил не комментировать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2004, 01:08 |
|
||
|
Форма с источником-запросом из нескольких таблиц
|
|||
|---|---|---|---|
|
#18+
спаси вас бог; у думаю, со временем вам воздастся А по предмету - вроде все уже идет у меня, видимо, мешало сомнение , что такие запросы - т.е. в одной записи редактировать и добавлять данные из нескольких таблиц вообще возможны и непонимание их действия в формах ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2004, 02:01 |
|
||
|
Форма с источником-запросом из нескольких таблиц
|
|||
|---|---|---|---|
|
#18+
:^) Интересно, однако. Один и тот же запрос работает, если веришь в такие запросы, и не работает, если не веришь... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2004, 02:04 |
|
||
|
Форма с источником-запросом из нескольких таблиц
|
|||
|---|---|---|---|
|
#18+
Аминь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2004, 02:14 |
|
||
|
Форма с источником-запросом из нескольких таблиц
|
|||
|---|---|---|---|
|
#18+
2 Владимир Саныч Интересно, однако. Один и тот же запрос работает, если веришь в такие запросы, и не работает, если не веришь... > Я не знаю, от большой это мудрости , или ума остроты , но воистину это так! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2004, 02:39 |
|
||
|
Форма с источником-запросом из нескольких таблиц
|
|||
|---|---|---|---|
|
#18+
ВСУ меня работает. Правда, я строил с учетом всех трех собственных замечаний. Не поленился и тако же попробовал. Если не использовать твои замечания, ничего не работает.:) ------------- 1>Id - суррогатный ключ (счетчик) связан с ообеспеч целост данных с Контакты.IdKontLica 2> dKontLica - FK.КонтЛица.Id (не обязательное!) Это как? С одного конца обеспечение целостности данных, а с другого - необязательное поле? > НО! при попытке оставить незаполненным поле IdKonLica, > а оно ,как я говорил,необязательное, выдается сообщение При такой схеме данных безо всяких запросов нельзя оставить пустым поле idKontLica в таблице КонтЛица. Не нужно на джет пенять, коли структура непонятная. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2004, 04:49 |
|
||
|
Форма с источником-запросом из нескольких таблиц
|
|||
|---|---|---|---|
|
#18+
Ну мне тема интересна, поэтому отвечу , хотя уж решилось : 2 Geo > 1>Id - суррогатный ключ (счетчик) связан с ообеспеч целост данных с Контакты.IdKontLica 2> dKontLica - FK.КонтЛица.Id (не обязательное!) Это как? С одного конца обеспечение целостности данных, а с другого - необязательное поле? > Все у меня верно и Jet пинать не надо - cо стороны главной таблицы обеспечение целостности, со стороны подчиненной - поле необязательное ( Ну это часто можно видеть : например, главная - некий независимый справочник, а подчиненная - использующая этот справочник таблица. Совсем не обязательно, что поле в ней ссылающееся на справочник обязано быть заполненным ) Да и потом все работает со всеми обеспечениями целостности!!! Мешает ТОЛЬКО ОДНО - "AND (Клиенты.ИНН = КонтЛица.ИНН);" PS Хотя, конечно как не попинать Jet, раз уж речь зашла об этом : В Access стоит фообще говоря 3 галки : обеспечение целостности - Так что значит эта без остальных двух - неясно! каскадное обновление каскадное удаление И крайне интерес момент наботы связанный с RIGHT и NULL значениями ! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2004, 18:48 |
|
||
|
Форма с источником-запросом из нескольких таблиц
|
|||
|---|---|---|---|
|
#18+
авторобеспечение целостности - Так что значит эта без остальных двух - неясно! Эта без остальных двух значит, что можно заносить только те значения, которые есть во второй таблице. авторИ крайне интерес момент наботы связанный с RIGHT и NULL значениями ! RIGHT JOIN (как и LEFT JOIN) показывает все записи одной из таблиц, включая те, у которых нет соответствующей записи во второй таблице. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2004, 18:53 |
|
||
|
Форма с источником-запросом из нескольких таблиц
|
|||
|---|---|---|---|
|
#18+
BC прав, а я напрочь наврал "При такой схеме данных безо всяких запросов нельзя оставить пустым поле idKontLica в таблице КонтЛица." Можно оставить. Прошу прощения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2004, 14:09 |
|
||
|
Форма с источником-запросом из нескольких таблиц
|
|||
|---|---|---|---|
|
#18+
А я сейчас проверил. В моем посте от 10 апр 04, 23:42 второе утверждение лишнее. Целостность данных можно оставить. Необязательность поля не помеха. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2004, 14:15 |
|
||
|
|

start [/forum/topic.php?fid=45&msg=32476632&tid=1675388]: |
0ms |
get settings: |
11ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
189ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
36ms |
get tp. blocked users: |
1ms |
| others: | 278ms |
| total: | 542ms |

| 0 / 0 |
