Collegare excel tramite vba con sql

di il
33 risposte

33 Risposte - Pagina 3

  • Re: Collegare excel tramite vba con sql

    Ho modificato nuovamente il mio codice… per adesso sono riuscito a farlo funzionare.

    Set conn = CreateObject("ADODB.Connection")
        Set rs = CreateObject("ADODB.Recordset")
        Dim strSQL As String
        Dim strConnString As String
        Dim i As Integer, j As Integer
           
        strConnString = "Provider=SQLOLEDB;Data Source=xx ;Initial Catalog=xx;User ID=sx;Password=xx;"    
       
        strSQL = "SELECT top (100) xxFROM xxwhere xlike '%%';"   
        
        conn.Open strConnString
           
        rs.Open strSQL, conn    
        
        Dim startCell As Range
        Set startCell = ThisWorkbook.Worksheets("Foglio1").Range("A1") ' Cambia "NomeFoglio" con il nome del foglio di Excel
            
        For i = 0 To rs.Fields.Count - 1
            startCell.Offset(0, i).Value = rs.Fields(i).Name
        Next i    
        startCell.Offset(1, 0).CopyFromRecordset rs 
        
        rs.Close
        conn.Close
        
        
        Set rs = Nothing
        Set conn = Nothing
    End Sub
  • Re: Collegare excel tramite vba con sql

    Ok quindi NON hai errore nella connessione come dicevi prima. E non avevi il riferimento ad adodb aggiunto dato che usi la createobject

    Adesso cosa succede? Cosa devi fare? 

  • Re: Collegare excel tramite vba con sql

    Semplifica , evita di dichiarare variabili di cui puoi fare a meno in certe circostanze e inserisci un minimo di controlli.

    • Abituati a commentare il codice in modo da facilitare una successiva rilettura/aggiornamento/implementazione.
    • Se hai bisogno solo di leggere la tabella è bene impostare readonly e garantisci di non interferire sui dati del database, non si sa mai ;-)
    • Non far eseguire parte del codice se non serve, ma solo se le condizioni sono soddisfatte.. tipo la definizione del range worksheets che eseguirai solo se hai dei records da importare nel foglio di lavoro. (vedere If Not rs.EOF Then)

    Esempio :

    Sub YourSub()
    On Error GoTo ErrorH
    ' open connection sqlserver database
    Dim conn As New ADODB.Connection
    conn.ConnectionString = "Provider=SQLOLEDB;Data Source=xx ;Initial Catalog=xx;User ID=sx;Password=xx;"
    conn.Open
    ' set recordset
    Dim rs As New ADODB.Recordset
    rs.Open "SELECT xx FROM xx WHERE x like '%%';", conn,adOpenForwardOnly, adLockReadOnly
    
    ' read records and populate excel worksheet
    If Not rs.EOF Then
    	' set sheet
    	Dim startCell As Range
    	Set startCell = ThisWorkbook.Worksheets("Foglio1").Range("A1")
    	' set header
        Dim i As Integer
        For i = 0 To rs.Fields.Count - 1
            startCell.Offset(0, i).Value = rs.Fields(i).Name
        Next i
        ' import rows
        startCell.Offset(1, 0).CopyFromRecordset rs
        ' completion message
        MsgBox "Import completed", vbInformation, "Info"
    Else
        MsgBox "No data to import has been found", vbInformation, "Info"
    End If
    
    ' close database
    rs.Close
    conn.Close
    Set rs = Nothing
    Set conn = Nothing
    Exit Sub
    
    ErrorH:
    MsgBox "Error. . . " & Err.Description, vbCritical, "Error"
    ' close dtabase on error
    If rs.State = adStateOpen Then
        rs.Close
        Set rs = Nothing
    End If
    If conn.State = adStateOpen Then
        conn.Close
        Set conn = Nothing
    End If
    End Sub

    Adesso che hai i dati nel foglio excel devi aggiornare la tabella del database impostando un booleano = True ?

  • Re: Collegare excel tramite vba con sql

    31/07/2023 - oregon ha scritto:


    Adesso cosa succede? Cosa devi fare? 

    Ciao Oregon…. un favore tu che sei più esperto, controlla se ho scritto qualche cavolata o omissione nel codice che gli ho corretto/suggerito ;-)

Devi accedere o registrarti per scrivere nel forum
33 risposte