|
![]() |
#1 |
Участник
|
Цитата:
Сообщение от Corsar
![]() Собственно вопрос не по коду, а по Relation. Там есть две таблички : "master" tutorial_Form_Dynalink1 и "slave" tutorial_Form_Dynalink2. В обеих таблицах есть поля VendAccount (EDT-> VendAccount), ItemId (EDT-> ItemId)
на tutorial_Form_Dynalink2 создан Relation tutorial_Form_Dynalink1 (validate=YES) tutorial_Form_Dynalink2.VendAccount==tutorial_Form_Dynalink1.VendAccount tutorial_Form_Dynalink2.ItemId == tutorial_Form_Dynalink1.ItemId Просто не понимаю , почему не происходит "validation" (данные во второй таблице не зависят от данных в основной таблице не смотря на существующий Relation) ? В вашем примере вы просто не можете физически ввести в поля VendAccount и ItemId в таблице tutorial_Form_Dynalink2 значения, которые бы удовлетворяли значениям полей в записях из tutorial_Form_Dynalink1: после ввода значения поля ItemId вы получаете пару ['', 'Стол'], которая не встречается в tutorial_Form_Dynalink1; если начать вводить с поля VendAccount, то вы получите пару ['3000', ''], которая тоже не встречается в master-таблице. Именно поэтому ядро не проверяет такие relation'ы, когда прописано более одной связи типа "нормально"; проверяются лишь relation'ы с одной связью типа "нормально" и (опционально) связями типа "поле фиксировано" и/или "поле ссылки фиксировано". Реализовать нужную вам проверку можно лишь программно - где-нить в validateWrite(). |
|
|
За это сообщение автора поблагодарили: Corsar (1). |
![]() |
#2 |
Участник
|
Да на axaptapedia.com - дело вообщем даже не в примере (он демонстрирует совершенно другое). Увидел Relation между таблицами , ну и решил в табличном браузере напрямую ввести данные и посмотреть, как этот Relation среагирует на "невалидные" данные (я теоретически о них читал и представляю, как они работают, вот и решил попробовать практически)
Всё таки правильно ли я понял, что универсального рецепта не существует. В некоторых случаях проверка целостности (по Relation) сработает, в некоторых нет. Нужно разбираться в каждом конкретном случае. А вообще не надеяться на проверку целостности в relation, и проверять самостоятельно в validateWrite. Тогда, лучше бы служили Relation только для навигации (dynalink)... Спасибо Последний раз редактировалось Corsar; 24.10.2008 в 13:53. |
|
![]() |
#3 |
MCITP
|
![]() Цитата:
Сообщение от Corsar
![]() Всё таки правильно ли я понял, что универсального рецепта не существует. В некоторых случаях проверка целостности (по Relation) сработает, в некоторых нет. Нужно разбираться в каждом конкретном случае. А вообще не надеяться на проверку целостности в relation, и проверять самостоятельно в validateWrite. Тогда, лучше бы служили Relation только для навигации (dynalink)...
На DAX2009 по крайней мере вроде как появился приоритет табличных релейшинов над EDT. Но и на таблице их тоже может быть несколько. А для предыдущих версий вообще похоже, что берётся порвый попавшийся (по какому критерию - не совсем понятно). Так что вы абсолютно правильно сформулировали сложившуюся ситуацию. ![]()
__________________
Zhirenkov Vitaly |
|
![]() |
#4 |
Участник
|
Спасибо всем участникам ветки !!!
|
|
![]() |
#5 |
MCITP
|
![]() Цитата:
![]() Пример делается элементарно, создаём таблицу без всяких ЕДТ, с одним единственным составным релейшинам - и всё будет проверятся, правда на изменени каждого из полей, как вы верно подметили, что не даёт пользователю возможности ввести вручную что-либо, если оба поля обязательные в ссылаемой таблице, а вот если нет, то пожалуйста - вводите и убеждайтесь. Пример (для 3-ки, EDT в полях нет):
__________________
Zhirenkov Vitaly |
|