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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 12.05.2006, 11:27   #1  
Goldy is offline
Goldy
Участник
 
29 / 15 (1) ++
Регистрация: 27.04.2006
Переменная в select
Здравствуйте вам дамы и господа!!!!!!!!
В сиквеле есть такая возможность - указывать переменную в селекте например
declare @s varchar(10)

set @s ='ВОВан'
select @s, field1,field2
from table1

Вот есть огромная потребность указать вот так же переменную в селекте аксапты,
но в лоб это сделать не получается.
Может кто знает как это сделать либо напрямую либо как то в обход.
способ вставить с пустым полем, а потом проапдейтить пустое не подходит, так как режим многопользовательский и кто то может влезть.
Жду ответа как кто то там лета
Спасибо
Старый 12.05.2006, 11:37   #2  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
А зачем вам что-то апдейтить? Вы получаете данные в табличную переменную и можете изменить поле в ней без записи в б/д.
Что-то типа
X++:
while select from MyTable
{
    MyTable.MyField = MyValue;
    // что-то делаете с MyTable
}
__________________
Axapta v.3.0 sp5 kr2
Старый 12.05.2006, 11:56   #3  
Goldy is offline
Goldy
Участник
 
29 / 15 (1) ++
Регистрация: 27.04.2006
не совсем подходит данный способ, так как в данном случае идет обработка по одной записи, чего хотелось бы избежать, дело в том что используется там конструкция групповой вставки
insert_recordset table1(...)
select ....
Старый 12.05.2006, 12:07   #4  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Может этом случае будет проще воспользоваться прямым запросом на сервер (insert into ... select from)?
__________________
Axapta v.3.0 sp5 kr2
Старый 12.05.2006, 12:09   #5  
Recoilme is offline
Recoilme
злыдень
Аватар для Recoilme
Злыдни
 
895 / 192 (8) ++++++
Регистрация: 18.06.2003
Через АДО наверно только так можно извратиться
__________________
Ибо зло есть лучшая сила человека. "Человек должен становиться все лучше и злее" -- так учу я. /Ф. Ницше/
Старый 12.05.2006, 12:28   #6  
Goldy is offline
Goldy
Участник
 
29 / 15 (1) ++
Регистрация: 27.04.2006
через адо и через сиквел не катит потому что RECId автоматически не сгенериться а треба чтобы было
Старый 12.05.2006, 12:38   #7  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
Цитата:
Сообщение от Goldy
через адо и через сиквел не катит потому что RECId автоматически не сгенериться а треба чтобы было
Ну вставьте нормально в аксе, а потом через адо или через сиквел сделайте апдейт нужного поля
Старый 12.05.2006, 13:26   #8  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
Цитата:
Сообщение от AndyD
У меня тут мысль пришла - использовать промежуточную таблицу для занесения таких констант.
Ну, кстати, да.
Цитата:
Сообщение от Goldy
через адо и через сиквел не катит потому что RECId автоматически не сгенериться
можно попробовать погенерить RecId самостоятельно, вот ссылка в помошь: Вставка строк в таблицы Аксапты сторонними средствами
Старый 12.05.2006, 12:33   #9  
Recoilme is offline
Recoilme
злыдень
Аватар для Recoilme
Злыдни
 
895 / 192 (8) ++++++
Регистрация: 18.06.2003
упс.. А можете скинуть условие задачки? Может просто лень имена полей перечислить?
__________________
Ибо зло есть лучшая сила человека. "Человек должен становиться все лучше и злее" -- так учу я. /Ф. Ницше/
Старый 12.05.2006, 12:33   #10  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Можно и ч/з Connection, но тут встает вопрос - как заполнять RecID?
__________________
Axapta v.3.0 sp5 kr2
Старый 12.05.2006, 12:38   #11  
Recoilme is offline
Recoilme
злыдень
Аватар для Recoilme
Злыдни
 
895 / 192 (8) ++++++
Регистрация: 18.06.2003
Первый раз вижу вопрос от AndyD, наверно риторический
__________________
Ибо зло есть лучшая сила человека. "Человек должен становиться все лучше и злее" -- так учу я. /Ф. Ницше/
Старый 12.05.2006, 12:44   #12  
Goldy is offline
Goldy
Участник
 
29 / 15 (1) ++
Регистрация: 27.04.2006
через апдейт не катит, так как это поле будет учавствовать в ссылочной целостности и если в него что то левое проскочит то будут нарушены данные сильно
Еще если есть мысли пожалуйста не стесняйтесь и всем помогающим спасибо
Старый 12.05.2006, 12:48   #13  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
Цитата:
Сообщение от Goldy
через апдейт не катит, так как это поле будет учавствовать в ссылочной целостности и если в него что то левое проскочит то будут нарушены данные сильно
не надо в него левое пихать, поставьте общее нормальное допустимое значение - одно на всех.
А о какой ссылочной целостности речь? У вас какие-то свои триггеры и констрэйнты в сиквеле включены?
Старый 12.05.2006, 12:53   #14  
Goldy is offline
Goldy
Участник
 
