2015-08-27 2 views
0

Как добавить параметр внутри запроса Excel? Эта ситуация не так проста, как поставить ? на месте. Запрос:Запрос задает параметр в подзапросе

SELECT * FROM crm.dbo.Meetings mt 
left outer join crm.dbo.Cases cs on mt.meet_CaseId = cs.Case_CaseId 
left outer join CRM.dbo.Customer cust on mt.meet_companyid =cust.cust_CustomerID 
left outer join crm.dbo.users on mt.meet_launcher = user_userid 
WHERE mt.meet_companyid in (select * from crm.dbo.customer_tree(7587,0)) 

В последней статье, работа в основном установлено, что четыре числа цифр в качестве параметра, который считывает содержимое ячейки из другого листа в текущей книге.

in (select * from crm.dbo.customer_tree(? ,0)) 

(FYI, то customer_tree это не просто имя таблицы/представления в базе данных, в то время как клиент имя таблицы.)

Однако Excel 2007 не нравится этот формат, с сообщениями об ошибках с указанием как:

[Microsoft] [ODBC SQL Server Driver] Синтаксическая ошибка или нарушение прав доступа
[Microsoft] [Драйвер ODBC SQL Server] Индекс Недопустимый дескриптор

Кто-нибудь знает, как это понять?

+0

Как вы создаете эту строку соединения? – Liss

+0

Соединение работает, если я использую номер внутри «?». Это то, что вы хотите спросить? –

+0

Используете ли вы мастер подключения или что-то в этом роде для запроса? Нет VBA или даже PowerQuery? – Liss

ответ

0

Есть подсказка, чтобы решить этот вопрос, назначив содержимое ячейки в переменную, а затем сбросьте все поле запроса запроса.

ШАГ 1

Создать ActiveX Controls Command Button разработчика -> Вставка -> ActiveX Command Button (первый)

Нарисуйте кнопку на листе и настройка свойств Имя, подпись и другие (необязательно).

ШАГ 2

Двойной щелчок по кнопке, или щелкните правой кнопкой мыши выбрать режим просмотра кода или нажмите кнопку Visual Basic на панели разработчика, чтобы открыть редактор VBA.

Изменить код листа, как показано ниже (моя кнопка называется Refresh):

Private Sub Refresh_Click() 

    'Declare a variable to content the cell, here is a number in my case 
    Dim CustomerId As Integer 

    'Declare variables for my ODBC connection, "sql01" is the table name 
    Dim awc As WorkbookConnection 
    Set awc = ActiveWorkbook.Connections("sql01") 

    'Get the cell content which has the target number 
    CustomerId = Sheets("Sheet1").Range("B2").Value 


    'Pass the Parameters values 
    With awc.ODBCConnection 

     .CommandText = "mt.meet_companyid IN " & _ 
       "(select * from crm.dbo.customer_tree('" & **CustomerId** & "', 0)) " 

     'Refresh the sheet 
     awc.Refresh 

    End With 
End Sub 

После пользователь нажимает на кнопку, команда запроса будет изменен с текущим номером содержимого ячейки.