• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

Sql en Inner Join in VBA: tabellen aan elkaar koppelen

Status
Niet open voor verdere reacties.

Excelbat

Gebruiker
Lid geworden
23 mrt 2012
Berichten
403
Hallo allemaal,

In de bijlage 2x een access-database en 1x een excelfile. In de excelfile wil ik de gegevens inlezen vanuit beide databases. Het lukt me om met VBA beide tabellen apart in te lezen.
Maar in sql is er een commando 'inner join'. Weet iemand hoe ik dit 'inner join' verwerk in VBA zodat ik gegevens van de ene tabel kan koppelen aan de andere tabel?
Dit heb ik al met de macrorecorder opgenomen:

Code:
Sub TabelInlezenOne()
    With ActiveSheet.ListObjects.Add(SourceType:=0, Source:=Array(Array( _
        "ODBC;DSN=MS Access Database;DBQ=D:\Persoonlijk Data\Documenten\DatabaseOne.accdb;DefaultDir=D:\Persoonlijk Data\Documenten;DriverId=" _
        ), Array("25;FIL=MS Access;MaxBufferSize=2048;PageTimeout=5;")), Destination:= _
        Range("$A$1")).QueryTable
        .CommandType = 0
        .CommandText = Array( _
        "SELECT TabelOne.Who, TabelOne.When" & Chr(13) & "" & Chr(10) & "FROM `D:\Persoonlijk Data\Documenten\DatabaseOne.accdb`.TabelOne TabelOne" _
        )
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .BackgroundQuery = True
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .PreserveColumnInfo = True
        .ListObject.DisplayName = "Tabel_Query_van_MS_Access_Database"
        .Refresh BackgroundQuery:=False
    End With
End Sub


Code:
Sub TabelInlezenTwo()
    With ActiveSheet.ListObjects.Add(SourceType:=0, Source:=Array(Array( _
        "ODBC;DSN=MS Access Database;DBQ=D:\Persoonlijk Data\Documenten\DatabaseTwo.accdb;DefaultDir=D:\Persoonlijk Data\Documenten;DriverId=" _
        ), Array("25;FIL=MS Access;MaxBufferSize=2048;PageTimeout=5;")), Destination:= _
        Range("$H$1")).QueryTable
        .CommandType = 0
        .CommandText = Array( _
        "SELECT TabelTwo.Who, TabelTwo.What" & Chr(13) & "" & Chr(10) & "FROM `D:\Persoonlijk Data\Documenten\DatabaseTwo.accdb`.TabelTwo TabelTwo" _
        )
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .BackgroundQuery = True
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .PreserveColumnInfo = True
        .ListObject.DisplayName = "Tabel_Query_van_MS_Access_Database_1"
        .Refresh BackgroundQuery:=False
    End With
End Sub

Bekijk bijlage JoinTables.rar

Greetz/Excelbat
 
VBA van Excel heeft een commando genaamd JOIN maar dat is niet te vergelijken met de JOIN in SQL.
In de code gebruik je al SQL waarin je de nodige aanpassingen heb gedaan.
Wat je dus kan doen is de INNER JOIN in de SQL gebruiken en zo in Excel plaatsen.

Met vriendelijke groet,


Roncancio
 
Dank je wel Roncancio voor je bericht. Ik heb inmiddels via SQL voor elkaar gekregen om een INNER JOIN te maken naar twee tabellen met volledig pad naar de bestandsnaam.
Ik wil nu een derde tabel toevoegen, en dat lukt effe niet. Maar ik zag dat Helpmij ook een forum voor SQL heeft, dus ik ga daar m'n licht eens opsteken. Anyway, bedankt voor je hulp.

Greetz/Excelbat
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan