22.11.2019, 17:34 | #1 |
Участник
|
UserInfo
Новое поле в новое таблице связываю с UserInfo по полю name
Но выходит ошибка: Значение "" в поле "ФИО" не найдено в связанной таблице "Данные пользователя". С чем это может быть связано? |
|
22.11.2019, 17:56 | #2 |
Участник
|
Смею предположить что ошибка возникает на форме при создании записи, а именно при заполнении руками нового поля? Если так, то связь источников данных вероятнее всего сделано через InnerJoin и при заполнении нового поля руками тем значением которого нет в таблице UserInfo она и ругается. В данном как вариант для этого нового поля надо сделать лукапный метод чтобы значение выбиралось из связанной таблицы, а не вводилось руками.
|
|
23.11.2019, 08:49 | #3 |
Участник
|
Проверка на корректность вторичного ключа срабатывает даже если подчинённой таблицы нет на форме. Проверка происходит при вводе значения в поле, для которого настроена связь. В свойствах у Relation есть свойство Validate, которое отвечает за эту проверку
|
|
23.11.2019, 15:04 | #4 |
Участник
|
Связывай таблицы по полю UserId (или Id, не помню точно уже). Это уникальный первичный ключ на UserInfo. Если нужно будет ФИО, ты всегда сможешь его подтянуть. И это будет намного быстрее работать. Я не могу придумать ни одной причины, чтобы делать так, как ты сейчас пробуешь.
__________________
// no comments |
|
24.11.2019, 20:57 | #5 |
Участник
|
У меня и есть лукап.
|
|
25.11.2019, 08:56 | #6 |
Участник
|
Эта связь уже есть
|
|
25.11.2019, 09:46 | #7 |
Участник
|
Мда... Тут даже и не понятно с чего начинать... Ликбез по теории реляционных баз данных читать как-то глупо...
Ну, для начала, сообщение об ошибке надо понимать буквально. Вот, что написано, то и есть. У Вас в Вашей таблице среди записей есть поле с пустым значением Вашего поля. По этому пустому значению предпринимается попытка найти запись в подчиненной таблице. Ничего не находит, и выводит соответствующее предупреждение. Как так получилось - Вам лучше знать. Ищите, где такая пустота образовалась. Можно, конечно, разными настройками подавить это сообщение, но! Так связь между таблицами не делают. В теории (и практике) реляционных баз данных связь между таблицами осуществляют по специальным полям, на которые накладывают специфические ограничения. Прежде всего, по уникальности. А у таблицы UserInfo поле Name не уникально. Т.е. связь не однозначна Вторая проблема - поле Name может быть в любой момент изменено. Как следствие, Вы потеряете связь. Т.е. совершенно непредсказуемо для пользователя образуется связь с "левой" записью таблицы или наоборот, такая связь пропадет Поэтому, делают следующим образом. 1. В Вашей таблице в обязательном порядке создают поле Id с кодом записи из таблицы UserInfo. 2. Заполнение поля Id 2.1 Если значение поля Name приходит "из вне" системы, то при вводе имени в modifiedField выполняют поиск записи в таблице UserInfo по указанному пользователем имени и программно заполняют поле id В результате имеем 2 поля - значение пришедшие из вне для контроля и код записи справочника Axapta 2.2. Если в Вашей таблице надо просто выбрать запись из таблицы UserInfo, то просто Lookup для выбора Id и отображение поле Name, но уже из таблицы UserInfo
__________________
- Может, я как-то неправильно живу?! - Отчего же? Правильно. Только зря... |
|
|
За это сообщение автора поблагодарили: GSP (1). |
25.11.2019, 13:31 | #8 |
Участник
|
Цитата:
Сообщение от Владимир Максимов
Мда... Тут даже и не понятно с чего начинать... Ликбез по теории реляционных баз данных читать как-то глупо...
Ну, для начала, сообщение об ошибке надо понимать буквально. Вот, что написано, то и есть. У Вас в Вашей таблице среди записей есть поле с пустым значением Вашего поля. По этому пустому значению предпринимается попытка найти запись в подчиненной таблице. Ничего не находит, и выводит соответствующее предупреждение. Как так получилось - Вам лучше знать. Ищите, где такая пустота образовалась. Можно, конечно, разными настройками подавить это сообщение, но! Так связь между таблицами не делают. В теории (и практике) реляционных баз данных связь между таблицами осуществляют по специальным полям, на которые накладывают специфические ограничения. Прежде всего, по уникальности. А у таблицы UserInfo поле Name не уникально. Т.е. связь не однозначна Вторая проблема - поле Name может быть в любой момент изменено. Как следствие, Вы потеряете связь. Т.е. совершенно непредсказуемо для пользователя образуется связь с "левой" записью таблицы или наоборот, такая связь пропадет Поэтому, делают следующим образом. 1. В Вашей таблице в обязательном порядке создают поле Id с кодом записи из таблицы UserInfo. 2. Заполнение поля Id 2.1 Если значение поля Name приходит "из вне" системы, то при вводе имени в modifiedField выполняют поиск записи в таблице UserInfo по указанному пользователем имени и программно заполняют поле id В результате имеем 2 поля - значение пришедшие из вне для контроля и код записи справочника Axapta 2.2. Если в Вашей таблице надо просто выбрать запись из таблицы UserInfo, то просто Lookup для выбора Id и отображение поле Name, но уже из таблицы UserInfo |
|
25.11.2019, 14:03 | #9 |
Участник
|
Можете сюда выложить .xpo формы? Более понятно станет что да как
|
|
26.11.2019, 07:12 | #10 |
Участник
|
Писали же выше
Цитата:
S.Kuskov Проверка на корректность вторичного ключа срабатывает даже если подчинённой таблицы нет на форме. Проверка происходит при вводе значения в поле, для которого настроена связь. В свойствах у Relation есть свойство Validate, которое отвечает за эту проверку
|
|