|
|
|
Все, иду вешаться.
|
|||
|---|---|---|---|
|
#18+
Пишу, чтобы поплакаться в жилетку. Ёлки-палки. Первый раз за 10 лет программирования не могу баг найти. Уже 4 дня бьюсь. Он мне уже во сне снится. Наглый, усатый. Что-то милый и пушистый юзверь использует такое хитрое в программе, в datawindow, что одно из полей пересчитывается в неправильную цифру. Все триггеры уже пересмотрела в ораклевой базе. Код в РВ. О! Это отдельная песня. Начинали его писать в Бельгии в 1995г, много надписей в DW на немецком, потом продолжали во Норвегии. Теперь вот это в Австралии 4-е года как работает. Бывает идешь по следу, смотришь - первая функция визывает вторую из другого обьекта, та вторая - третью, и т.д. И в конце концов доходишь до заглушки return 1. Расставила шас всяких логов - ловушек, мож какая-нить зараза поймается. Но что-то надежды мало. Эх, иконок с человеческими эмоциями жалко здесь нет, передать мои чувства. Посоветуйте плиз какие-нить талисманы, или дУхов каких, богов. Может тут нечисть какая водится... Или напиться что-ли? Что вам помогало в таких случаях? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2006, 02:41 |
|
||
|
Все, иду вешаться.
|
|||
|---|---|---|---|
|
#18+
Почему то вспомнилось про задачу поймать льва в пустыне возможно тебе подойдет "Метод Больцано-Вейерштрасса" З.Ы. Как то про код написанный в Австралии (на вопрос как такое можно написать) коллега сказал - ну дык ить что ж ты хочешь походи всю жизнь вниз головой и не такое напишешь З.З.Ы. Талисман говоришь? тут наверное нужен шаманский бубен с логотипом Sybase. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2006, 03:38 |
|
||
|
Все, иду вешаться.
|
|||
|---|---|---|---|
|
#18+
ЗоринАндрейПочему то вспомнилось про задачу поймать льва в пустыне возможно тебе подойдет "Метод Больцано-Вейерштрасса" А-а-а. Да-да. Метод половинного сечения. Не помогааааееееет.... ЗоринАндрейЗ.Ы. Как то про код написанный в Австралии (на вопрос как такое можно написать) коллега сказал - ну дык ить что ж ты хочешь походи всю жизнь вниз головой и не такое напишешь Явно индус постарался. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2006, 05:48 |
|
||
|
Все, иду вешаться.
|
|||
|---|---|---|---|
|
#18+
У меня коллега такой, так что из опыта могу сказать: "Метод половинного сечения" помогает, нужно только терпения набраться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2006, 14:47 |
|
||
|
Все, иду вешаться.
|
|||
|---|---|---|---|
|
#18+
А поставить Debuger, перед тем как меняется это поле в DataWindow например перед dw.Retrieve() и просмотреть все переменные, из которых берутся косяковые значения в DW? Я думаю с 10 раза полюбому найдёте откуда косяки идут! Если этот косяк всплывает раз из 10 случаев, то всё таки домучать Юзвера в какой именно ситуации всплывает кривое поле! Это конечно примитивно, но другого выхода нет! Да чуть не забыл, часто такие безумные косяки всплывают из базы, например поле было varchar(3), изменился формат толкаются на вход процедуры varchar(4) ну и после этого это поле безбожно обрезается! Вот то что приходит на ум на вскидку! Удачи! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2006, 20:09 |
|
||
|
Все, иду вешаться.
|
|||
|---|---|---|---|
|
#18+
Это может быть все что угодно, в т.ч. баг самого PB. В частности недавно мы обнаружили такой пренеприятнейший баг: Код: plaintext 1. 2. 3. 4. 5. В Вашем случае, я бы сначала локализовал бы место возникновения проблемы: допустим проблема предположительно в том DW, значит надо для начала убедиться в этом. Для этого retreive() убираем, а вместо него заносим в DW тестовые данные, для которых известен правильный результат и убеждаемся что проблема возникает не ранее чем данные заносятся в DW(то есть с тестовыми данными проблема повторяется). Если подтвердили - ищем следующую потенциальную точку. И т.д. (Вот здесь как раз и пригодился бы метод половинного деления) Когда будет сформулирована проблема, включая место и условия, при которых она возникает, можно будет думать как ее решать. Есть еще способ - отдайте программу другому человеку на отладку. У этого способа есть положительный побочный эффект - не найдет этот баг, зато очень вероятно найдет многие другие. Только нужно заинтересовать его как то, либо материально либо духовно. Либо если этот человек - Ваш муж, то могут быть разные варианты :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2006, 21:17 |
|
||
|
Все, иду вешаться.
|
|||
|---|---|---|---|
|
#18+
Спасибо за поддержку и советы. А то совсем пожалиться некому тут на чужбине. :-))) Как-то повеселее стало. Отдать на отладку некому.., это мне на отладку отдали. Вся проблема в том, что я не могу поймать, когда она возникает. Я пыталась безуспешно повторить эту ситуацию. Юзверя пытала - улыбается и руками разводит. Производишь "пересчет" и цифры меняются на правильные. Про тот баг с += GetItemDecimal показалось интересной идеей, но не помогло. Подсчитывается это поле элементарно (accept перед этим выполяется): dw_1.object.количество[row] = dw_1.object.общийВес[row]/dw_1.object.вес1штуки{row] Подчитывается оно в событии itemchanged для соответствующих полей. Всю систему расписывать долго и не хочу никого загружать. Скажу лишь, что это окно ввода заказа на бумажние роллы. Здесь вес, количество зависят друг от друга и от того, какой вес одного ролла, который в свою очередь зависит от диаметра, ширины и плотности. Компания по производству бумаги. Хоть золотое сечение, хоть половинное, ничего не помогает. Когда я в разных вариациях ввожу/меняю все цифры правильные. Ладно, не буду вас утомлять. :-))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2006, 06:14 |
|
||
|
Все, иду вешаться.
|
|||
|---|---|---|---|
|
#18+
Навскидку - нет явного приведения типов. Я бы посоветовал вместо dw.object.Поле использовать методы GetItem/SetItem. Далее - есть Accept или нет Accept-а, в любом случае пересчет должен быть вынесен в отдельное событие, а в ItemChanged оно должно вызываться через Post. Так надежнее и правильнее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2006, 08:52 |
|
||
|
Все, иду вешаться.
|
|||
|---|---|---|---|
|
#18+
Спасибо, только так оно и есть. Это я сократила, для наглядности. Сорри.))) Без сокрашения выглядит обработка одного из полей в itemchanged так. Код - не мой, конечно. (неправильно считается Quantity, вернее у меня всегда правильно, а юзер примерно в 5% случаев ухитряется сделать так, чтобы сохранилось неправильное значение). Код: plaintext 1. 2. 3. 4. 5. 6. 7. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. Я вот начнаю подозревать синхронизацию datawindow и datastore, их используются десятки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2006, 09:17 |
|
||
|
Все, иду вешаться.
|
|||
|---|---|---|---|
|
#18+
Еще навскидку: 1. Все таки вынесите код из ItemChanged в отдельное событие с параметром row и вызывайте его через Post. Конечно мое личное IMHO, но не хорошо вызывать внутри ItemChanged AcceptText и SetItem. 2. Настораживает функция, зачем она - передавать ей DataStore, чтобы она примитивно посчитала и вернула результат. Может быть легче все эти действия как раз проделать в событии, которое я порекомендовал в п.1 3. Нужна функция или нет, но еще я бы в отдельной функции с целью предотвращения ошибок не стал вызывать GetRow() у переданного DS, а лучше бы и передавал параметр row - событийная модель любого ООП языка штука коварная - никогда нельзя предугадать, какие события на что успели повлиять, поэтому нужно максимально не полагаться на предполагаемое. Отсюда и такие плавающие и трудноотлаживаемые глюки возникают. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2006, 09:28 |
|
||
|
Все, иду вешаться.
|
|||
|---|---|---|---|
|
#18+
P.S. Кстати, Вы там случайно не с программой для стоматологии возитесь ? Или Австралия - это родина PB проектов, которые в разное время писались и сопровождались в разных странах мира, но с обязательным условием всей бизнес-логики на клиенте и разных подходов в разных частях задачи ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2006, 09:34 |
|
||
|
Все, иду вешаться.
|
|||
|---|---|---|---|
|
#18+
PowerBuilder Help AcceptText method (DataWindows) ... Events AcceptText may trigger an ItemChanged or an ItemError event. AcceptText in the ItemChanged event Calling AcceptText in the ItemChanged event has no effect. Вообще-то, я присоединяюсь к мнению ASCRUS - в itemchanged надо асинхронно вызывать функцию обработки и ничего больше не делать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2006, 10:50 |
|
||
|
Все, иду вешаться.
|
|||
|---|---|---|---|
|
#18+
Можно попробовать следующим образом: Создать копию изменяемого поля базы в DW с другим именем. Сразу должно показать где меняется, в базе или программе. А дальше терпение, если в программе, то везде добавлять изменения по новому полю как по старому, как станет одинаково меняться там и искать. если в базе то в триггере на update этого поля raise_application_error и покажет когда меняется в базе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2006, 11:53 |
|
||
|
Все, иду вешаться.
|
|||
|---|---|---|---|
|
#18+
Не торопитесь А в поле точно не может быть ну скажем значения null до того как вы проверяете , а во вторых замечено, что GetRow в том виде как вы проверяете может выдать некоторое значение и близко не подходящее к реальному так что если у Вас где -то что-то синхронизируется сначала проверьте та ли это строка, выше уже предлагали передать ее точно, или find использовать, кроме того замечание насчет поста не лишнее ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2006, 12:45 |
|
||
|
Все, иду вешаться.
|
|||
|---|---|---|---|
|
#18+
Ок. Спасибо большое. Все внимательно перечитала и приняла к сведению. Теперь буду убеждать начальство менять код в этом месте. Еще раз повторюсь, что код писался годами и не мной. Я еще только 4 месяца здесь работаю, и о РВ до этого только слышала. Новичек еще совсем + самоучка (что очень нехорошо). А компания по производству бумаги. Всем удачи в новом году. :-))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2006, 01:25 |
|
||
|
Все, иду вешаться.
|
|||
|---|---|---|---|
|
#18+
Tea-potА то совсем пожалиться некому тут на чужбине. :-)))Вот и у нас в середине Канады, прямо между океанами, одна степь кругом и ни одного русского пауэрбилдерщика... Дикие места! Так что давай плакаться друг другу! :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2006, 18:30 |
|
||
|
Все, иду вешаться.
|
|||
|---|---|---|---|
|
#18+
UrsegoВот и у нас в середине Канады, прямо между океанами, одна степь кругом и ни одного русского пауэрбилдерщика... Дикие места! Так что давай плакаться друг другу! :-) Calgary? ;-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2006, 01:17 |
|
||
|
Все, иду вешаться.
|
|||
|---|---|---|---|
|
#18+
>To Usergo А вы Филиппа в гости приглашайте, ему там недалеко, он подъедет. Вот и поплачитесь ему в жилетку!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2006, 10:52 |
|
||
|
Все, иду вешаться.
|
|||
|---|---|---|---|
|
#18+
Ага. Всего то 4 тыщи км. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2006, 11:27 |
|
||
|
Все, иду вешаться.
|
|||
|---|---|---|---|
|
#18+
Зато через окиян плыть не надо! Токма через дикую степь на поезде!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2006, 11:30 |
|
||
|
Все, иду вешаться.
|
|||
|---|---|---|---|
|
#18+
boogiman пишет: > Зато через окиян плыть не надо! Токма через дикую степь на поезде!!! Скорее уж над дикой степью на самолёте :). Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2006, 11:31 |
|
||
|
Все, иду вешаться.
|
|||
|---|---|---|---|
|
#18+
Tea-potCalgary? ;-)Куда там - Калгари просто очаг цивилизации по сравнинию моим Виннипегом! А ещё центр, блин - в 30 км от географического центра Северной Америки. А Калгари западнее на 1300 км. А ты где? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2006, 21:51 |
|
||
|
Все, иду вешаться.
|
|||
|---|---|---|---|
|
#18+
Dim2000 boogiman пишет: > Зато через окиян плыть не надо! Токма через дикую степь на поезде!!! Скорее уж над дикой степью на самолёте :). Posted via ActualForum NNTP Server 1.3 На собаках быстрее будет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2006, 07:26 |
|
||
|
Все, иду вешаться.
|
|||
|---|---|---|---|
|
#18+
Ursego Tea-potCalgary? ;-)Куда там - Калгари просто очаг цивилизации по сравнинию моим Виннипегом! А ещё центр, блин - в 30 км от географического центра Северной Америки. А Калгари западнее на 1300 км. А ты где? Melbourne ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2006, 03:34 |
|
||
|
|

start [/forum/topic.php?fid=15&fpage=75&tid=1337938]: |
0ms |
get settings: |
7ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
40ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
68ms |
get tp. blocked users: |
1ms |
| others: | 213ms |
| total: | 360ms |

| 0 / 0 |
