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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 25.01.2002, 05:43   #1  
Maxim Gorbunov is offline
Maxim Gorbunov
Administrator
Соотечественники
Лучший по профессии 2009
 
2,483 / 645 (26) +++++++
Регистрация: 27.11.2001
Адрес: Dubai, UAE
? А RecId может быть отрицательным?
Это нормально, что у меня запись при добавлении в таблицу получила отрицательное значение RecId? Кто-нибудь с таким сталкивался или я один такой счастливый?!

А я-то всегда считал, что RecId - что-то вроде unsigned long...
__________________
Not registered yet? Register here!
Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me
Старый 25.01.2002, 06:53   #2  
Andrew Besedin is offline
Andrew Besedin
Участник
 
121 / 15 (1) ++
Регистрация: 25.01.2002
Теоретически это очень даже возможно. Предствим ситуацию, когда RecId достигнет-таки макс. своего значения. Что тогда? Очевидно, перейдет к минусам.
... Кстати, этот вопрос поднимался как-то в конференции tadorna-axapta на yahoogroups...
И еще кстати, RecId - это самый обычный int (если я не ошибаюсь)... Хотя я лично не разу не видел отрицательных recID.
Старый 25.01.2002, 08:28   #3  
slava is offline
slava
сибиряк
Самостоятельные клиенты AX
 
468 / 23 (1) +++
Регистрация: 28.12.2001
Адрес: Москва
Lightbulb Взято с technet.navision.com
Do not test for [Recid > 0] - valid Recid's may be negative as well...
Testing if a database buffer is empty can be done using the Recid column. But a little care should be taken. This article explains how.


One way to determine if a select returned a record, is to test the RecId column. Some programmers - including experienced XAL programmers - does this by testing if the column is greater than zero:

if (myTable.Recid>0) // then blah, blah,...
Still, for large amounts of data, Recid values may exceed the upper limit of a signed 32-bit long. For such high values, the Recid's in Axapta appear as negative number, thus making the above X++ construction error prone. Instead use

if (myTable.Recid) // then blah, blah,...
or

if (myTable.Recid != 0) // then blah, blah,...
One exception for this rule is, when the Recid column has been used for an aggregation such as count:

select count(Recid) from myTable; if (myTable.Recid > 0) // then blah, blah,...
since the number of records is obviously not negative.
__________________
С уважением, Вячеслав.
Старый 25.01.2002, 08:44   #4  
Andrew Besedin is offline
Andrew Besedin
Участник
 
121 / 15 (1) ++
Регистрация: 25.01.2002
... Конечно, technet.navision.com не может ошибаться...
Но все же, гораздо лучше (на мой взгляд) для проверки, чего оно нам вернуло, использовать простое if(MyTable)// blah-blah
Вот пример, когда это лучше:
select sum (Qty), sum (CostAmountPosted) from InventTrans // можно еще пять полей написать
where // условия - неважно
//Если ХОТЬ чего-то есть, то выполняй (напр, вывод на экран)
if(inventTrans)
{
//А тут это самое blah-blah
}
Кстати, RecID у этого inventTrans'а, конечно же, нулевой.

Удачи!
Андрей Беседин.
Старый 25.01.2002, 09:16   #5  
Wamr is offline
Wamr
----------------
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
1,737 / 858 (32) +++++++
Регистрация: 15.01.2002
Адрес: Москва
Записей в блоге: 7
Из личного опыта
Отрицательный RecId - нормальное явление, при котором БД нормально существует и работает.
Другой вопрос, что произойдет, когда RecId опять придет к 0?
Старый 12.05.2005, 18:43   #6  
Кирен is offline
Кирен
Участник
 
22 / 10 (1) +
Регистрация: 03.02.2004
Адрес: Украина, г. Донецк
Впечатлилась результатами изысканий...

Сделано вот что:
вручную изменялись значения nextValue в таблице SYSTEMSEQUENCES
на максимальное положительное, максимальное отрицательное целое и на -1.
На всякий случай выйти из Аксапты и заново зайти.
При максимальном положительном nextValue устанавливался в отрицательный,
при максимальном отрицательном- уменьшался,
при (-1) - Аксапта издевательства не выдержала. И "выругалась".

Но возник вопрос: а что означает поле ID в таблице SYSTEMSEQUENCES??
Дело в том, что для тестируемой компании не одна строка была в этой таблице, а
несколько с разными ID (-3,-2,-1). И имена разные (SysEvent, TRANSID, SEQNO).

Вопрос-то не критичный. Просто интересно.
Старый 12.05.2005, 19:01   #7  
kvan is offline
kvan
Moderator
Аватар для kvan
Дети Юза
 
775 / 49 (3) +
Регистрация: 07.08.2002
Адрес: Donetsk
Это просто эсперименты или есть реальная проблема?

Если я думаю про тот проект, то там отрицательные RecId были уже тогда когда ты еще и про аксапту не слышала. И ничего - жило себе спокойно
Старый 13.05.2005, 01:07   #8  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,309 / 3546 (125) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
Ну кстати, именно из-за этого в свое время разгорелся спор http://www.axforum.info/forums/showt...ighlight=recId , в результате которого господин db привел суперjob, показывающий некорректное приведение типов int->boolean. Фишка состояла в том, что, если RecId равен -512, и (вроде) так далее по степеням двойки, то выражение if (!myTable) будет ложно (запись существует), а выражение if (!myTable.RecId) будет истинно, т.к. -512 - это false (с точки зрения Аксапты)
Старый 14.05.2005, 15:10   #9  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
ну, по поводу поля ID так это тип элемента, значения которого генерируются ядром.
То есть при ID = -1 по NextVal генерируется RecID, при ID = -2, TransactionId.
При -3 - не знаю, что. SysEvent, видимо.
Старый 03.05.2006, 13:36   #10  
DmitrySt is offline
DmitrySt
Участник
 
17 / 18 (1) ++
Регистрация: 22.11.2004
Адрес: Минск
Цитата:
Сообщение от Кирен
Но возник вопрос: а что означает поле ID в таблице SYSTEMSEQUENCES??
Дело в том, что для тестируемой компании не одна строка была в этой таблице, а
несколько с разными ID (-3,-2,-1). И имена разные (SysEvent, TRANSID, SEQNO).

Вопрос-то не критичный. Просто интересно.
SEQNO используется для генерирования уникальных (на уровне компании в Аксапте) RecId
TRANSID используется для генерирования уникальных (на уровне компании в Аксапте) ID в TransactionLog (Аудит)
Теги
recid

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
снова RecId из SQL SHiSHok DAX: Программирование 4 03.03.2009 15:13
if (record) vs if (record.RecId) kashperuk DAX: Программирование 18 27.11.2008 18:53
поля, содержащие RecId somebody DAX: Программирование 15 16.05.2008 17:50
RecID при экспорте-импорте не восстанавливаются? mazzy DAX: База знаний и проекты 14 04.02.2003 14:07
генерирование RecId Дмитрий DAX: Программирование 8 30.01.2003 13:55
Опции темы Поиск в этой теме
Поиск в этой теме:

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

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 17:21.