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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 10.03.2015, 17:26   #1  
novic is offline
novic
Axapta Retail User
Axapta Retail User
 
168 / 25 (0) +++
Регистрация: 14.04.2005
Как-то на проекте переносили данные прямым запросом.
Не так ужасно -) И очень быстро -))

X++:
  SOURCE #RHRMImportCalendarDate
    #static void RHRMImportCalendarDate(Args _args)
    #{
    #    ODBCConnection                odbcConnection;
    #    Statement                     statement;
    #    str                           sqlQueryString;
    #    SqlStatementExecutePermission permission;
    #    ResultSet                     resultSet;
    #    LoginProperty                 loginProperty;
    #    str                           serverName = "SUPER";
    #    //str                           dataBaseName = "BASE";
    #    str                           dataBaseName = "DT";
    #    DataAreaId                    dataAreaId;
    #    int                           counter;
    #
    #    void import()
    #    {
    #        RPayCalendarDate rpayCalendarDate;
    #        ;
    #
    #        rpayCalendarDate.clear();
    #        rpayCalendarDate.TransDate = resultSet.getDate(1);
    #        rpayCalendarDate.CalendarId = resultSet.getString(2);
    #        rpayCalendarDate.PayDayType = resultSet.getInt(3);
    #
    #        if(!RPayCalendarDate::exist(rpayCalendarDate.CalendarId, rpayCalendarDate.TransDate))
    #        {
    #            rpayCalendarDate.doInsert();
    #        }
    #
    #
    #        counter++;
    #    }
    #    ;
    #
    #    try
    #    {
    #        loginProperty = new LoginProperty();
    #        loginProperty.setServer(serverName);
    #        loginProperty.setDatabase(dataBaseName);
    #
    #        odbcConnection = new ODBCConnection(loginProperty);
    #
    #        if (!odbcConnection)
    #        {
    #            info("Ошибка при подключении к базе данных");
    #        }
    #    }
    #    catch (Exception::Internal)
    #    {
    #        info("Возникла ошибка при подключении к базе данных. Операция отменена.");
    #    }
    #    catch (Exception::Error)
    #    {
    #        info("Ошибка при подключении к базе данных!");
    #    }
    #
    #    statement = odbcConnection.createStatement();
    #
    #
    #    sqlQueryString = strfmt("SELECT RPAYCALENDARDATE.TRANSDATE"//1
    #                          + ", RPAYCALENDARDATE.CALENDARID"//2
    #                          + ", RPAYCALENDARDATE.PAYDAYTYPE"//3
    #                          + " FROM RPAYCALENDARDATE"
    #                          + " WHERE RPAYCALENDARDATE.DATAAREAID = 'dat'"
    #                          + " AND RPAYCALENDARDATE.TRANSDATE > '20091231'");
    #
    #    permission = new SqlStatementExecutePermission(sqlQueryString);
    #    permission.assert();
    #    resultSet = statement.executeQuery(sqlQueryString);
    #
    #    while (resultSet.next())
    #    {
    #        ttsbegin;
    #
    #        import();
    #
    #        ttscommit;
    #    }
    #
    #    statement.close();
    #
    #    info(strfmt("Импортировано %1", counter));
    #}
  ENDSOURCE
Старый 11.03.2015, 09:45   #2  
Морковка is offline
Морковка
Участник
 
71 / 10 (1) +
Регистрация: 12.10.2014
т.е. любой запрос изначально все настраивают в AOT/Queries ? настраивая DataSourse и прям там указывая все условия? или сложный запрос настраивается на методах Queries. непривычно просто, чаще встречала где настрочил текст и вставил текстом.
Старый 11.03.2015, 12:29   #3  
pitersky is offline
pitersky
северный Будда
Аватар для pitersky
Ex AND Project
Соотечественники
 
1,517 / 435 (18) +++++++
Регистрация: 26.09.2007
Адрес: Солнечная система
Цитата:
Сообщение от Морковка Посмотреть сообщение
т.е. любой запрос изначально все настраивают в AOT/Queries ? настраивая DataSourse и прям там указывая все условия? или сложный запрос настраивается на методах Queries. непривычно просто, чаще встречала где настрочил текст и вставил текстом.
насчёт все не скажу, но я делаю именно так
разумеется, не все условия можно указать прямо в query, но дописать потом в конкретном объекте пару строк не самая большая проблема.
__________________
С уважением,
Вячеслав
Старый 11.03.2015, 10:59   #4  
macklakov is offline
macklakov
NavAx
Аватар для macklakov
 
2,347 / 996 (38) +++++++
Регистрация: 03.04.2002
Цитата:
Сообщение от novic Посмотреть сообщение
Как-то на проекте переносили данные прямым запросом.
Не так ужасно -) И очень быстро -))
И что, прямо по живой, рабочей базе?
__________________
Isn't it nice when things just work?
Старый 11.03.2015, 17:53   #5  
novic is offline
novic
Axapta Retail User
Axapta Retail User
 
