Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 .. 31 32 33 34 35 36 37 38 [39] 40   вперед  Ctrl
 Re: Топик "как я лажанулся"  [new]
alekcvp
Member

Откуда:
Сообщений: 1103
DarkMaster
alekcvp,
А тут дело не в переменной, а в совпадении имен. Ровно такой же результат будет и в FB


Будет, но если вы попытаетесь в update запрос засунуть переменную без ':' (и нет поля с таким именем), то он будет ругаться, во всяком случае у меня в SP ругался. Поэтому просто всегда пишутся переменные с двоеточием.
8 май 18, 10:16    [21394905]     Ответить | Цитировать Сообщить модератору
 Re: Топик "как я лажанулся"  [new]
JaDi
Member

Откуда: Сызрань, Россия
Сообщений: 3702
Засада еще и в том, что никто никакими предупреждениями не сыпит о совпадении имен. А тот же PL/SQL developer в режиме отладки показывает, что там переменная используется, а не колонка.
8 май 18, 10:53    [21395021]     Ответить | Цитировать Сообщить модератору
 Re: Топик "как я лажанулся"  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 53908
Блог
JaDi
Засада еще и в том, что никто никакими предупреждениями не сыпит о совпадении имен. А тот же PL/SQL developer в режиме отладки показывает, что там переменная используется, а не колонка.

Честно говоря, это хорошая мина при плохой игре. Тут авторы синтаксиса языка, конечно, лажанулись.
8 май 18, 10:55    [21395034]     Ответить | Цитировать Сообщить модератору
 Re: Топик "как я лажанулся"  [new]
stells2
Member

Откуда: Оклахома Пригород Колымы
Сообщений: 878
softwarer,
 UPDATE TABLE SET
   POLE1 = POLE1 +1,
   POLE2 = CASE WHEN POLE2 < POLE1 THEN POLE1 ELSE POLE4,
   POLE3 = CASE WHEN NVL(IN_PARAM1,0) <= 0 THEN POLE3 ELSE IN_PARAM1 END,
   POLE4 = SYSDATE,
   POLE5 = P_POLE5
 WHERE POLE6 > POLE7

И, чего тут не правильного? Вполне реально, логично, понятно и правильно. Работаем с собственными полями.
А вопросы... Видимо, это просто от недоперепонимания :)
8 май 18, 11:15    [21395144]     Ответить | Цитировать Сообщить модератору
 Re: Топик "как я лажанулся"  [new]
stells2
Member

Откуда: Оклахома Пригород Колымы
Сообщений: 878
Название топика очень верное
8 май 18, 11:16    [21395155]     Ответить | Цитировать Сообщить модератору
 Re: Топик "как я лажанулся"  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 53908
Блог
stells2
И, чего тут не правильного?

Не правильного тут неявное внедрение переменных в запрос, что приводит к проблеме и вынуждает пользоваться костылями типа префикса p_.
8 май 18, 11:22    [21395199]     Ответить | Цитировать Сообщить модератору
 Re: Топик "как я лажанулся"  [new]
stells2
Member

Откуда: Оклахома Пригород Колымы
Сообщений: 878
softwarer,
Выше я показал, когда обновление таблицы идет фактически её же полями.
Это частая практика
UPDATE TABLE SET POLE1 = CASE WHEN POLE1 <= 0 THEN 1 ELSE POLE1 END; -- ЕСЛИ НАДО, ОБНОВЛЯЕМ, ИНАЧЕ НЕ ТРОГАЕМ.

Честно говоря, даже причин обсуждения не вижу.
Покажите в какой СУБД такая конструкция вызовет ошибку? (ну, CASE можно заменить на просто POLE+1)
8 май 18, 11:29    [21395252]     Ответить | Цитировать Сообщить модератору
 Re: Топик "как я лажанулся"  [new]
stells2
Member

Откуда: Оклахома Пригород Колымы
Сообщений: 878
А с другой стороны, программист же должен понимать что он делает.
А если код большой, писал он давно или другой человек читает - как он должен определить, что POLE1 это переменная а не атрибут таблицы если названия одинаковые, по каким признакам определить?
8 май 18, 11:33    [21395277]     Ответить | Цитировать Сообщить модератору
 Re: Топик "как я лажанулся"  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 53908
Блог
stells2
Выше я показал, когда обновление таблицы идет фактически её же полями.

Это нормально и не вызывает у меня никаких возражений. Ошибку дизайна я назвал в другом месте.
8 май 18, 12:16    [21395490]     Ответить | Цитировать Сообщить модератору
 Re: Топик "как я лажанулся"  [new]
bk0010
Member

