AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 21.01.2002, 15:56   #1  
Alexey is offline
Alexey
Участник
 
7 / 10 (1) +
Регистрация: 20.12.2001
условие WHERE SomeField == NULL
Axapta не поддерживает NULL значений. Каждое поле в таблице всегда содержит конкретное значение.
Хотя, для каждого типа данных существует значение, которое рассматривается как NULL:

<table border=1><tr><td><b>Тип</b></td><td><b>NULL значение</b></td></tr><tr><td>String</td><td>Пустая строка</td></tr><tr><td>Integer</td><td>0</td></tr><tr><td>Real</td><td>0.0</td></tr><tr><td>Date</td><td>1 января 1901</td></tr><tr><td>Time</td><td>00:00:00</td></tr><tr><td>Emun</td><td>первое начение</td></tr></table>

Забивать в коде некоторые значения не всегда удобно (например, для дат), поэтому облегчить себе жизнь можно так:
<pre>
SomeTable tbl;
date nullDate; // далее в коде оставляем эту переменную неинициализированной
...
select from tbl where SomeField == nullDate;
</pre>
Старый 21.01.2002, 20:31   #2  
mazzy is offline
mazzy
Administrator
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
28,974 / 3865 (186) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Вообще говоря, есть класс Global.

Этот класс содержит сборник разновсяческих полезных методов-функций.
Среди всех этих функций есть и DateNull (а также strMax, strMin и т.п.).

О классе Global можно прочитать в AOT в разделе "Application Developer Documentation\Classes\Global". А также в хелпе, если сделать поиск по слоку Global.



Согласен с Alexey в том, что в select'е лучше использовать простую переменную-константу, а не метод класса. Похоже, что в этом случае Аксапта делает запрос оптимальнее.
__________________
GitHub, Facebook, mazzy.priot, mazzy.music, coub.
Старый 22.01.2002, 14:31   #3  
xroad is offline
xroad
Участник
 
10 / 16 (1) ++
Регистрация: 03.01.2002
Адрес: Москва
Небольшое уточнение
Небольшое уточнение по поводу NULL-значений конкретных типов:
1. Date - хоть в документации и написано, что для date NULL = 01.01.1901, реально на сервере храниться 01.01.1900 (MSSQLServer 2000). Более того, datenull() возвращает именно это значение.
2. Enum - не первое значение, а 0 (в Enum не обязательно содержится элемент со значением 0, а реально в базе это тот же int).

И к вопросу о "where Fiedl = null":
Почему бы не использовать конструкцию типа :

SomeTable tbl;
...
select from tbl where (! SomeField);


PS: И, наверное, использование неинициализированных переменных в коде не есть хорошо))
Старый 22.01.2002, 16:05   #4  
Alexey is offline
Alexey
Участник
 
7 / 10 (1) +
Регистрация: 20.12.2001
C NULL -значения для Date и Enum согласен, в первом сообщении я просто процитировал Руководство разработчика Axapta (Null values for different data types)

А что касается неинициализированных значений, то здесь я имел в виду - не присваиваем переменной никаких значений. Axapta при создании переменной всегда инициализирует её значением по умолчанию.
Старый 22.01.2002, 16:23   #5  
xroad is offline
xroad
Участник
 
10 / 16 (1) ++
Регистрация: 03.01.2002
Адрес: Москва
По неинициализированным переменным:

Я имел ввиду именно это - мне кажется, что НЕ присваивать переменной никаких значений, полагая, что Axapta сама проинициализирует её значением по умолчанию, не стоит. Как говориться, если хочешь, чтобы что-то было сделано, надо сделать это самому. Тем более, что это поможет избежать трудноуловимых багов, коих в промышленной разработке и так хватает.
Старый 22.01.2002, 22:56   #6  
Maxim Gorbunov is offline
Maxim Gorbunov
Administrator
Соотечественники
Лучший по профессии 2009
 
2,483 / 627 (25) +++++++
Регистрация: 27.11.2001
Адрес: Dubai, UAE
Цитата:
Изначально опубликовано xroad
Я имел ввиду именно это - мне кажется, что НЕ присваивать переменной никаких значений, полагая, что Axapta сама проинициализирует её значением по умолчанию, не стоит.
Читаем Руководство разработчика Axapta.
Цитата:
When a variable is declared, memory is also allocated and the variable is initialized to the default value.
Можно полагать, что встертив в коде цикл for (i = 1; i<=10; i++), Axapta выполнит его 10 раз, а можно ей не доверяться и написать десять раз подряд тело цикла

То, о чем пишет Алексей - использование регламентированного поведения интерпретатора, и ничего страшного в этом нет.
__________________
Not registered yet? Register here!
Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me
Старый 23.01.2002, 16:30   #7  
xroad is offline
xroad
Участник
 
10 / 16 (1) ++
Регистрация: 03.01.2002
Адрес: Москва
Я думал, что моя мысль очевидна, но оказывается, это не совсем так. Я правильно понял, что можно полагаться на AXAPTA в вопросе присвоения defaul-значений, про которые ничего не ясно (в том же help'e написаны конкретные значения, но они отличаются от того, что есть на практике!) и которые могут поменятся уже в следующем SP?
Это вопрос культуры программирования, он не имеет отношения конкретно к AXAPTA, а распространяется на программирование в целом. Даже в VB я встречал ситуации, когда декларированное поведение по умолчание не отрабатывало. Даже в SQL сразу после определения переменных следует их инициализация руками именно тем значением, которое указано в справке, как default (NULL) (достаточно посмотреть исходные коды системных сохранённых процедур в базе master), несмотря на то, что в справке по MS SQL Server написано "After declaration, all variables are initialized as NULL."
Старый 23.01.2002, 16:42   #8  
slava is offline
slava
сибиряк
Самостоятельные клиенты AX
 
468 / 22 (1) +++
Регистрация: 28.12.2001
Адрес: Москва
Что касается SQL, то полностью поддерживаю. Долго ломал голову при написании stored procedure, полагаясь на значение по умолчанию, почему ничего не работает.
__________________
С уважением, Вячеслав.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
условие where по полям одной и той же таблицы Starling DAX: Программирование 23 05.03.2008 15:48
Расширенные возможности Query - арифметические операции в условие Where. Lemming DAX: Программирование 10 07.02.2008 14:38
C# and AX Development: Using the COM Business Connector in C#, the easy way (AX/Axapta) Blog bot DAX Blogs 0 15.12.2007 20:35
Условие where в синтаксисе Query sev DAX: Программирование 25 04.08.2005 08:48
Как в Range задать условие NULL или NOTNULL Pustik DAX: Программирование 2 04.06.2004 13:01
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 15:10.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.