Executando o SQL Stored Procedure por meio do Excel (VBA) com vários parâmetros

0

Obrigado pela sua ajuda, @FreeMan.

No entanto, ainda estou perdido com isso.

Deixe-me começar do zero.

Esta é a minha consulta em resumo (espero que esteja claro)

SELECT DISTINCT Q1,Q2,Q3

from(SELECT A,B,C) Q1

full outer join

(SELECT A,B,C

from tblA as a

join tblB as b

on a.aID = b.bID

join tblC as c

on b.bID = c.cID

where (a,b, cdate <= ?

group by c) Q2

ON Q1.A = Q2.B

WHERE Convert(DATETIME, Q1.[B], 103) <= ?

order by Q1.[A]

When I try to refresh my table, I get the following error message

"[Microsoft][ODBC SQL Server Driver]Invalid Parameter number" and then

"[Microsoft][ODBC SQL Server Driver]Invalid Descriptor Index"

Eu preciso de um método que me permita executar essa consulta usando os parâmetros em uma célula especificada, por exemplo, a célula C3.

Espero que isso torne as coisas um pouco mais claras. Eu não estou familiarizado com o VBA, então todos os comandos acima são confusos para mim.

Pergunta original

* [Eu sou um novato quando se trata de VBA e estou lutando para fazer com que minha consulta seja executada com mais de um parâmetro. Eu estou usando essa macro como, mas quando eu executo isso me diz que o segundo parâmetro não foi fornecido.

Sub RefreshQuery()

With ActiveWorkbook.Connections("MYSERVER").OLEDBConnection
    .CommandText = "EXECUTE dbo.Tng_Market_Feed '" & Range("B2").Value & "'"
End With
ActiveWorkbook.Connections("MYSERVER").Refresh

End Sub

Minhas perguntas são: - 1. Como faço para definir as variáveis para formatos de data? Preciso de um relatório para me mostrar todas as transações < = uma determinada data (parâmetro variável) 2. A localização da variável na planilha, célula b2, permanece a mesma para os dois parâmetros. Por exemplo, eu preciso de uma lista de todas as transações < = 31/12/2014 e um valor / soma de provisão para devedores duvidosos na mesma data 31/12/2014.] *

    
por Kiki 28.05.2015 / 18:01

1 resposta

0

Veja um exemplo rápido de criação e configuração de parâmetros no seu código:

Sub CreateParam()

     Dim oQuery As QueryTable
     Dim oParam As Parameter

     Set oQuery = Sheet3.QueryTables(1)

     oQuery.CommandText = Replace(oQuery.CommandText, "='Berlin'", "=?")

     Set oParam = oQuery.Parameters.Add("CityParam")

     oParam.SetParam xlRange, Sheet3.Range("J1")
     oParam.RefreshOnChange = True

     oQuery.Refresh

End Sub

código rapidamente copiado de dicks-clicks.com

Basicamente, você precisará executar a linha .Parameter.Add() para cada parâmetro em seu procedimento armazenado, e você estará pronto para ir. Note que você não precisa escrever um Sub() inteiro para fazer isso, basta incluir a linha Set oParam = oQuery.Parameters.Add() em seu código existente.

Você pode querer ir às opções um pouco, porque você pode especificar o tipo de dados que estão sendo enviados, e também pode configurar um parâmetro OUT , bem como aceitar dados de volta da consulta.

    
por 28.05.2015 / 18:22