Откуда:
Сообщений: 4620
DarkMaster
alekcvp,
А тут дело не в переменной, а в совпадении имен. Ровно такой же результат будет и в FB
У меня такое было с одним отечественным контроллером. Там к своей программе прилинковывалась ОС (похожая на цельнотянутый VxWorks) и шилась в ПЗУ. Никак не могли отладится. Оказалось, что если имя переменной в программе и в ОС совпадает, то это становится одной переменной - счастливой отладки.
8 май 18, 23:46    [21397194]     Ответить | Цитировать Сообщить модератору
 Re: Топик "как я лажанулся"  [new]
Гаджимурадов Рустам
Member

Откуда:
Сообщений: 59219
bk0010> Оказалось, что если имя переменной в программе и в
bk0010> ОС совпадает, то это становится одной переменной

А как это обнаружили?

Posted via ActualForum NNTP Server 1.5

8 май 18, 23:48    [21397196]     Ответить | Цитировать Сообщить модератору
 Re: Топик "как я лажанулся"  [new]
miksoft
Member

Откуда:
Сообщений: 37029
bk0010,

А что такое "имя переменной в ОС" ?
Это переменные окружения или что-то другое?
9 май 18, 00:33    [21397261]     Ответить | Цитировать Сообщить модератору
 Re: Топик "как я лажанулся"  [new]
bk0010
Member

Откуда:
Сообщений: 4620
Гаджимурадов Рустам
А как это обнаружили?
То, что в переменных значения изменяются без команды - отладочной печатью на каждый чих. А как догадались лечить это простым переименованием не знаю: я там был на подхвате, притаранил очередной кусок кода, а меня порадовали разгадкой. Связались с разработчиками контроллера - они об этом знали, типа "это не баг, это фича".
miksoft
А что такое "имя переменной в ОС" ?
Это переменные окружения или что-то другое?
Да если бы. Самые обычные (типа int i; или float b[200]), насколько сейчас вспоминается даже не глобальные.
9 май 18, 01:13    [21397295]     Ответить | Цитировать Сообщить модератору
 Re: Топик "как я лажанулся"  [new]
Гаджимурадов Рустам
Member

Откуда:
Сообщений: 59219
bk0010> Связались с разработчиками контроллера - они об этом знали, типа "это не баг, это фича".

Так это было задокументировано?

Posted via ActualForum NNTP Server 1.5

9 май 18, 01:34    [21397298]     Ответить | Цитировать Сообщить модератору
 Re: Топик "как я лажанулся"  [new]
bk0010
Member

Откуда:
Сообщений: 4620
Нет. Но, видимо, считалось само собой разумеющимся, о чем все знают.
9 май 18, 01:53    [21397302]     Ответить | Цитировать Сообщить модератору
 Re: Топик "как я лажанулся"  [new]
Гаджимурадов Рустам
Member

Откуда:
Сообщений: 59219
bk0010> Нет.

Тогда бага, да. Весьма забавная, ибо быстро обнаруживаемая, ИМХО.
И как в итоге стали обходить? Ставить везде длиннющие префиксы
уникальные в каждом модуле ?

> Но, видимо, считалось само собой разумеющимся, о чем все знают.


Posted via ActualForum NNTP Server 1.5

9 май 18, 02:03    [21397304]     Ответить | Цитировать Сообщить модератору
 Re: Топик "как я лажанулся"  [new]
bk0010
Member

Откуда:
Сообщений: 4620
Гаджимурадов Рустам
bk0010> Нет.

Тогда бага, да. Весьма забавная, ибо быстро обнаруживаемая, ИМХО.
И как в итоге стали обходить? Ставить везде длиннющие префиксы
уникальные в каждом модуле ?

> Но, видимо, считалось само собой разумеющимся, о чем все знают.


Совсем не быстро: задача расчетная, ничего не ломается, врет не всегда и по-разному. Думали - шизеем. Обходить стали префиксом (одним, не длинным - со своими переменными путаницы не было), но не долго - проект закрыли.
Вспомнил аналогичный случай, более свежий. Делаем проект на C++ и Qt. Проект состоит из исполняемого модуля и штук 15 dll, которые он вызывает. Пока каждый пилит свою dll-ку все нормально. Как все начинает компилить ведущий - начинается хрень: ресурсы путаются (в dll-ках на кнопках не те картинки), компилятор предупреждает о хрени со слотами, короче все компилируется и запускается, но все криво. Чесали репу - в чем дело? Потом дошло: Moc-компилятор (препроцессор, реализующий магию Qt) спятил, встретив при одной компиляции в разных dll классы с одним именем (winMain). Изменили имена классов - все наладилось.
9 май 18, 16:16    [21398029]     Ответить | Цитировать Сообщить модератору
 Re: Топик "как я лажанулся"  [new]
JaDi
Member

Откуда: Сызрань, Россия
Сообщений: 3702
bk0010,

