![]() |
#37 |
Участник
|
Цитата:
Сообщение от 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. |
|