|
![]() |
#1 |
Axapta Retail User
|
Как-то на проекте переносили данные прямым запросом.
Не так ужасно -) И очень быстро -)) 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 |
|
![]() |
#2 |
Участник
|
т.е. любой запрос изначально все настраивают в AOT/Queries ? настраивая DataSourse и прям там указывая все условия? или сложный запрос настраивается на методах Queries. непривычно просто, чаще встречала где настрочил текст и вставил текстом.
|
|
![]() |
#3 |
северный Будда
|
Цитата:
разумеется, не все условия можно указать прямо в query, но дописать потом в конкретном объекте пару строк не самая большая проблема.
__________________
С уважением, Вячеслав |
|
![]() |
#4 |
NavAx
|
Цитата:
![]()
__________________
Isn't it nice when things just work? |
|
![]() |
#5 |
Axapta Retail User
|
|
|
![]() |
#6 |
Участник
|
Спасибо большое всем! а вот еще один вопрос не отвеченный мой про обучение отчетам XML, где научиться? где посмотреть простейшие XML отчеты-примеры ?
|
|
![]() |
#7 |
Участник
|
почему же снова тишина?)) ну ведь все как-то научились xml отчеты делать? а где,как научились?
|
|
![]() |
#8 |
Участник
|
Цитата:
Сообщение от 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. |
|
|
Опции темы | Поиск в этой теме |
Опции просмотра | |
|