Stringa di connessione per connettersi a access

di il
5 risposte

Stringa di connessione per connettersi a access

Grazie anticipato a quanti contribuiranno a risolvere il mio problema.
Ho la necessità di programmare con VBA un file excel per connetterlo s Access.

Devo creare una mini applicazione utilizzando le form di Ecxel VBA e Access per un'Associazione non profit di Rovigo.
Ho installato Microsoft Office LTSC Professional Plus 2021

La versione di excel e access è: Versione 2108(Build 14334.20296)

Per eseguire la connessione utilizzo:

Function GM_ConnMDB()

    Dim oConn As ADODB.Connection
    Dim rs As ADODB.Recordset
    Dim strSQL As String

    Dim i As Integer
    
     PathUser = "C:\CorsoExcel\EcogestMarco\Ecogest\Madella.accdb;"    
   
    strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & PathUser & "Persist Security Info=False;"
    
    MsgBox "Str di conn: " & strConn

    ' Specifica la query per recuperare i dati
    strSQL = "SELECT * FROM utenti;"

    ' Crea e apri la connessione
    Set oConn = New ADODB.Connection
    oConn.Open strConn

    ' Crea e apri il recordset
    Set rs = New ADODB.Recordset
    rs.Open strSQL, oConn

        ' Inserisci i dati nel foglio di lavoro
        ' Inizia dalla cella A1 del foglio attivo
        If rs.RecordCount > 0 Then
        MsgBox "trovato utenti: " & rs.RecordCount
            ' Copia le intestazioni delle colonne
            For i = 0 To rs.Fields.Count - 1
                Sheets(2).Cells(1, i + 1).Value = rs.Fields(i).Name
                MsgBox "Loop per editare gli utenti: -- i= " & i & " -- Valore da rs: " & rs.Fields(i).Name
            Next i
            ' Copia i dati
            Sheets(2).Cells(2, 1).CopyFromRecordset rs
        End If
    
        MsgBox "Dati importati con successo -- Connessione: " & strConn

End Function

la parte evidenziata in giallo non viene eseguita e quindi credo nnon sia stata eseguita correttamente la connessione.

i riferimenti sono evicenziati nello screnshot allegato


Potete aiutarmi ?

Grazie
Moreno

