Collegare excel tramite vba con sql

di il
33 risposte

33 Risposte - Pagina 2

  • Re: Collegare excel tramite vba con sql

    Mi spiego bene. 

    In azienda abbiamo un gestionale che lavora su sql.  per vari motivi non possiamo fare nessuna modifica al programma. Allora abbiamo creato un file excel che invia gli sms. 

    Però volevo fare un tasto per recuperare i dati che sono presenti nella tabella sql, creare il codice perche non tutti si intendono di excel e potrebbero fare disastro tipo delete ecc ) e caricarli sul file excel. Successivamente dopo aver inviato i messaggi, a tutte le persone interessate deve andare a segnare una spunta vero nella tabella di sql. 

  • Re: Collegare excel tramite vba con sql

    Al di là delle motivazioni che in questo contesto non servono (se lo devi fare, lo farai a prescindere), potresti precisare alcune cose ?  grazie ;-)

    31/07/2023 - danilo123 ha scritto:


    recuperare i dati che sono presenti nella tabella sql e caricarli sul file excel

    Successivamente dopo aver inviato i messaggi, a tutte le persone interessate
    deve andare a segnare una spunta vero nella tabella di sql. 

    - Reperire da una tabella SqlServer dei records da importare su foglio Excel

    - Aggiornare la Tabella SqlServer per i soli records che verranno contrassegnati con True


    Azioni :

    - con un Pulsante avviare l'import dei dati da Tabella del database al Foglio Excel

    - spuntare a True una casella per tutti o alcuni records importati sul foglio excel

    - con un Pulsante aggiornare la Tabella SqlServer per i soli  records contrassegnati a True


    E' una cosa di questo tipo ?

  • Re: Collegare excel tramite vba con sql

    Si, giustissimo.. volendo possiamo anche evitare di spuntare in quanto tutti quelli saranno da inviare pertanto da segnalare vero su sql.

  • Re: Collegare excel tramite vba con sql

    Va beh, cambia la situazione ogni momento.

    Comunque, hai aperto la connessione con la Open, ora devi eseguire la SELECT come hai fatto in

    SQL = "select  top (100)" & ID & ", " & matricola & ", " & utenza & ", " & indirizzo & " from tab_reader where nomefile like '%%'"
    Set rs = con.Execute SQL

    ovviamente cambiando la SELECT opportunamente in modo che con quei criteri (che non conosco perché non conosco le tue tabelle/campi né necessità)  puoi selezionare tutti i record che vuoi. In seguito agirai leggendo rs (il recordset) ottenuto.

  • Re: Collegare excel tramite vba con sql

    Va beh, cambia la situazione ogni momento.

    Comunque, hai aperto la connessione con la Open, ora devi eseguire la SELECT come hai fatto in

    SQL = "select  top (100)" & ID & ", " & matricola & ", " & utenza & ", " & indirizzo & " from tab_reader where nomefile like '%%'"
    Set rs = con.Execute SQL

    ovviamente cambiando la SELECT opportunamente in modo che con quei criteri (che non conosco perché non conosco le tue tabelle/campi né necessità)  puoi selezionare tutti i record che vuoi. In seguito agirai leggendo rs (il recordset) ottenuto.

  • Re: Collegare excel tramite vba con sql

    Se non è necessaria tale azione, si semplifica e si accorcia in da farsi ;-)

    Ok, quindi cosa ti manca ?

    • la connessione al database ce l'hai
    • la tabella la puoi importare come meglio credi 
      • puoi importare i records con i filtri che desideri sul foglio excel
    • ti manca di eseguire il Update della tabella. Per cui devi assicurarti di avere:
      • l'Id Primary Key dei records importati nel foglio excel
      • eseguire stringa sql UPDATE per i records importati 
        • impostare = True il booleano sui records 
        • con la where condition selezionare solo gli Id che sono stati importati nel foglio excel. Oppure, meglio ancora, selezionare i records con le stesse clausole impostate per l'import

    In definitiva il lavoretto è molto semplice. Tieni presente di blindare le righe nel foglio excel per evitare che l'utente possa manomettere le informazioni… nel senso che devi essere sicuro che tutte le righe (tutti i records) sia processati prima di eseguire l'UPDATE della tabella. (ma questo ho visto che ci hai già pensato di doverlo fare)

    Come ti indicava Oregon adesso hai solo da eseguire in modo corretto le due stringhe Sql, una per l'import e l'altra per l'Update.

    Segui i consigli di Oregon e fai sapere a che punto sei arrivato…

  • Re: Collegare excel tramite vba con sql

    31/07/2023 - oregon ha scritto:


    Va beh, cambia la situazione ogni momento.

    Ciao oregon, avevo pure io qualche perplessità… 
    poi spesso capita che i più si perdono nel giustificare e/o motivare perchè devono fare una certa cosa e a quel punto a me rimane molto difficile sintetizzare la richiesta e capire effettivamente il contenuto della stessa o del problema. ;-)) 

  • Re: Collegare excel tramite vba con sql

    31/07/2023 - By65Franco ha scritto:


    Se non è necessaria tale azione, si semplifica e si accorcia in da farsi ;-)

    Ok, quindi cosa ti manca ?

    • la connessione al database ce l'hai
    • la tabella la puoi importare come meglio credi 
      • puoi importare i records con i filtri che desideri sul foglio excel
    • ti manca di eseguire il Update della tabella. Per cui devi assicurarti di avere:
      • l'Id Primary Key dei records importati nel foglio excel
      • eseguire stringa sql UPDATE per i records importati 
        • impostare = True il booleano sui records 
        • con la where condition selezionare solo gli Id che sono stati importati nel foglio excel. Oppure, meglio ancora, selezionare i records con le stesse clausole impostate per l'import

    In definitiva il lavoretto è molto semplice. Tieni presente di blindare le righe nel foglio excel per evitare che l'utente possa manomettere le informazioni… nel senso che devi essere sicuro che tutte le righe (tutti i records) sia processati prima di eseguire l'UPDATE della tabella. (ma questo ho visto che ci hai già pensato di doverlo fare)

    Come ti indicava Oregon adesso hai solo da eseguire in modo corretto le due stringhe Sql, una per l'import e l'altra per l'Update.

    Segui i consigli di Oregon e fai sapere a che punto sei arrivato…

    Per la connessione, non posso utilizzare la prima funzione che avevo scritto in quanto mi continuia  a dare il problema, pertanto l'ho dovuta ricavare tramite un registratore di macro ( anche se onestamente non mi soddisfa abbastanza ) 

    La mia problematica principale è che quando eseguo il codice mi dice ogni volta che la query1 già esiste e quindi mi riporta l'errore.

  • Re: Collegare excel tramite vba con sql

    Ricava la stringa di connessione dalla query che ha creato e usi quella… poi butta via la query e ripulisci tutto e vai in Vba a scrivere il tuo codice

  • Re: Collegare excel tramite vba con sql

    Attenzione … la stringa di connessione deve puntare al tuo SQL Server non ai dati in Excel !

    La stringa di connessione te l'ho mostrata prima, premesso che tu abbia un oggetto connection

    Dim con As  ADODB.Connection
    Set con = New ADODB.Connection
    
    con.Open "Provider=SQLOLEDB;Data Source=192.xxx.xxx.xxx;Initial Catalog=TuoDb;User Id=myUsername;Password=myPassword"

    Perché non hai detto che avevi ancora problemi con la connessione? Che c'entra quel codice ottenuto col registratore?

    Tu devi collegarti al SQL Server e pima di tutto deve funzionare la connessione come ti ho mostrato (ovviamente con i tuoi dati).

    Se hai problemi ancora, mostra il codice che esegui, mostra delle schermate, fai dei test di connessione, non andare a caso.

  • Re: Collegare excel tramite vba con sql

    Oppure parti da un esempio qualsiasi per effettuare la connessione :

    Esempio:

    Dim conn As Object
    Set conn = CreateObject("ADODB.Connection")
    
    Dim strConn As String
    strConn = "Provider=SQLOLEDB;Data Source=TuoNomeServer;Initial Catalog=TuoNomeDatabase;User ID=Utente;Password=Password;"
    
    conn.Open strConn
    ...
    .....
    ...
    conn.Close

    Devi solo verificare il provider SQLOLEDB che hai installato nella tua versione.

  • Re: Collegare excel tramite vba con sql

    31/07/2023 - oregon ha scritto:


    Attenzione … la stringa di connessione deve puntare al tuo SQL Server non ai dati in Excel !

    Scusa Oregon non avevo visto la tua ultima risposta  ;-)

  • Re: Collegare excel tramite vba con sql

    Ok Franco … di nulla

    Ovviamente dicci se hai aggiunto il riferimento alla libreria ADODB e se è a posto

    Aggiungo che va fatta una prova di connessione al server per capire se il nome, utente e password sono corretti.

    Per questo puoi usare il client di Microsoft SSMS

    Se non fai le cose per bene e che abbiano un senso, non risolvi e non ne esci

  • Re: Collegare excel tramite vba con sql

    Allora ricapitolando…

    questo è il codice che sto utilizzando:

    Sub test()
    Set conn = CreateObject("ADODB.Connection")
    Dim matricola As Variant
    matricola = "0"
    Dim strConn As String
    strConn = "Provider=SQLOLEDB;Data Source=xx;Initial Catalog=xx;User ID=xx;Password=xx;"
    conn.Open strConn
    Dim rng As Range: Set rng = Sheets("foglio1").Range("a1:a150")
    For Each Row In rng.Rows
    campo1= Row.Cells(1).Value
    MsgBox (campo1)
    Sql = "select  top (150) campo1 from xx where nomefile like '%%'"
    conn.Execute Sql
    
    Next Row
    conn.Close
    MsgBox ("concluso")
    End Sub

    La connessione al db è raggiunta perchè con SSMQ riesco a collegarmi utilizzando le stesse credenziali. Il msgbox(campo1) mi ritorna vuoto.

  • Re: Collegare excel tramite vba con sql

    Avete ragione, facciamo un passo alla volta altrimenti ci incasiniamo soltanto.. Giusto che vi inoltro anche qualche esempio altrimenti usciamo pazzi 

Devi accedere o registrarti per scrivere nel forum
33 risposte