168 / 25 (0) +++
Регистрация: 14.04.2005
Цитата:
Сообщение от macklakov Посмотреть сообщение
И что, прямо по живой, рабочей базе?
Да нет уж, в тесте скорее всего, не помню ужо )
Старый 13.03.2015, 10:02   #6  
Морковка is offline
Морковка
Участник
 
71 / 10 (1) +
Регистрация: 12.10.2014
Спасибо большое всем! а вот еще один вопрос не отвеченный мой про обучение отчетам XML, где научиться? где посмотреть простейшие XML отчеты-примеры ?
Старый 25.03.2015, 09:46   #7  
Морковка is offline
Морковка
Участник
 
71 / 10 (1) +
Регистрация: 12.10.2014
почему же снова тишина?)) ну ведь все как-то научились xml отчеты делать? а где,как научились?
Старый 11.03.2015, 12:56   #8  
skuull is offline
skuull
Участник
Most Valuable Professional
Лучший по профессии 2014
 
700 / 752 (27) +++++++
Регистрация: 08.03.2013
Адрес: ХЗ
Цитата:
Сообщение от novic Посмотреть сообщение
Как-то на проекте переносили данные прямым запросом.
Не так ужасно -) И очень быстро -))

X++:
  SOURCE #RHRMImportCalendarDate
    #static void RHRMImportCalendarDate(Args _args)
    #{
    #    ODBCConnection                odbcConnection;
    #    Statement                     statement;
    #    str                           sqlQueryString;
    #    SqlStatementExecutePermission permission;
    #    ResultSet                     resultSet;
    #    LoginProperty                 loginProperty;
    #    str                           serverName = "SUPER";
    #    //str                           dataBaseName = "BA
    #    str                           dataBaseName = "DT";
    #    DataAreaId                    dataAreaId;
    #    int                           counter;
    #
    #    void import()
    #    {
    #        RPayCalendarDate rpayCalendarDate;
    #        ;
    #
    #        rpayCalendarDate.clear();
    #        rpayCalendarDate.TransDate = resultSet.getDate(1);
    #        rpayCalendarDate.CalendarId = resultSet.getString(2);
    #        rpayCalendarDate.PayDayType = resultSet.getInt(3);
    #
    #        if(!RPayCalendarDate::exist(rpayCalendarDate.CalendarId, rpayCalendarDate.TransDate))
    #        {
    #            rpayCalendarDate.doInsert();
    #        }
    #
    #
    #        counter++;
    #    }
    #    ;
    #
    #    try
    #    {
    #        loginProperty = new LoginProperty();
    #        loginProperty.setServer(serverName);
    #        loginProperty.setDatabase(dataBaseName);
    #
    #        odbcConnection = new ODBCConnection(loginProperty);
    #
    #        if (!odbcConnection)
    #        {
    #            info("Ошибка при подключении к базе данных");
    #        }
    #    }
    #    catch (Exception::Internal)
    #    {
    #        info("Возникла ошибка при подключении к базе данных. Операция отменена.");
    #    }
    #    catch (Exception::Error)
    #    {
    #        info("Ошибка при подключении к базе данных!");
    #    }
    #
    #    statement = odbcConnection.createStatement();
    #
    #
    #    sqlQueryString = strfmt("SELECT RPAYCALENDARDATE.TRANSDATE"//1
    #                          + ", RPAYCALENDARDATE.CALENDARID"//2
    #                          + ", RPAYCALENDARDATE.PAYDAYTYPE"//3
    #                          + " FROM RPAYCALENDARDATE"
    #                          + " WHERE RPAYCALENDARDATE.DATAAREAID = 'dat'"
    #                          + " AND RPAYCALENDARDATE.TRANSDATE > '20091231'");
    #
    #    permission = new SqlStatementExecutePermission(sqlQueryString);
    #    permission.assert();
    #    resultSet = statement.executeQuery(sqlQueryString);
    #
    #    while (resultSet.next())
    #    {
    #        ttsbegin;
    #
    #        import();
    #
    #        ttscommit;
    #    }
    #
    #    statement.close();
    #
    #    info(strfmt("Импортировано %1", counter));
    #}
  ENDSOURCE
Замечательный пример.
Если всё-таки odbcConnection может быть null то пользователь увидит инфо, а потом стектрейс.
И интересно кто закроет statement если что-то упадёт в execute или в while какой-нибудь дедлок или ещё что...
Ну и counter показует количество прочитанных строк, а не вставленных. В худшем случае напишет что заимпортило 1000, а по факту в базу может попасть 0.

Последний раз редактировалось skuull; 11.03.2015 в 12:59.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
setTimeOut() не работает в классе, если экземпляр класса создан через вызов MenuFunction AR® DAX: Программирование 10 22.05.2013 16:53
Вызов метода базового класса Eldar9x DAX: Программирование 15 22.03.2008 19:10
передача курсора в два класса kitty DAX: Программирование 3 09.08.2006 13:21
Запустить метод класса loka DAX: Программирование 2 13.03.2006 15:40
Некоторые вопросы внедрения приложений. Часть 2 Михаил Ковалев DAX: Прочие вопросы 0 27.05.2002 10:43
Опции темы Поиск в этой теме
Поиск в этой теме:

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

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

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

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