Pregunta

Ya puedo usar Excel (2007) para importar datos de SQL Server 2005. Agrego una conexión de datos e ingreso una consulta SQL personalizada que recupera los datos deseados. Genial.

Pero lo que me gustaría agregar es la capacidad de parametrizar esa consulta en función de un valor encontrado en una celda conocida en la hoja de cálculo.

Mi consulta pasaría de

SELECT * FROM dbo.MyDataTable WHERE Col1 = 'apples'

a algo como

SELECT * FROM dbo.MyDataTable WHERE Col1 = 'Cell("B2")'

¿Es esto posible? Si es así, ¿cómo?

¿Fue útil?

Solución

Si estás utilizando MS Query para obtener los datos en Excel, esta página muestra cómo utilizar un valor de una celda en la hoja de cálculo como un parámetro en su consulta.

Otros consejos

Intente estructurar su código de la siguiente manera:

Dim strSQL as String
Dim strFruit As String

strFruit = CStr(ThisWorkbook.Sheets("Sheet1").Range("A1").FormulaR1C1)

strSQL = "SELECT * FROM dbo.MyDataTable WHERE Col1 = '" & strFruit & "'"

He encontrado útil cargar el parámetro en una variable primero, antes de fusionarlo con la consulta SQL.

Hace que su cadena SQL sea más legible y le permite verificar / limpiar el parámetro antes de usarlo.

No he estado usando Excel 2007, pero en versiones anteriores de Excel realmente odio la integración de SQL Query. En particular, me resultó difícil hacer exactamente lo que preguntas sin tener que recurrir a hackear un montón de código VBA. Investigué un poco y finalmente decidí usar el complemento de consulta de Excel de Rob Van Gelder en:

http://vangelder.orconhosting.net.nz/excel/queryeditor.html

La sección de 'parámetros' en su GUI le permite configurar un parámetro y hacer que la utilidad solicite al usuario el valor o extraiga el valor de una referencia de celda. Creo que lo último es exactamente lo que quieres hacer. También tiene la capacidad de actualizarse automáticamente cuando cambia el valor de una celda. Utilizo mucho la función de actualización automática al validar datos en mi base de datos.

He tenido un par de situaciones en las que mis consultas se corrompieron y ya no pude abrirlas ni ver el texto. Como resultado, recomiendo mantener una pestaña en la hoja de cálculo de Excel para sus consultas y copiar el texto de las consultas en las celdas de esa página especial. De esa manera, si la herramienta de consulta realiza sus consultas, no tendrá que reconstruirlas desde cero.

Una herramienta de terceros, aunque gratuita, puede que no sea lo que está buscando, pero funciona bien para mí. ¡Buena suerte!

Dim SQLString as String

SQLString = "SELECT * FROM dbo.MyDataTable WHERE Col1 = '" & Cells("B2") & "'"

Valdría la pena ver Ataques de inyección SQL para ver las desventajas de este enfoque, pero puede que no sea necesariamente una consideración para lo que necesita hacer

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top