02.11.2011, 16:36 | #1 |
Участник
|
Вопрос вроде банальный и простой. Но у меня проблема.
Есть таблица 50000, в ней поле Field1. Когда в таблице T37 меняем поле No., то в Т50000 поле Field1 тоже меняется. В триггере OnValidate для поля No. таблицы 37 есть строки: Код: IF ("No." <> xRec."No.") AND (xRec."No." <> '') THEN BEGIN T50000.Field1 := "No."; T50000.MODIFY; END; |
|
02.11.2011, 16:51 | #2 |
Участник
|
Чтобы вызвался триггер, надо передать параметр в процедуру Modify. Вот так:
Код: T50000.MODIFY(TRUE); |
|
02.11.2011, 17:20 | #3 |
Участник
|
|
|
16.11.2011, 12:56 | #4 |
Участник
|
ПОдскажите, плиз, как обойти след. проблему:
Имеем таблицу 37. Когда в Заказе меняем поле "No", срабатывает триггер OnValidate(), в которорм есть след. строки: Код: T50022.TechNo := "No."; T50022.Modify(TRUE); В нем прописано следующее: Код: IF Rec.TechNo <> xRec.TechNo THEN выполнить какие-то действия Как с этим бороться? |
|
16.11.2011, 18:44 | #5 |
Участник
|
Цитата:
Сообщение от Kadawrik
ПОдскажите, плиз, как обойти след. проблему:
Имеем таблицу 37. Когда в Заказе меняем поле "No", срабатывает триггер OnValidate(), в которорм есть след. строки: Код: T50022.TechNo := "No."; T50022.Modify(TRUE); В нем прописано следующее: Код: IF Rec.TechNo <> xRec.TechNo THEN выполнить какие-то действия Как с этим бороться? Тогда код будет такой: Код: T50022.VALIDATE(TechNo,"No."); T50022.Modify(TRUE); |
|
17.11.2011, 12:54 | #6 |
Участник
|
Цитата:
Цитата:
Тогда код будет такой:
Код: T50022.VALIDATE(TechNo,"No."); T50022.Modify(TRUE); Честно говоря, ну ооочень не хотелось бы всё это сейчас переделывать. Если длугих, менее трудозатратныых вариантов нет, то придется делать так, как Вы предлагаете. |
|
17.11.2011, 13:33 | #7 |
Участник
|
Попробуйте в табличке написать ф-цию, в которую будете передавать булево значение и вызывать перед modify, а в modify сделайте
Код: IF (Rec.TechNo <> xRec.TechNo) or (переданная переменная) THEN выполнить какие-то действия |
|
17.11.2011, 16:22 | #8 |
Участник
|
Цитата:
Если вы в T50022.TechNo присваиваете "No.", который ничем не отличается TechNo то зачем делать MODIFY? |
|
17.11.2011, 17:34 | #9 |
Участник
|
В том-то и дело, что ДО присвоения эти значения разные (к примеру, до выполнения команды T50022.TechNo := "No." , поля содержали след. значения: T50022.TechNo = RI265,а "No." равнялось AM378
|
|
17.11.2011, 18:20 | #10 |
Участник
|
Цитата:
В том-то и дело, что ДО присвоения эти значения разные (к примеру, до выполнения команды T50022.TechNo := "No." , поля содержали след. значения: T50022.TechNo = RI265,а "No." равнялось AM378
|
|
22.11.2011, 17:48 | #11 |
Участник
|
Цитата:
Код: T50022.TechNo := "No."; //строка 1 T50022.Modify(TRUE); //строка 2 T50022.Zoom.TechNo Rec.Zoom.TechNo xRec.Zoom.TechNo Курсор стоит на стороке 1 (т.е. как я понимаю строка эта еще не выполнилась), переменные имеют след. значения: T50022.Zoom.TechNo - старое значение Rec.Zoom.TechNo - Error: Symbol Rec was not found xRec.Zoom.TechNo - Error: Symbol xRec was not found Нажимаем F8. Курсор переходит в строку 2. Наши переменные: T50022.Zoom.TechNo - НОВОЕ значение Rec.Zoom.TechNo - Error: Symbol Rec was not found xRec.Zoom.TechNo - Error: Symbol xRec was not found Еще раз F8 - попадаем в триггер OnModify таблицы 50022. Переменные становятся: T50022.Zoom.TechNo - Error: Symbol TechNo was not found Rec.Zoom.TechNo - НОВОЕ значение xRec.Zoom.TechNo - НОВОЕ значение ПАЧИМУУУУ!?!?!? Это какой-то глюк в программе или у меня уже в голове глючит и я за деревьями не вижу леса? |
|
22.11.2011, 19:26 | #12 |
Участник
|
Все верно. Вот если вы будете делать T50022.VALIDATE(TechNo, "No."), тогда в триггере OnValidate увидите разное значение Rec и xRec. Эта информация даже есть во встроенном хелпе Статья "xRec and FIELDNO".
|
|