5 Risposte

  • Re: Stringa di connessione per connettersi a access

    Le stringhe le trovi su

    https://www.connectionstrings.com

    nella sezione Access

    Non usare Recordcount

  • Re: Stringa di connessione per connettersi a access

    Grazie  Oregon per la cortese risposta.

    Ho gia consultato il sito che mi hai indicato e ho creato il codice che ho postato seguendo le indicazioni.

    Il codice che ho messo è corretto secondo tè ?

    Dopo la creazione della connessione ho messo una lettura a una tabella per vedere, ma non vedo che legge.

    Hai qualche idea su come posso migliorare il codice e accertarmi che funzioni ?
    Grazie

    Moreno

  • Re: Stringa di connessione per connettersi a access

    Ti avevo appena suggerito di evitare il Recordcount e usare un ciclo per la lettura del recordset. Hai provato?

  • Re: Stringa di connessione per connettersi a access

    A cosa serve il RecordCount se tanto legge solamente la prima riga?

    Basterebbe      If not(rs.eof) then

  • Re: Stringa di connessione per connettersi a access

    Ho un problema di probabile caduta connessioneverso Access.
    Sto creando una piccola applicazione utilizzando excel e access.
    Nel Modulo Ho creato una sub in cui Effettuo la connessione.

    ' definizioni delle variabili utilizzabili in tutta l'applicazione
    Public oConn As ADODB.Connection
    Public rs1 As ADODB.Recordset
    Public strConn As String
    Public FieldKeyRic As Variant
    Public FieldoutRicerca As String
    Public Strsql_Ric As String
    Public NSel As Integer
    Public Ncampi As Integer
    Public SelezionatoCampodaElenco As Boolean
    Public NameClienteNew As String
    Public TipoSearch As String ' S=Selettiva G=Generica
    Public ArkSearch  As String  ' Archivio di ricerca  L=Località C=Clienti
    Public TipoArk  As String    ' D = Da Ritirare   R = Rilasciato
    Public DateKeyRic As Date
    Public txtChiamante As Integer  ' numero della txtbox chiamante per frmzoom
    Public UserLogged As Long    ' utente che si è loggato
    Public Commarea As String   ' salvo il txt chiamante tra frmritiro e frmCliente
    Public PathUser As String
    -------------------------------------------- metodo per la connessiione a access
    Public Function GM_ConnMDB()
    
        Dim oConn As ADODB.Connection
        Dim rs As ADODB.Recordset
        Dim strSQL As String
        Dim PathUser As String
    
       PathUser = ActiveWorkbook.Path & "\Covesap.accdb;"
          
        strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & PathUser & "Persist Security Info=False;"
        
        ' Crea e apri la connessione
        Set oConn = New ADODB.Connection
        oConn.Open strConn
    
    End Function
    

    la prima form che utilizzo è la frmLogin in cui immetto le credenziali d'accesso.  <--------------- funziona e riesco ad accedere al db controllando i dati d'accesso.

    effettuato il login apro la formGestione in cui devo inserire i dati specifici dell'applicazione.
    la logica applicativa prevede di effettuare una ricerca per vissualizzare un elenco con i record inseriti in tabella.

    Private Sub btnElenco_Click()
    
    ' ricerca operazioni inserite
    
        Dim rs3 As ADODB.Recordset
        Dim strSQL As String
        Dim Parametro As String
        
    ' imposto i campi per la gestione delle ricerche per generare elenchi
    
    SelezionatoCampodaElenco = False
    NSel = 1
    Ncampi = 4
    Strsql_Ric = " SELECT Pratica.ID, Pratica.Utente, Pratica.Intervento, T_Stato_Pratica.D_Stato_Pratica " & _
                 " FROM T_Stato_Pratica INNER JOIN Pratica ON T_Stato_Pratica.ID_Stato_Pratica = Pratica.Stato " & _
                 " ORDER BY Pratica.Utente"
     
    
    frmRicerca.InitializeStrsql Strsql_Ric  ' passo la stringa da eseguire sulla form geenerica di elenco
    
    frmRicerca.Show vbModal
    txtUtente = ""
    If SelezionatoCampodaElenco Then
        txtPratica = FieldKeyRic
    Else
        Inizializza
        MsgBox "Nessuna selezione operata dall'utente", vbExclamation
    End If
    
    End Sub
    

    nella pagina "frmRicerca" in cui effettuo la lettura dei dati contenuti nella Strsql_ric passata, effettuo la connessione e qui va in errore.

    Private Sub UserForm_Activate()
    
    ' Visualizzazione sulla Listbox1 delle Tabelle utente
    ' le tabelle prese in considerazione sono solo quelle con i prefissi Tb_Azienda_XXXXXXX
    ' es. Tb_Azienda_Assimoco, Tb_Azienda_ICCREA_Stampe
    
    Dim rs1 As ADODB.Recordset
    Dim oConn As ADODB.Connection
    
    
    Dim strSQL As String
    Dim NLoop As Integer
    
    strSQL = Strsql_Ric
    
    MsgBox "frmRicerca -- UserFormActivate -- devo fare connessione"
    GM_ConnMDB
    On Error GoTo ErrorHandler
    
        NLoop = 0
        ListBox1.Clear
        ListBox1.RowSource = ""
        ListBox1.ColumnCount = Ncampi
        
        Set rs1 = oConn.Execute(Strsql_Ric)
        Do Until rs1.EOF
               Select Case NSel
                    Case 1
                        ListBox1.AddItem rs1("Id") & vbTab                '"ROSSI" cognome in riga 1 colonna 1
                        ListBox1.List(NLoop, 1) = rs1("Utente")
                        ListBox1.List(NLoop, 2) = rs1("Intervento")
                        ListBox1.List(NLoop, 3) = rs1("D_Stato_Pratica")
    '                Case 2
    '                    ListBox1.AddItem rs1("ID_StatoRitiro") ' & vbTab                '"ROSSI" cognome in riga 1 colonna 1
    '                    ListBox1.List(NLoop, 1) = rs1("D_StatoRitiro")
    '                Case 3
    '                ' da personalizzare
    '                Case 4
    '                ' da personalizzare
                    Case Else
                End Select
        NLoop = NLoop + 1
        rs1.MoveNext
        Loop
        rs1.Close
        Set rs1 = Nothing
        
        If NLoop = 0 Then
            ListBox1.Clear
            ListBox1.RowSource = ""
            ListBox1.ColumnCount = 1
            ListBox1.AddItem "Nessun Record presente per la selezione Impostata"                '"ROSSI" cognome in riga 1 colonna 1
        End If
        
    ErrorHandler:
    
        If Not oConn Is Nothing Then
        MsgBox "esco per --------------------> mancata connessione"
            If oConn.State = adStateOpen Then oConn.Close
        End If
        Set oConn = Nothing
    
        If Err <> 0 Then
            MsgBox Err.Source & "-->" & Err.Description, , "Error"
        End If
    
    End Sub

    daallo screenshot si vede che manca la connessione.

    Non capisco perchè, dopo aver eseguito il metodo "GM_ConnMDB" in cui creo la connessione, esco per mancata connessione.
    Potete aiutarmi ?
    Sono in un errore bloccante.
    Disponibile ad ogni chiarimento 

    Grazie

    Moreno

Devi accedere o registrarti per scrivere nel forum
5 risposte