26.11.2007, 18:29 | #1 |
Участник
|
Преобразование boolean <-> NoYes в запросах
Наткнулся сегодня на один неприятный побочный эффект преобразования типов в запросах. В таблицах для полей-"флажков" обычно используют enum NoYes, при том что в коде как-то привычнее оперировать с типом boolean (хотя, вообще говоря, никто не мешает использовать enum boolean и для полей таблиц ). Так вот, если в запросе для поля с типом enum NoYes в качестве QueryBuildRange.value() указать значение true (с использованием queryValue(), конечно), то на СУБД вместо ожидаемой единички уйдет 255! Причем в зависимости от версии ядра выяснить это удастся на различных этапах. Так, в SP3 QueryBuildRange.toString() будет показывать значение range "true", и выловить этот косяк удастя лишь трассировкой SQL-операторов; а вот на KR3 увидеть это можно будет уже в самой Аксапте, которая в QueryBuildRange.toString() будет честно писать значение range "255". Такая же картина наблюдается и при указании значения NoYes::Yes при выборке по полю с типом enum boolean.
При этом если запрос по таблице table c полем flagField типа enum NoYes делать непосредственно из кода X++: select table where table.flagField == true; PS. Что-то похожее касательно enum'ов уже обсуждалось, но явной корреляции с той темой я не увидел. Возможно, конечно, что тема более общая и связана с преобразованием значений различных enum'ов вообще, я не проверял. |
|
|
За это сообщение автора поблагодарили: Russland (1). |