Scambio dati ADO con SQLServer in Macro VBA di Excel

Dopo tanto tempo torno a scrivere un articolo tecnico. Si tratta di una cosa piuttosto semplice ma che questa settimana ha impegnato diversi momenti di pausa per ricercare una soluzione funzionante.

In sostanza dovevo semplicemente fare in modo che delle macro di Excel riuscissero mediante ADO a leggere e/o scrivere dati in tabelle di SQL Server.. Sembra una cosa relativamente facile, da liquidare con breve ricerca su google, invece non è così. Ho dovuto provare vari esempi prima di trovarne uno funzionante, e per questo appunto rapidamente sul blog la soluzione che ho trovato perché potrebbe essere utile ad altri.

Prima operazione dopo essere entrati nella parte di sviluppo di Excel è procedere ad abilitare la dll di gestione mediante il menu strumenti/riferimenti si spunta la voce Microsoft Activex Dataobject Library  nella versione più recente disponibile.

 

 

Dopo vari tentativi questo è il codice di prova che è risultato funzionante:

Sub Macro_DB()

‘ Aggiorna DB

‘ Scelta rapida da tastiera: CTRL+MAIUSC+A

Dim con As ADODB.Connection
Dim rs As ADODB.Recordset

Dim ConString As String
ConString = “Provider=SQLOLEDB.1;User ID=sa; Password=miapsw; Initial Catalog=myDB; Data Source=myServer; Language=Italian”

‘ Open DB
Set con = New ADODB.Connection
con.Open ConString

‘ Esempio per select , copia la tabella config sul foglio excel

Set rs = New ADODB.Recordset

rs.Open “select * from TMP_Test_table”, con
Foglio4.Range(“A1”).CopyFromRecordset rs

rs.Close

‘ESEMPIO PER INSERT
con.Execute “INSERT INTO [dbo].[TMP_Test_table] ([id_lettura]) VALUES ( 1 ) “

con.Close
Set rs = Nothing
Set con = Nothing

End Sub