Importare il risultato di una query
Info
Esempi
Linguaggio
Librerie
Formule
Ultimi Inseriti

 Login

 Password

Oltre alle funzioni presenti nel menù dati per il collegamento ad una tabella (o query) ad un database è possibile ottenere le stessa cosa con poche righe di codice.
Nel caso di collegamento otteniamo tutte le righe della tabella (possiamo usare una query solo statica) da elaborare poi in Excel: non ha molti vantaggi rispetto all'avere il "database" direttamente su un foglio di appoggio su Excel.
Utilizzando una macro sarà possibile leggere dal database solo le righe che ci interessano (ad esempio le righe di un ordine) e fare in modo che avvenga al cambio del contenuto di una cella (ad es. quella che contiene il numero di ordine.

Nell'esempio sotto è utilizzata la funzione CopyFromRecordset per importare il risultato di una query:
Sub LeggiDaDatabase_V1()
  Dim Cn As ADODB.Connection
  Dim T1 As ADODB.Recordset
  
  '--- Percorso del DB in Access nella stesa cartella in cui è contenuto il file in Excel ---
  FileDB = Application.ThisWorkbook.Path & "\DbDemo.accdb"
    
  '--- Link ADO al DB Access---
  Set Cn = New ADODB.Connection
  Provider = "Microsoft.ACE.OLEDB.12.0"
  DataLink = "Provider=" + Provider + ";Data Source=" + FileDB + ";JPersist Security Info=False"
  Cn.Open DataLink
   
  '--- crea la query ---
  Set T1 = New ADODB.Recordset
  StQ = "Select * From Agenti"
  T1.Open StQ, Cn, adOpenKeyset, adLockOptimistic, adCmdText
    
  '--- incolla il risultato dalla cella B3 ---
  Range("B3").CopyFromRecordset T1
    
End Sub

In questo altro esempio invece vengono estratti i nomi dei campi e poi i dati scorrendo le righe e le colonne:
Sub LeggiDaDatabase_V2()
  Dim Cn As ADODB.Connection
  Dim T1 As ADODB.Recordset
  
  '--- Percorso del DB in Access nella stesa cartella in cui è contenuto il file in Excel ---
  FileDB = Application.ThisWorkbook.Path & "\DbDemo.accdb"
    
  '--- Link ADO al DB Access---
  Set Cn = New ADODB.Connection
  Provider = "Microsoft.ACE.OLEDB.12.0"
  DataLink = "Provider=" + Provider + ";Data Source=" + FileDB + ";Persist Security Info=False"
  Cn.Open DataLink
   
  '--- crea la query ---
  Set T1 = New ADODB.Recordset
  StQ = "Select * From Agenti"
  T1.Open StQ, Cn, adOpenKeyset, adLockOptimistic, adCmdText
    
  If Not (T1.EOF) Then
    '--- nomi dei campi ---
    Set CellaBase = Range("B3")
    RigaBase = CellaBase.Row
    ColBase = CellaBase.Column
  
    R = RigaBase
    For I = 0 To T1.Fields.Count - 1
      Cells(R, I + ColBase) = T1.Fields(I).Name
    Next I

    ' --- dati ---
    R = RigaBase + 1
    While Not (T1.EOF)
      For I = 0 To T1.Fields.Count - 1
        Cells(R, I + ColBase) = T1.Fields(I)
      Next I
            
      R = R + 1
      T1.MoveNext
    Wend
  End If
  
  T1.Close
  Cn.Close
End Sub


L'esempio è scaricabile da questo link: Es381.xlsm
Il database di test da questo link: DbDemo.zip
 

data4idea srls - PIva 01881000937 - info@data4idea.it