Comment utiliser Excel pour lire et écrire une base de données externe

Partage maintenant:

Excel peut pratiquement tout faire ; s'il faut lui faire tout faire, c'est une autre affaire. Bien que la feuille de calcul soit très puissante pour manipuler les données, elle n'est pas très performante pour stocker des données normalisées. Exploiter Excel à une base de données relationnelle comme SQL Server augmente la puissance de l'application.

Pour commencer, vous aurez besoin de MS Access ou de la version plus stable et gratuite – SQL Server Exprimer. On suppose que le lecteur a le ruban Excel Developer affiché et qu'il est familiarisé avec l'éditeur VBA et le langage de requête structuré (SQL). Cet article utilise SQL Server chaînes de connexion. Pour MS-Access, consultez Google.

Bien qu'Excel ait ses propres routines intégrées pour obtenir des informations à partir de SQL Server dans (disons) un tableau croisé dynamique, notre exemple donnera plus de flexibilité dans la sélection des données.

Chaîne de connexion

J'utiliserai une base de données privée ; insérez vos propres informations de pilote à la place des miennes dans la sous-routine ConnectDatabase. On utilise alors connDB comme canal de communication vers notre base de données - dans mon cas, pour renvoyer les résultats d'une procédure stockée. Vous pouvez utiliser des instructions SQL plus standard telles que "Select * from …"

Ordre des travaux

Tout d'abord, nous allons charger les choix de combo-box à partir de SQL Server À l'ouverture du classeur, grâce à une macro Auto_open, les données sont enregistrées dans la feuille « ComboData ». Que le serveur soit dans le cloud ou local, le démarrage d'Excel sera instantané, à condition que la base de données soit accessible depuis le poste de travail.

Ensuite, nous allons extraire les données filtrées de la base de données et les déposer dans Excel, colonnes F à K.

L'interface

Le mien a des listes déroulantes pour filtrer les informations de la base de données. Le Rôle combo box déclenche une recherche pour remplir le tableau de droite.La zone de liste déroulante Rôle déclenche une recherche pour remplir le tableau

Renommez "Sheet1" en "Main". Ajoutez au moins une zone de liste déroulante.

Le code

Public connDB As New ADODB.Connection
Public rstNew As New ADODB.Recordset
Public rs As New ADODB.Recordset
Public strSQL As String
Public nID As Integer

Sub auto_Open()
    Call PopulateComboData     'kicks off the first process  on Open
End Sub

Sub PopulateComboData()
    Sheets("ComboData").Range("A3:C100").ClearContents
    Call ConnectDatabase      'use the ConnectDatabase routine
    strSQL = "Select DeptID, Department, Phase from tblDept Order by Department"
    Set rs = connDB.Execute(strSQL)
    ActiveSheet.Range("A3").CopyFromRecordset rs      'copies the recordset in bulk
End Sub

Sub ReadData()
    intRole = Sheets("main").Range("D7")
    Sheets("Main").Range("F4:L100").ClearContents
    Call ConnectDatabase
    strSQL = "EXEC DBTest " & intRole    'calls a stored proc with parameter
    Set rs = connDB.Execute(strSQL)
    ActiveSheet.Range("F4").CopyFromRecordset rs      'copies the recordset in bulk
End Sub

Sub ConnectDatabase()
    On Error GoTo ErrConnect
    If connDB.State = 1 Then connDB.Close     'closes connection if already open
    strServer = "197.200.28.164" 
    strDBase = "Qcrew_sql"
    strUser = "joesoap_sql"
    strPWD = "frU6ra!@"
    If strPWD > "" Then 
        strConnectionstring = "DRIVER={SQL Server};Server=" & strServer & _
        ";Database=" & strDBase & ";Uid=" & strUser & ";Pwd=" & strPWD & _
        ";Connection Timeout=30;"
    Else        'Use windows authentication
        strConnectionstring = "DRIVER={SQL Server};SERVER=" & strServer & _
        ";Trusted_Connection=yes;DATABASE=" & strDBase
    End If
    connDB.Open strConnectionstring
Exit Sub
ErrConnect:
    MsgBox Err.Description
End Sub

Formatez le contrôle de la zone de liste déroulante pour lire les feuilles "ComboData". Cliquez ensuite avec le bouton droit sur la zone de liste déroulante pour lui affecter la sous-procédure ReadData. Lorsqu'un élément est sélectionné dans la liste déroulante, écrivez sa clé dans la feuille "Main", cellule D7. Le code VBA utilisera cette clé comme filtre (voir intRole, ci-dessus).

Références à la bibliothèque DLL

Dans la fenêtre de code, utilisez Outils > Références pour référencer la bibliothèque Microsoft Active X Data Objects. Excel pourra ainsi utiliser les objets ADODB déclarés dans le code.Référence à la bibliothèque Microsoft ActiveX Data Objects

La sous-routine ReadData ci-dessus utilise une structure de données relationnelle, illustrée ci-dessous, qui est difficile à réaliser dans Excel seul.La sous-routine ReadData utilise une structure de données relationnelle

D'autres modifications de données pourraient déclencher une écriture différée dans la base de données, avec l'instruction SQL Update appropriée suivie de connDB.execute(strSQL).

Enfin, protégez votre code contre la visualisation ou la modification :  Outils>Propriétés>Protection.

Gérer les problèmes Excel :

De temps en temps, en particulier lorsqu'il contient des programmes complexes, Excel peut se bloquer et ne pas récupérer correctement. En cas de endommagé xlsx Pour résoudre la plupart des problèmes de fichiers, disposer d'un outil de récupération efficace permettra de les résoudre.

Introduction de l'auteur:

Felix Hooker est un expert en récupération de données dans DataNumen, Inc., qui est le leader mondial des technologies de récupération de données, y compris réparation rar erreur et produits logiciels de récupération sql. Pour plus d'informations, visitez www.datanumen.com

Partage maintenant:

Les commentaires sont fermés.