Кстати, вспомнился случай со шкурками DevExpress, да и просто формой делфи -- одно приложение жутко глючило, не сворачивалось, разворачивалось как-то не так, акцесс виолейшены случайные и компоненты разъезжались. А всё оказалось в том, что имя экзешника было "services.exe" -- винда его как-то по своему обрабатывала, и всё ломало внутри.
9 май 18, 16:47    [21398053]     Ответить | Цитировать Сообщить модератору
 Re: Топик "как я лажанулся"  [new]
Relic Hunter
Member

Откуда: AB
Сообщений: 6633
JaDi
bk0010,

Кстати, вспомнился случай со шкурками DevExpress, да и просто формой делфи -- одно приложение жутко глючило, не сворачивалось, разворачивалось как-то не так, акцесс виолейшены случайные и компоненты разъезжались. А всё оказалось в том, что имя экзешника было "services.exe" -- винда его как-то по своему обрабатывала, и всё ломало внутри.
Бэст прэктиз - именовать екзешники windows.exe
10 май 18, 00:21    [21398785]     Ответить | Цитировать Сообщить модератору
 Re: Топик "как я лажанулся"  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 10578
Тестировал очередной билд нашей службы обновления. Случайно подключился на боевой сервер, откуда были скачаны "обновления" и установлены. В итоге моя девелоперская машина, фактически, пришла в негодность.

Решил, вместо того, чтобы переригистрировать обратно все модули, откатить виндовс до последней точки восстановления. Точка была создана 9 дней назад.

Откатил. Меня тут же выкинуло из домена и перестал запускать Chrome

Эти проблемы решил. Что еще меня ждет - не знаю
23 июн 18, 14:53    [21515289]     Ответить | Цитировать Сообщить модератору
 Re: Топик "как я лажанулся"  [new]
Гаджимурадов Рустам
Member

Откуда:
Сообщений: 59219
_Vasilisk_> Решил ... откатить виндовс до последней точки восстановления
_Vasilisk_> Меня тут же выкинуло из домена и перестал запускать Chrome

Ибо нефиг. Поражаюсь, как этой хренью кто-то рискует пользоваться.

P.S. Отключайте эти ТВ и юзайте соотв. ПО вручную, если очень нужно.

Posted via ActualForum NNTP Server 1.5

23 июн 18, 15:08    [21515307]     Ответить | Цитировать Сообщить модератору
 Re: Топик "как я лажанулся"  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 10578
Гаджимурадов Рустам
P.S. Отключайте эти ТВ и юзайте соотв. ПО вручную, если очень нужно.
Никогда не было нужно. А тут, вдруг, почти сломал систему. Думал можно быстро восстановить
23 июн 18, 18:09    [21515445]     Ответить | Цитировать Сообщить модератору
 Re: Топик "как я лажанулся"  [new]
YuRock
Member

Откуда: Донецк
Сообщений: 3562
Гаджимурадов Рустам
Поражаюсь, как этой хренью кто-то рискует пользоваться.
Пару раз видел компы, где некие умники нажали "восстановление системы" (при чем в безобидных ситуациях). Комп превращался в кашу. Выход был один после такого - формат и всё с нуля.

Но есть иногда и польза. Отдельные файлы можно восстановить, документы.
Особенно полезно это оказалось после того, как Петя прошелся, но относительно вовремя отрубили питание и затем удалили его подключением винта к чистому компу, когда антивиры уже научились это делать. В итоге - система осталась жива и можно было в пару кликов восстановить порченный документ.
23 июн 18, 20:23    [21515624]     Ответить | Цитировать Сообщить модератору
 Re: Топик "как я лажанулся"  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 10578
YuRock
Комп превращался в кашу.
Так, а в чем прикол? В MS посадили тупую багу, или есть какие-то особые условия для использования этого функционала?
23 июн 18, 21:15    [21515723]     Ответить | Цитировать Сообщить модератору
 Re: Топик "как я лажанулся"  [new]
YuRock
Member

Откуда: Донецк
Сообщений: 3562
_Vasilisk_
YuRock
Комп превращался в кашу.
Так, а в чем прикол? В MS посадили тупую багу, или есть какие-то особые условия для использования этого функционала?
Ну как багу... Винда же честно тебя предупреждала наверняка, что восстановится не всё и не везде, вто может привести к непредсказуемым... Но ты согласился и рискнул - не повезло. Вполне возможно, что бывает и везет. Где-то и баги, как без них.

А использовать можно, я ж говорю, другим способом - вручную по отдельности файлы восстанавливать при необходимости.
23 июн 18, 21:57    [21515814]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 .. 31 32 33 34 35 36 37 38 [39] 40   вперед  Ctrl
Все форумы / Delphi Ответить