Доступ к VBA для импорта таблицы Oracle: ODBC- сбой вызова

Я написал код VBA в Access 2007 для запуска SQL-запроса в Oracle и вставки результатов в таблицу Access с использованием сквозного запроса. Я получаю следующую ошибку: "ODBC - Call Failed". Ниже приведен код:

If TableExists("" & TblName) = True Then DoCmd.DeleteObject acTable, TblName

CurrentDb.Execute "CREATE TABLE " & TblName & "(Merch_Nbr Text, Month_End_Date Text, Passer Text, PasserMonth Text, Volume Long, DiscountRevenue Long)"

'Create a Pass through query to extract MID List from Oracle table
Dim PassThruQuery As QueryDef
If QueryExists("Query_oracle") = True Then DoCmd.DeleteObject acQuery, "Query_oracle"
Set PassThruQuery = CurrentDb.CreateQueryDef("Query_oracle")

'SQL query to be executed on Oracle database
sql_stmt = "SELECT M.MERCH_NBR as Merch_Nbr,CM.MONTH_END_DATE as Month_End_Date,PSR.PASSER as Passer,PSR.MONTH as PasserMonth,sum(F.MERCH_BILLED_ASSESSMENTS) as Assessments,"
sql_stmt = sql_stmt & "sum(F.SALES_VOLUME-F.RETURNS_VOLUME) as Volume,sum(F.DISCOUNT_REVENUE) as DiscountRevenue "
sql_stmt = sql_stmt & "FROM WH_TARGET.RPSI_MONETARY_FACT F,WH_TARGET.RPSI_MERCHANT_DIM M,WH_TARGET.RPSI_CARD_TYPE_CHARGE_TYPE_DIM CT"
sql_stmt = sql_stmt & ",WH_TARGET.RPSI_PRICING_CATEGORY_DIM PC,WH_TARGET.RPSI_CALENDAR_MONTH_DIM CM,WH_TARGET.RPSI_BACK_END_VENDOR_DIM BEV"
sql_stmt = sql_stmt & ",WH_TARGET.RPSI_SALES_GROUP_DIM SG_H,WH_TARGET.RPSI_SALES_REP_DIM SR_H,WH_TARGET.RPSI_AGENT_BANK_DIM AB_H"
sql_stmt = sql_stmt & ",WH_TARGET.RPSI_ASSOCIATION_DIM ASSC_H,WH_TARGET.RPSI_SALES_GROUP_DIM SG_C,WH_TARGET.RPSI_SALES_REP_DIM SR_C"
sql_stmt = sql_stmt & ",WH_TARGET.RPSI_AGENT_BANK_DIM AB_C,WH_TARGET.RPSI_ASSOCIATION_DIM ASSC_C,dw_biz.portfolio_mgmt PSR "
sql_stmt = sql_stmt & "WHERE Month_End_Date >= '01-OCT-2014' AND PSR.MONTH = '01-JAN-2015' "
sql_stmt = sql_stmt & "AND psr.TYPE = 'MON' AND CT.CARD_TYPE in ('1','2','5') AND PSR.MID = M.MERCH_NBR "
sql_stmt = sql_stmt & "AND F.MERCHANT_SID_FK = M.MERCHANT_SID_PK AND F.CARD_TYPE_CHARGE_TYPE_SID_FK = CT.CARD_TYPE_CHARGE_TYPE_SID_PK "
sql_stmt = sql_stmt & "AND F.PRICING_CATEGORY_SID_FK = PC.PRICING_CATEGORY_SID_PK AND F.CALENDAR_MONTH_SID_FK = CM.CALENDAR_MONTH_SID_PK "
sql_stmt = sql_stmt & "AND F.BACK_END_VENDOR_SID_FK = BEV.BACK_END_VENDOR_SID_PK AND F.SALES_GROUP_SID_FK = SG_H.SALES_GROUP_SID_PK "
sql_stmt = sql_stmt & "AND F.SALES_REP_SID_FK = SR_H.SALES_REP_SID_PK AND F.AGENT_BANK_SID_FK = AB_H.AGENT_BANK_SID_PK "
sql_stmt = sql_stmt & "AND F.ASSOCIATION_SID_FK = ASSC_H.ASSOCIATION_SID_PK AND M.SALES_GROUP_SID_FK = SG_C.SALES_GROUP_SID_PK "
sql_stmt = sql_stmt & "AND M.SALES_REP_SID_FK = SR_C.SALES_REP_SID_PK AND M.AGENT_BANK_SID_FK = AB_C.AGENT_BANK_SID_PK "
sql_stmt = sql_stmt & "AND M.ASSOCIATION_SID_FK = ASSC_C.ASSOCIATION_SID_PK "
sql_stmt = sql_stmt & "GROUP BY M.MERCH_NBR,CM.MONTH_END_DATE,PSR.PASSER,PSR.MONTH"


PassThruQuery.SQL = sql_stmt

PassThruQuery.Connect = "ODBC;DSN=RDW1;UID=dw_biz;PWD=dw_biz"
PassThruQuery.ReturnsRecords = True

'Insert the Query results into Access Table
CurrentDb.Execute "INSERT INTO " & TblName & "(Merch_Nbr, Month_End_Date, Passer, PasserMonth, Volume, DiscountRevenue) " & _
"SELECT Query_oracle.Merch_Nbr, Query_oracle.Month_End_Date, Query_oracle.Passer, Query_oracle.PasserMonth, Query_oracle.Volume, Query_oracle.DiscountRevenue  From Query_oracle;"


Exit Sub

Я экспортировал этот запрос в текстовый файл и запустил его на Oracle, он работает нормально! Кроме того, я создал временную таблицу в Oracle с помощью вышеуказанного SQL-запроса и заменил sql_stmt в VBA на "select * from new_oracle_table". Как ни странно, это, кажется, работает хорошо. Как вы думаете, это как-то связано с длиной SQL-запроса в самой sql_stmt? Любые идеи о том, как это исправить, будут с благодарностью.

-SS

1 ответ

Решение

Я смог решить эту ошибку. Просто скопируйте приведенный ниже код в ваш обработчик ошибок, и он даст вам более подробное описание ошибки ODBC- Call Failed

'DAO Error Handler
Dim MyError As Error
Debug.print Errors.Count
For Each MyError In DBEngine.Errors
With MyError
MsgBox .Number & " " & .Description
End With
Next MyError

Это сказало мне, что мое ODBC-соединение истекло из-за большого размера SQL-запроса. Просто следуйте инструкциям по ссылке ниже, чтобы устранить ошибку.

http://its.uiowa.edu/support/article/101855

Другие вопросы по тегам