Я получаю ежемесячные платежи клиентов из QuickBooks в лист Excel за последний месяц, используя драйвер QODBC.Работает нормально, пока я не добавлю еще одно поле из записи клиента.Он завершается с ошибкой времени выполнения '5': недопустимый вызов процедуры или аргумент.
Оператор SELECT с именем поля Customer.FullName, являющимся одним из полей, работает нормально.Если я заменю Customer.FullName на поле Customer.IsActive, оно также будет работать нормально.Но, если я добавлю поле «Customer.FullName, Customer.IsActive», выполнение инструкции SELECT приведет к ошибке.Я исследовал проблему, но не могу найти причину, почему или как ее решить.
Этот код завершается ошибкой:
With ActiveSheet.ListObjects.Add(SourceType:=0, Source:=Array(Array( _
"ODBC;DSN=QuickBooks Data QRemote;SERVER=QODBC;OptimizerDBFolder=%UserProfile%\QODBC Driver for QuickBooks\Optimizer;OptimizerAllowDirtyReads" _
), Array("=N;SyncFromOtherTables=N;ForceSDKVersion=<default SDK>")), _
Destination:=Range("$A$1")).QueryTable
' .CommandText = CmdString
' .CommandText = Array(SelClause, FromClause, WhereClause)
.CommandText = Array( _
"SELECT Charge.CustomerRefListID, Customer.FullName, Customer.IsActive, Charge.TxnDate, Item.FullName, Charge.Rate, Charge.""Desc""" & Chr(13) & "" & Chr(10) & _
"FROM Charge Charge, Customer Customer, Item Item" & Chr(13) & "" & Chr(10) & _
"WHERE Charge.CustomerRefListID = Customer.ListID AND Charge.ItemRefListID = Item.ListID AND " _
, "((Charge.TxnDate=" & formateddate & ") AND (Item.SalesOrPurchaseAccountRefFullName='Weekly Services'))")
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.PreserveColumnInfo = True
.ListObject.DisplayName = "Table_Query_Charges_from_QuickBooks_Data"
.Refresh BackgroundQuery:=False
End With
Этот оператор SELECT в приведенном ниже коде работает нормально.
.CommandText = Array( _
"SELECT Charge.CustomerRefListID, Customer.FullName, Charge.TxnDate, Item.FullName, Charge.Rate, Charge.""Desc""" & Chr(13) & "" & Chr(10) & _
"FROM Charge Charge, Customer Customer, Item Item" & Chr(13) & "" & Chr(10) & _
"WHERE Charge.CustomerRefListID = Customer.ListID AND Charge.ItemRefListID = Item.ListID AND " _
, "((Charge.TxnDate=" & formateddate & ") AND (Item.SalesOrPurchaseAccountRefFullName='Weekly Services'))")
Это также работает.
.CommandText = Array( _
"SELECT Charge.CustomerRefListID, Customer.IsActive, Charge.TxnDate, Item.FullName, Charge.Rate, Charge.""Desc""" & Chr(13) & "" & Chr(10) & _
"FROM Charge Charge, Customer Customer, Item Item" & Chr(13) & "" & Chr(10) & _
"WHERE Charge.CustomerRefListID = Customer.ListID AND Charge.ItemRefListID = Item.ListID AND " _
, "((Charge.TxnDate=" & formateddate & ") AND (Item.SalesOrPurchaseAccountRefFullName='Weekly Services'))")
Оба поля, Customer.FullName и Customer.IsActive, являются допустимыми, и оператор SELECT работает нормально.с одним из них.Как я могу заставить его работать с обоими полями в инструкции SELECT?