AXForum  
Go Back   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Forgotten Your Password?
Register Forum Rules FAQ Members List Today's Posts Search

 
 
Thread Tools Search this Thread Display Modes
Old 08.05.2003, 09:06   #1  
Buba is offline
Buba
Участник
 
90 / 10 (1) +
Join Date: 24.04.2003
Location: Томск
? Как из Axapta загрузить (выполнить) хранимую процедуру
Пытаюсь отыскать в АОТ какой-нибудь класс, позволяющий работать с хранимыми процедурами SQL Server - пока безуспешно. Есть ли такая воозможность вообще и если да, то как ее реализовать в Axapta?
Old 08.05.2003, 09:25   #2  
Alex_K is offline
Alex_K
Участник
 
531 / 36 (3) +++
Join Date: 07.02.2003
А Вы загляните в базу Аксапты через MS SQL Enterprise Manager - там хоть одна SP есть? Применение SP официально не рекомендуется Navision. Так что придется разбираться самому. Или многоуважаемый коллективный разум что-нибудь подскажет из собственного опыта...
Old 08.05.2003, 09:26   #3  
Garic is offline
Garic
NavAx
Garic's Avatar
NavAx Club
 
393 / 63 (3) ++++
Join Date: 23.07.2002
Location: Москва
Например так:

PHP Code:
    Connection  connection;
    
Statement   stmt;
    
ResultSet   resultSet;
    
str         sqlS;
    ;

    
connection = new Connection();
    
stmt connection.createStatement();

    
sqlS 'execute AxTest.bmssa.test';
    
resultSet stmt.executeQuery(sqlS);
    while (
resultSet.next())
    {
        
info (resultSet.getString(1));
    } 
getString(1) - первая колонка.
P.S. Если команду getString выполнить дважды возникнет ошибка. Т.е. так делать нельзя:
PHP Code:
    while (resultSet.next())
    {
        
info (resultSet.getString(1));
        
info (resultSet.getString(1));
    } 
__________________
С уважением, Игорь Ласийчук.
This post has been rated by: kashperuk (3).
Old 08.05.2003, 09:37   #4  
Buba is offline
Buba
Участник
 
90 / 10 (1) +
Join Date: 24.04.2003
Location: Томск
В папке Stored Procedures их 30 штук
За код благодарю! Спасибо!
Old 08.05.2003, 09:50   #5  
Alex_K is offline
Alex_K
Участник
 
531 / 36 (3) +++
Join Date: 07.02.2003
Во-первых, те SP, что имеются, системные и к Аксапте отношения не имеют, специально посмотрел в базы 2.5 и 3.0
Во-вторых, Игорь, а User-Defined Function от SQL 2000 не использовали?
Old 08.05.2003, 10:10   #6  
Garic is offline
Garic
NavAx
Garic's Avatar
NavAx Club
 
393 / 63 (3) ++++
Join Date: 23.07.2002
Location: Москва
Quote:
Во-первых, те SP, что имеются, системные и к Аксапте отношения не имеют, специально посмотрел в базы 2.5 и 3.0
Ну мало-ли. Может нужно запустить свою процедуру.

Quote:
Во-вторых, Игорь, а User-Defined Function от SQL 2000 не использовали?
Не приходилось. Думаю через Statement можно выполнить любую команду.
Полезным бывает таким образом выполнять запрос код которого заранее неизвестен. Конечно в этом случае можно пользоваться командой runbuf, но она работает медленней.
__________________
С уважением, Игорь Ласийчук.
Old 08.05.2003, 10:22   #7  
Buba is offline
Buba
Участник
 
90 / 10 (1) +
Join Date: 24.04.2003
Location: Томск
Системные значит системные, 31 первая будет не системной.

Господа, а почему так настоятельно не рекомендуется использовать хранимые процедуры? Где можно подчерпнуть информацию-объяснения или аргументы?

Может это связано с тем, что возможность прямого доступа к SQL Server, а не средствами Axapta, может привести к нарушению структуры БД (например, неправильная работа с RecId).
Old 08.05.2003, 10:32   #8  
Alex_K is offline
Alex_K
Участник
 
531 / 36 (3) +++
Join Date: 07.02.2003
Quote:
Изначально опубликовано Buba

Господа, а почему так настоятельно не рекомендуется использовать хранимые процедуры? Где можно подчерпнуть информацию-объяснения или аргументы?

Может это связано с тем, что возможность прямого доступа к SQL Server, а не средствами Axapta, может привести к нарушению структуры БД (например, неправильная работа с RecId).
Примерно так. Основная мотивировка - что-то вроде: "Мы не сможем гарантировать работоспособность Ваших доработок после установки обновлений" и "Это не соответствует идеологии системы".

