Domanda

Posso già utilizzare Excel (2007) per importare dati da SQL Server 2005. Aggiungo una connessione dati e inserisco una query SQL personalizzata che recupera i dati desiderati. Cool.

Ma ciò che vorrei aggiungere è la possibilità di parametrizzare quella query in base a un valore trovato in una cella nota sul foglio di calcolo.

La mia query andrebbe da

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

a qualcosa di simile

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

È possibile? In tal caso, come?

È stato utile?

Soluzione

Se stai utilizzando MS Query per ottenere i dati in Excel, questa pagina mostra come utilizzare un valore da una cella del foglio di lavoro come parametro nella query.

Altri suggerimenti

Prova a strutturare il tuo codice come segue:

Dim strSQL as String
Dim strFruit As String

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

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

Ho trovato utile caricare prima il parametro in una variabile, prima di fonderlo nella query SQL.

Rende più leggibile la stringa SQL e consente di controllare / pulire il parametro prima di utilizzarlo.

Non ho usato Excel 2007, ma nelle versioni precedenti di Excel odio davvero l'integrazione di SQL Query. In particolare, ho trovato difficile fare esattamente ciò che chiedi senza ricorrere a un hacker di un sacco di codice VBA. Ho fatto qualche ricerca e alla fine ho deciso di utilizzare la query Excel di Rob Van Gelder in:

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

La sezione 'parametri' nella sua GUI consente di impostare un parametro e fare in modo che l'utilità richieda all'utente il valore o estragga il valore da un riferimento di cella. Credo che quest'ultimo sia esattamente quello che vuoi fare. Ha anche la possibilità di aggiornarsi automaticamente quando cambia il valore di una cella. Uso molto la funzione di aggiornamento automatico durante la convalida dei dati nel mio DB.

Ho avuto un paio di situazioni in cui le mie domande sono diventate corrotte e non potevo più aprirle o vedere il testo. Di conseguenza, ti consiglio di tenere una scheda nel foglio di calcolo Excel per le tue query e di copiare il testo delle query nelle celle in quella pagina speciale. In questo modo se lo strumento di query mangia le tue query non dovrai ricostruirle da zero.

Uno strumento di terze parti, sebbene gratuito, potrebbe non essere quello che stai cercando, ma funziona bene per me. In bocca al lupo!

Dim SQLString as String

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

Vale la pena guardare attacchi SQL Injection per vedere i lati negativi di questo approccio, ma potrebbe non essere necessariamente una considerazione per ciò che devi fare

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top