29 / 15 (1) ++
Регистрация: 27.04.2006
Ссылочнось логическая а не физическая
по связям нужное мне поле никак не подпихнуть по этому и есть желание как то впихнуть нужного мне поля через переменную
Старый 12.05.2006, 12:55   #15  
Recoilme is offline
Recoilme
злыдень
Аватар для Recoilme
Злыдни
 
895 / 192 (8) ++++++
Регистрация: 18.06.2003
т.е. заинсертить все махом, а потом одним апдэйтрекрдсетом в одной транзакции всё проапдэйтить тоже не катит?!?
__________________
Ибо зло есть лучшая сила человека. "Человек должен становиться все лучше и злее" -- так учу я. /Ф. Ницше/
Старый 12.05.2006, 13:00   #16  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
Цитата:
Сообщение от Recoilme
т.е. заинсертить все махом, а потом одним апдэйтрекрдсетом в одной транзакции всё проапдэйтить тоже не катит?!?
я вот тоже не очень понимаю, почему не катит...
Цитата:
Сообщение от Goldy
Ссылочнось логическая а не физическая
Дык Ваша логическая ссылочность нарушится только на время транзакции. Думаю, что невооруженный глаз этого временного нарушения просто не заметит
Старый 12.05.2006, 12:59   #17  
denny is offline
denny
Участник
 
93 / 29 (1) +++
Регистрация: 16.11.2003
Адрес: Novosibirsk
Не уверен, что понял условия задачи, но можно попробовать через макросы. (Пример - макрос InventDimJoin). На каком этапе становится известным значение переменной?
Старый 12.05.2006, 13:19   #18  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
У меня тут мысль пришла - использовать промежуточную таблицу для занесения таких констант. Затем в insert_recordset делать join этой таблицы с основной
Т.е. что-то типа этого
X++:
static void Job112(Args _args)
{

    Table20 table20;
    Table20 table20_;
    table19 table19;
    table21 table21;
    ;
    ttsbegin;
    table20.initValue();
    table20.field1 = 1000;
    table20.insert();

    insert_recordset table19 (field1, field2)
    select field1 from table21
    join field1 from table20_ where table20_.recId == table20.recId;
    table20.delete();
    ttscommit;
}
__________________
Axapta v.3.0 sp5 kr2
За это сообщение автора поблагодарили: Goldy (1), alman (0).
Старый 12.05.2006, 13:29   #19  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,324 / 3547 (125) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
Обычно это делается через while select:
X++:
CustTable custTable;
MyTable   myTable;
;
while select custTable
{
    myTable.clear();
    myTable.fieldForConst = MyConstant;
    myTable.AccountNum = custTable.AccountNum;
    .....
    myTable.insert();
}
Однако Аксапта в случае массовой вставки (как в Вашем случае) предполагает использования класса \System Documentation\Classes\RecordInsertList. С ним также делается все в цикле:
X++:
RecordInsertList ril;
CustTable          custTable;
MyTable            myTable;
;
ril = new RecordInsertList(tablenum(MyTable));
while select custTable
{
    myTable.clear();
    myTable.fieldForConst = MyConstant;
    myTable.AccountNum = custTable.AccountNum;
    .....
    ril.add(myTable);     
}
ril.insertDataBase();
В этом случае вы получите весьма шуструю вставку (по данным ребят, которые исследовали этот класс - по сравнению с предыдущим способом - раз в 10 быстрее, однако я лично не могу ни подтвердить ни опровергнуть это утверждение. Могу сказать лишь что автором утверждения является г-н db )
__________________
Возможно сделать все. Вопрос времени

Последний раз редактировалось sukhanchik; 12.05.2006 в 13:33.
Старый 12.05.2006, 13:43   #20  
Recoilme is offline
Recoilme
злыдень
Аватар для Recoilme
Злыдни
 
895 / 192 (8) ++++++
Регистрация: 18.06.2003
Цитата:
Сообщение от sukhanchik
В этом случае вы получите весьма шуструю вставку (по данным ребят, которые исследовали этот класс - по сравнению с предыдущим способом - раз в 10 быстрее, однако я лично не могу ни подтвердить ни опровергнуть это утверждение. Могу сказать лишь что автором утверждения является г-н db )
остается только добавить что коварный db ещё чуть чуть его допиливал для пущего ускорения )
и на больших объемах лучше пачками тыщ по 5-10 insertDataBase() вызывать
__________________
Ибо зло есть лучшая сила человека. "Человек должен становиться все лучше и злее" -- так учу я. /Ф. Ницше/
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
2 while select или join? _scorp_ DAX: Программирование 9 23.01.2009 16:02
Разница NotInTTS и Found Logger DAX: База знаний и проекты 6 18.09.2008 12:35
gatesasbait: Reverse keyword on Select Statements Blog bot DAX Blogs 0 08.02.2008 00:10
Fred Shen: Always use recId to know if a select statement returns a record Blog bot DAX Blogs 0 28.10.2006 16:40
Вопрос про Demand Planner slava09 DAX: Функционал 4 25.09.2006 11:43

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

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

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