День добрый.
Помогите, пожалуйста, с ошибкой Run-time error '-2147467259 (80004005)': Method 'CopyFromRecordset' of object 'Range' failed.
Очень прошу помочь ибо уже начинаю отчаиваться в поисках проблемы. Написал код, который выполняет выгрузку данных из базы данных Access в Excel согласно выбранным пользователем параметрам. Заранее приношу извинения за то, что привожу достаточно объемный код, но это исключительно для полноты картины.
Аргументы в процедуру передаются из пользовательской формы, в частности: начальный период, конечный период и страна.
Фишка в том, что ошибка Run-time error '-2147467259 (80004005)' проявляется, когда я пытаюсь выгрузить информацию по
конкретным странам (в данном случае Бразилия),
и макрос прерывается на выгрузке определенной записи, которая ничем особенным от других не отличается. То есть, частично работает.
В запросе длинных полей (свыше 255 символов), полей MEMO нет. Пытался изменить формулы вычислений, но не помогло.
Посмотрите, пожалуйста, кто-нибудь опытным взглядом и укажите где собака зарыта. Возможно кто-то подскажет обходные пути, ведь в самом Ассеssе запрос формируется нормально.
Заранее благодарен за подсказки.
Код |
---|
Sub RunCasePerCountry(Optional dPeriodFrom As Date = #7/1/2013#, Optional dPeriodTo As Date = #6/1/2014#, Optional stCountry As String = "Brazil", _
Optional stCurrency As String = "EUR", Optional stSaveAs As String, Optional bOpenReport = True)
Dim MyDatabase As DAO.Database
Dim MyRecordset As DAO.Recordset
Dim stPeriodFrom As String, stPeriodTo As String
Dim MyQuery As String
Dim i As Integer, c As Integer
Dim wrbReport As Workbook
Dim shtData As Worksheet, shtReport As Worksheet
stPeriodFrom = Month(dPeriodFrom) & "/" & Day(dPeriodFrom) & "/" & Year(dPeriodFrom)
stPeriodTo = Month(dPeriodTo) & "/" & Day(dPeriodTo) & "/" & Year(dPeriodTo)
Application.ScreenUpdating = False
MyQuery = "SELECT tDirection.DIR_NAME AS Direction, tPeriod.YEAR_ AS [Year], tPeriod.MTH_NUM AS [Month], tPeriod.PERIOD AS Period, tCountry.COUN_NAME AS Country, "
MyQuery = MyQuery + "qUnionTrafficAll.TAP_CODE AS [TAP Code], qTAP_DP_Status.DP_NAME AS [Discount Partner], IIf([tDiscountStatus].[ST_NAME] Is Null,'No Discount',"
MyQuery = MyQuery + "[tDiscountStatus].[ST_NAME]) AS Status, tTraffic_EDS.TRF_NAME AS Service, tPartner.PART_NAME AS Partner, qUnionTrafficAll.NUM_CED AS Traffic, "
MyQuery = MyQuery + "[qUnionTrafficAll].[S_GR_CH]*[qSDRRates_" & stCurrency & "].[SDR_RATE] AS [Gross Charge], "
MyQuery = MyQuery + "IIf([qDiscountTariffs_" & stCurrency & "].[IOT_DISC] Is Null,[Gross Charge],[qDiscountTariffs_" & stCurrency & "].[IOT_DISC]*[qUniontrafficAll].[NUM_CED]) AS [Net Charge], "
MyQuery = MyQuery + "[Net Charge]/[qUniontrafficAll].[NUM_CED] AS [Actual Rate], qDiscountTariffs_" & stCurrency & ".IOT_DISC "
MyQuery = MyQuery + "FROM (tCountry INNER JOIN tPartner ON tCountry.COUN_CODE = tPartner.COUNT_CODE) INNER JOIN (((tCallEventDetail INNER JOIN "
MyQuery = MyQuery + "(((tPeriod INNER JOIN (((qUnionTrafficAll LEFT JOIN qDiscountTariffs_" & stCurrency & " ON (qUnionTrafficAll.DIR_CODE = qDiscountTariffs_" & stCurrency & ".DIR_CODE) AND "
MyQuery = MyQuery + "(qUnionTrafficAll.YEAR_ = qDiscountTariffs_" & stCurrency & ".YEAR_) AND (qUnionTrafficAll.MTH_NUM = qDiscountTariffs_" & stCurrency & ".MTH_NUM) AND "
MyQuery = MyQuery + "(qUnionTrafficAll.CED_CODE = qDiscountTariffs_EUR.CED_CODE) AND (qUnionTrafficAll.SF1_CODE = qDiscountTariffs_" & stCurrency & ".SF1_CODE) AND "
MyQuery = MyQuery + "(qUnionTrafficAll.TAP_CODE = qDiscountTariffs_EUR.TAP_CODE)) LEFT JOIN qSDRRates_" & stCurrency & " ON (qUnionTrafficAll.YEAR_ = qSDRRates_" & stCurrency & ".YEAR_) AND "
MyQuery = MyQuery + "(qUnionTrafficAll.MTH_NUM = qSDRRates_EUR.MTH_NUM)) INNER JOIN tServiceFamily1 ON qUnionTrafficAll.SF1_CODE = tServiceFamily1.SF1_CODE) ON "
MyQuery = MyQuery + "(tPeriod.MTH_NUM = qUnionTrafficAll.MTH_NUM) AND (tPeriod.YEAR_ = qUnionTrafficAll.YEAR_)) INNER JOIN tDirection ON "
MyQuery = MyQuery + "qUnionTrafficAll.DIR_CODE = tDirection.DIR_CODE) INNER JOIN tTAP ON qUnionTrafficAll.TAP_CODE = tTAP.TAP_CODE) ON tCallEventDetail.CED_CODE = "
MyQuery = MyQuery + " qUnionTrafficAll.CED_CODE) LEFT JOIN qTAP_DP_Status ON (qUnionTrafficAll.TAP_CODE = qTAP_DP_Status.TAP_CODE) AND (qUnionTrafficAll.YEAR_ = qTAP_DP_Status.YEAR_) "
MyQuery = MyQuery + "AND (qUnionTrafficAll.MTH_NUM = qTAP_DP_Status.MTH_NUM)) INNER JOIN tTraffic_EDS ON (tServiceFamily1.SF1_CODE = tTraffic_EDS.SF1_CODE) "
MyQuery = MyQuery + "AND (tCallEventDetail.CED_CODE = tTraffic_EDS.CED_CODE)) ON tPartner.PART_CODE = tTAP.PART_CODE "
MyQuery = MyQuery + "WHERE (((tPeriod.PERIOD) Between #" & stPeriodFrom & "# And #" & stPeriodTo & "#) AND ((tCountry.COUN_NAME)='" & stCountry & "'))"
Set MyDatabase = DBEngine.OpenDatabase("\\palladium_zdm\data\NetStorage\Int_roam\Polishchuk\Roaming Partners Traffic Database\Roaming Statistic Database.mdb")
Set MyRecordset = MyDatabase.OpenRecordset(MyQuery)
Application.SheetsInNewWorkbook = 1
Set wrbReport = Workbooks.Add
With wrbReport
Set shtData = .Sheets(1)
shtData.Name = "Data"
ThisWorkbook.Sheets("Model").Copy before:=shtData
Set shtReport = .Sheets("Model")
shtReport.Name = "Report"
End With
With shtData
.Select
.UsedRange.ClearContents
.Range("A2").CopyFromRecordset MyRecordset ' ОШИБКА ВОЗНИКАЕТ В ЭТОМ МЕСТЕ
For i = 1 To MyRecordset.Fields.Count
.Cells(1, i).Value = MyRecordset.Fields(i - 1).Name
Next i
End With
With wrbReport
If stSaveAs <> "<no path specified>" Then
.SaveAs stSaveAs
If bOpenReport = False Then
.Close
End If
End If
End With
MsgBox "Your Query has been Run"
End Sub |