Como faço para usar um parâmetro em uma solicitação de dados externos Excel?
-
03-07-2019 - |
Pergunta
Já pode usar o Excel (2007) para importar dados de SQL Server 2005. Eu adicionar uma conexão de dados e eu inserir uma consulta SQL personalizada que recupera os meus dados desejados. Arrefecer.
Mas o que eu gostaria de acrescentar é a possibilidade de parametrizar a consulta com base em um valor encontrado em uma célula conhecida na planilha.
Meu consulta iria de
SELECT * FROM dbo.MyDataTable WHERE Col1 = 'apples'
para algo como
SELECT * FROM dbo.MyDataTable WHERE Col1 = 'Cell("B2")'
Isso é possível? Se sim, como?
Solução
Se você é usando MS Query para obter os dados para o Excel, mostra esta página como usar um valor de uma célula na planilha como um parâmetro em sua consulta.
Outras dicas
Tente a sua estruturação seu código da seguinte forma:
Dim strSQL as String
Dim strFruit As String
strFruit = CStr(ThisWorkbook.Sheets("Sheet1").Range("A1").FormulaR1C1)
strSQL = "SELECT * FROM dbo.MyDataTable WHERE Col1 = '" & strFruit & "'"
Eu encontrei-o útil para carregar o parâmetro em uma variável em primeiro lugar, antes de fundir-lo na consulta SQL.
Não faz o seu seqüência SQL mais legível e permite verificar / limpar o parâmetro antes de usá-lo.
Eu não foram usando o Excel 2007, mas em versões anteriores do Excel Eu realmente odeio a integração SQL Query. Em particular, eu achei difícil de fazer exatamente o que você perguntar sobre sem recorrer à pirataria juntos um monte de código VBA. Eu fiz alguma pesquisa e, finalmente, decidiu usar add consulta Excel de Rob Van Gelder em:
http://vangelder.orconhosting.net.nz/excel/queryeditor.html
A seção 'parâmetros' na sua GUI permite que você configure um parâmetro e tem o utilitário quer solicitar ao usuário o valor ou puxar o valor de uma referência de célula. Eu acredito que o último é exatamente o que você quer fazer. Ele também tem a capacidade de auto-refresh quando um valor de célula muda. I utilizar a função de atualização automática muito quando validar dados no meu DB.
Eu tive um par de situações em que as minhas dúvidas se tornou corrupto e eu já não podia abri-los ou ver o texto. Como resultado, eu recomendo manter uma aba na planilha excel para suas consultas e copiar o texto das consultas em células nessa página especial. Dessa forma, se a ferramenta de consulta come suas dúvidas você não terá que reconstruí-los a partir do zero.
A ferramenta de terceiros, embora livre, pode não ser o que você está procurando, mas funciona bem para mim. Boa sorte!
Dim SQLString as String
SQLString = "SELECT * FROM dbo.MyDataTable WHERE Col1 = '" & Cells("B2") & "'"
Seria pena olhar ataques SQL Injection para ver as desvantagens dessa abordagem, mas pode não ser necessariamente uma consideração para o que você precisa fazer