Однозначно, на мой взгляд, что SP или UDF в Аксапте стоит использовать только для чтения.
Old 08.05.2003, 10:37   #9  
mazzy is offline
mazzy
Участник
mazzy's Avatar
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Join Date: 29.11.2001
Location: Москва
Blog Entries: 10
Ну и recID, конечно.

На самом деле использование хранимых процедур сильно осложнит вам жизнь в будущем, когда вы будете ставить СП, переходиьт на новую версию или на другую базу данных. Стоимость будущих сложностей с лихвой может перекрыть преимущества от текущего использования хранимых процедур.

Второй аспект. Аксапта сама занимается кэшированием данных. Хранимые процедуры скорее всего этот механизм учитывать не будут. Что чревато потерей данных.

Третий аспект. На самом деле с запросами у Аксапты более-менее хорошо. Желание использовать хранимые процедуры, как правило, возникает из-за неправильного или неполного использования стандартных возможностей. А это значит, что ресурсы тратятся зря, не на достижение результата, а на борьбу за победу рабочего класса (за хранимые процедуры ). Конечно бывают исключения. Но судя по вопросу, это не тот случай.
Old 08.05.2003, 10:41   #10  
Андре is offline
Андре
Moderator
Сотрудники компании GMCS
 
2,375 / 464 (20) +++++++
Join Date: 03.12.2001
Quote:
Ну мало-ли. Может нужно запустить свою процедуру.
Как правило, такой подход применяется при импорте в Аксапту данных из различных внешних систем.
В сети есть множество разнородных источников данных, подключенных к SQL Server как linked сервера. На SQL Server'е пишется SP, которая из всех этих источников данных выбирает нужную новую информацию, как-то обрабатывает ее и заносит в специальную табличку. Пользователь Аксапты с нужной ему периодичностью жмет клавишу в Аксапте, запускается эта хранимая процедура, все данные собираются в специальную табличку, откуда затем самой Аксаптой (с помощбю того же Connection) растаскиваются по необходимым таблицам.
Old 08.05.2003, 10:46   #11  
Андре is offline
Андре
Moderator
Сотрудники компании GMCS
 
2,375 / 464 (20) +++++++
Join Date: 03.12.2001
Quote:
Может это связано с тем, что возможность прямого доступа к SQL Server, а не средствами Axapta, может привести к нарушению структуры БД (например, неправильная работа с RecId).
Дам и я свою ссылочку:

http://www.adem.karavaevo.ru/Axapta/Article1.html
Old 08.05.2003, 10:50   #12  
mazzy is offline
mazzy
Участник
mazzy's Avatar
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Join Date: 29.11.2001
Location: Москва
Blog Entries: 10
Quote:
Изначально опубликовано Alex_K
"Это не соответствует идеологии системы".
Точно. А идеология очень простая: Вся логика находится в одном месте - в Аксапте.
Такой подход сильно упрощает и удешеляет сопровождение.
Для выполнения операций на серверной стороне используется AOS, а не хранимые процедуры.

Конечно бывают случаи. Например, Андре, говорит о импорте. Но я бы и к таким случаям относился с осторожностью, поскольку validate проходит непонятно по каким правилам... И что будет с целостностью базы после импорта внешними (не Аксаптовскими) средствами - вопрос.
Old 08.05.2003, 11:07   #13  
Buba is offline
Buba
Участник
 
90 / 10 (1) +
Join Date: 24.04.2003
Location: Томск
Андре описал именно тот случай, над которым мы работаем, а именно импорт данных.

Вопрос к mazzy.
Если все-таки следовать рекомендациям использовать для импорта исключительно средства Аксапта с тем, чтобы не иметь проблем в будующем, то какими именно?
Old 08.05.2003, 11:13   #14  
Андре is offline
Андре
Moderator
Сотрудники компании GMCS
 
2,375 / 464 (20) +++++++
Join Date: 03.12.2001
Quote:
Конечно бывают случаи. Например, Андре, говорит о импорте. Но я бы и к таким случаям относился с осторожностью, поскольку validate проходит непонятно по каким правилам... И что будет с целостностью базы после импорта внешними (не Аксаптовскими) средствами - вопрос.
По моему ты меня не совсем понял. Или я что-то не понимаю

Хранимая процедура просто собирает информацию из различных источников - dbf-файлы, excel'евские файлы, текстовые файлы, другие базы данных на SQL Server'е, обабатывает их, и помещает в одну таблицу. Здесь имеется в виду не Аксаптовская таблица, а просто таблица на SQL Server'е.
Затем уже Аксапта лезет в эту таблицу (например с помощью ADO) берет оттуда данные и САМА помещает их в свои Аксаптовские таблицы.

