Excel gebruiken om een ​​externe database te lezen en te schrijven

Excel kan vrijwel alles; of het moet worden gemaakt om alles te doen, is een andere kwestie. Hoewel de spreadsheet erg krachtig is in het manipuleren van gegevens, is hij niet zo goed in het opslaan van genormaliseerde gegevens. Excel gebruiken voor een relationele database zoals SQL Server vergroot de kracht van de applicatie.

Om te beginnen heb je MS Access nodig, of de stabielere en gratis variant – SQL Server Uitdrukken. Aangenomen wordt dat de lezer het Excel Developer-lint heeft weergegeven en bekend is met de VBA Editor en Structured Query Language (SQL). Dit artikel maakt gebruik van SQL Server verbindingsreeksen. Raadpleeg Google voor MS-Access.

Hoewel Excel zijn eigen ingebouwde routines heeft om informatie uit te halen SQL Server in (laten we zeggen) een draaitabel, zal ons voorbeeld meer flexibiliteit bieden bij het selecteren van gegevens.

Verbindingsdraad

Ik zal een privé-database gebruiken; plaats uw eigen stuurprogramma-informatie in plaats van de mijne in de ConnectDatabase-subroutine. We gebruiken dan verbind als communicatiekanaal naar onze database - in mijn geval om resultaten van een opgeslagen procedure te retourneren. U kunt meer standaard SQL-instructies gebruiken, zoals 'Selecteer * van ...'

Orde van zaken

Eerst laden we keuzelijsten met invoervak ​​uit SQL Server Wanneer het werkblad wordt geopend, wordt een Auto_open-macro gebruikt om de gegevens in het blad "ComboData" te plaatsen. Of de server zich nu in de cloud of lokaal bevindt, er zal geen merkbare vertraging zijn bij het opstarten van Excel, zolang de database maar toegankelijk is vanaf het werkstation.

Vervolgens halen we gefilterde gegevens uit de database en plaatsen deze in Excel, kolommen F tot K.

De interface

De mijne heeft vervolgkeuzelijsten om informatie uit de database te filteren. De Rol combobox activeert een zoekopdracht om de tabel rechts te vullen.De rol-keuzelijst met invoervak ​​activeert een zoekopdracht om de tabel te vullen

Hernoem “Blad1” naar “Hoofd”. Voeg minimaal één combobox toe.

De 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

Formatteer het besturingselement met invoervak ​​om de bladen "ComboData" te lezen. Klik vervolgens met de rechtermuisknop op de keuzelijst om de ReadData-subprocedure eraan toe te wijzen. Wanneer een item is geselecteerd in de combobox, schrijft u de sleutel naar het blad "Hoofd", cel D7. De VBA-code gebruikt deze sleutel als een filter (zie intRole hierboven).

Verwijzingen naar de DLL-bibliotheek

Gebruik Extra > Verwijzingen in het codevenster om te verwijzen naar de Microsoft ActiveX-gegevensobjectenbibliotheek. Hierdoor kan Excel de in de code gedeclareerde ADODB-objecten gebruiken.Raadpleeg de Microsoft ActiveX-gegevensobjectenbibliotheek.

De ReadData-subroutine hierboven gebruikt een relationele gegevensstructuur, zoals hieronder weergegeven, die moeilijk te realiseren is in alleen Excel.De ReadData-subroutine gebruikt een relationele gegevensstructuur

Verdere gegevenswijzigingen kunnen een terugschrijven naar de database veroorzaken, met de juiste SQL Update-instructie gevolgd door connDB.execute (strSQL).

Bescherm tot slot uw code zodat deze niet kan worden bekeken of gewijzigd:  Extra> Eigenschappen> Bescherming.

Omgaan met Excel-problemen:

Van tijd tot tijd, vooral wanneer het complexe programma's bevat, kan Excel crashen en de juiste dekking niet herstellen. In het geval van een beschadigde xlsx Het is handig om een ​​effectief herstelprogramma bij de hand te hebben, want dat lost de meeste problemen op.

Auteur Introductie:

Felix Hooker is een expert op het gebied van gegevensherstel DataNumen, Inc., de wereldleider in technologieën voor gegevensherstel, waaronder reparatie rar fout en sql-herstelsoftwareproducten. Voor meer informatie bezoek www.datanumen.com

Reacties zijn gesloten.