Так что с validate здесь все в порядке.
Old 08.05.2003, 11:27   #15  
Alex_K is offline
Alex_K
Участник
 
531 / 36 (3) +++
Join Date: 07.02.2003
Quote:
Изначально опубликовано Андре


Хранимая процедура просто собирает информацию из различных источников - dbf-файлы, excel'евские файлы, текстовые файлы, другие базы данных на SQL Server'е, обабатывает их, и помещает в одну таблицу. Здесь имеется в виду не Аксаптовская таблица, а просто таблица на SQL Server'е.
Затем уже Аксапта лезет в эту таблицу (например с помощью ADO) берет оттуда данные и САМА помещает их в свои Аксаптовские таблицы.

Так что с validate здесь все в порядке.
А зачем так сложно? Если буферная таблица более ни для чего не используется, только залил данные - разбросал по другим таблицам - подмел за собой, зачем городить огород с ADO? Кстати, свойство таблицы "Temporary" для этого не подойдет?
Old 08.05.2003, 11:51   #16  
Андре is offline
Андре
Moderator
Сотрудники компании GMCS
 
2,375 / 464 (20) +++++++
Join Date: 03.12.2001
Quote:
А зачем так сложно?
Потому, что в SP происходит много такой работы, которая плохо реализуется в Аксапте. Под "плохо" я имею в виду то, что часть вещей в ней решается не красиво (так как она для этого не предназначена), а часть вещей работает очень медленно (так как на T-SQL я могу составить запрос, который по быстродействию далеко обгонит запросы, генерируемые Аксаптой).
Old 08.05.2003, 11:59   #17  
Alex_K is offline
Alex_K
Участник
 
531 / 36 (3) +++
Join Date: 07.02.2003
Ты не понял...
Я спрашивал о возможности заливать данные из SP не в отдельную таблицу MS SQL, а в таблицу Аксапты, специально для транзита данных предназначенную, чтобы не заморачиваться с ADO и т.п.
Old 08.05.2003, 12:04   #18  
Андре is offline
Андре
Moderator
Сотрудники компании GMCS
 
2,375 / 464 (20) +++++++
Join Date: 03.12.2001
Quote:
Я спрашивал о возможности заливать данные из SP не в отдельную таблицу MS SQL, а в таблицу Аксапты
Сложности с генерацией recId из вне Акспты.

Хотя вполне решаемые - см. мою ссылку выше.
Old 08.05.2003, 22:43   #19  
mazzy is offline
mazzy
Участник
mazzy's Avatar
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Join Date: 29.11.2001
Location: Москва
Blog Entries: 10
Alex_k, Андре, понял. Согласен.
Хотя это опять программирование....

Quote:
Изначально опубликовано Buba
Если все-таки следовать рекомендациям использовать для импорта исключительно средства Аксапта с тем, чтобы не иметь проблем в будующем, то какими именно?
Хм... смотря кто спрашивает, если такой вопрос задает пользователь, то использовать иморт из экселя или из текстового файла. www.axapta.mazzy.ru/hints/import/

Если такой вопрос задает программист, то наверное способ, предложенный Andre. Где то готовим данные, а в Аксапту затягиваем job'ом.


Есть еще один способ для программиста. Он мне нравится больше. Но на самом деле это дело вкуса. В Аксапте есть классы, которые могут читать данные из ODBC. Посмотрите на форму CCDataLinkTable и все с ней связанное. Правда этот модуль идет в дорогой лицензии модуля Стратегическое управление. Но посмотреть на этот инструмент все равно стоит.
 

Similar Threads
Thread Thread Starter Forum Replies Last Post
Загрузить КЛАДР в Axapta 4 Poleax DAX: Функционал 58 09.08.2010 12:21
Как изменить загрузить файл лицензий не заходя в AXAPTA ? Ученик DAX: Администрирование 9 28.03.2005 23:34
Как вызвать через ADO хранимую процедуру с параметрами ? LSA DAX: Программирование 16 23.12.2004 18:17
Можно ли из Аксапты вызвать хранимую процедуру на SQL Server Yuri Safronov DAX: Программирование 8 02.09.2002 14:25
Введение в Аксапту Роман Кошелев DAX: Прочие вопросы 0 18.12.2001 14:00

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Forum Jump

Рейтинг@Mail.ru
All times are GMT +3. The time now is 01:49.
Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Contacts E-mail, Advertising.