Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Abfrage auf Access Datenbanken

Abfrage auf Access Datenbanken
10.12.2008 16:35:00
Mario
Hi Leute,
ich möchte gerne die Abfrage von Excel auf eine Access-DB dynamisch gestalten. Bei Pivotcaches kann ich das schon. Hab ich hier gelernt :-). Nun stellt sich für mich die Frage, wie das bei Abfrage funktioniert. Ich habe gedacht gleich. Anscheinend jedoch nicht. Ich verwende folgende Code:

Sub Load_Data_AKT()
Dim strsql As String
Dim strdb_name As String
Dim strdb_path As String
Dim stractive_sheet_name As String
Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim strcon1 As String
Dim strcon2 As String
Dim strcon3 As String
'externe Datenquelle eines Excel-Pivottabellen-Berichtes anpassen
'Microsoft Office 2003 Professional
' OLE-Datenconnection zu einer ACCESS-Datenbank
'1. Teil des Connection Strings
strcon1 = "OLEDB;Provider=Microsoft.Jet.OLEDB.4.0;Password="""";"
strcon1 = strcon1 & "User ID=Admin;"
'3. Teil des Connection Strings
strcon3 = "Mode=Share Deny Write;"
strcon3 = strcon3 & "Extended Properties="""";"
strcon3 = strcon3 & "Jet OLEDB:System database="""";"
strcon3 = strcon3 & "Jet OLEDB:Registry Path="""";"
strcon3 = strcon3 & "Jet OLEDB:Database Password="""";"
strcon3 = strcon3 & "Jet OLEDB:Engine Type=5;"
strcon3 = strcon3 & "Jet OLEDB:Database Locking Mode=0;"
strcon3 = strcon3 & "Jet OLEDB:Global Partial Bulk Ops=2;"
strcon3 = strcon3 & "Jet OLEDB:Global Bulk Transactions=1;"
strcon3 = strcon3 & "Jet OLEDB:New Database Password="""";"
strcon3 = strcon3 & "Jet OLEDB:Create System Database=False;"
strcon3 = strcon3 & "Jet OLEDB:Encrypt Database=False;"
strcon3 = strcon3 & "Jet OLEDB:Don't Copy Locale on Compact=False;"
strcon3 = strcon3 & "Jet OLEDB:Compact Without Replica Repair=False;"
strcon3 = strcon3 & "Jet OLEDB:SFP=False"
'Definition der Datenbank
strdb_name = "Test.mdb"
'Worksheetname ermitteln
stractive_sheet_name = ActiveSheet.Name
'Pfad Datenbank ermitteln
strdb_path = "N:\Privat\"
'2. Teil des Connection Strings. Dieser Teil ist variabel mit Dateiname der Datenbank
strcon2 = "Data Source=" & strdb_path & strdb_name & ";" 'variabler Teil Connection-String
'Datenbasis und Max-Stichtag ermitteln
strsql = "SELECT tbl_tablename.coloumn_name " _
& "FROM `" & strdb_path & strdb_name & "`.tbl_tablename"
'Datenquelle Pivottabelle aktualisieren
With ActiveSheet.QueryTables
.Connection = strcon1 & strcon2 & strcon3
.CommandText = strsql
.MaintainConnection = False
End With
Worksheets(stractive_sheet_name).Select
Selection.QueryTable.Refresh BackgroundQuery:=False
rs.Close
Set rs = Nothing
Set db = Nothing
End Sub


Könnt ihr mir bitte weiterhelfen?
danke
lg Mario

Anzeige

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Abfrage auf Access Datenbanken
11.12.2008 14:17:35
fcs
Hallo Mario,
Bei einer Abfrage sehen die Parameter deutlich anders aus. Hier am Beispiel Excel 2003, MS-Access 2003
Beispiele zum Erzeugen einer Abfrage in einem neuen Tabellenblatt und zum Wechseln der Quelle einer vorhandenen Abfrage.
Gruß
Franz

Option Explicit
Sub abSQL_Quelle1()
Dim strSQL As String, strDateiOhneExt As String
Dim Pfad, Datei
'Pfad und Name der Access-Datenbank
Pfad = "C:\Lokale Daten\Test"
Datei = "Test.mdb"
'Dateiname und Extension dür dateityp
strDateiOhneExt = Left(Datei, Len(Datei) - 4)
'SQL-String generieren
strSQL = "SELECT Tabelle1.Feld01, Tabelle1.Feld02 "
strSQL = strSQL & "FROM `" & Pfad & Application.PathSeparator & strDateiOhneExt _
& "`.Tabelle1 Tabelle1 "
strSQL = strSQL & "WHERE (Tabelle1.Feld01 Like 'A%') "
strSQL = strSQL & "ORDER BY Tabelle1.Feld01"
Call SQL_Abfrage_ACCESS_neueQuelle(wksZiel:=ActiveSheet, strPfad:=Pfad, strDatei:=Datei, _
strName:="TestQuerryACCESS_Q1", strSQL:=strSQL)
End Sub
Sub abSQL_Quelle2()
Dim strSQL As String, strDateiOhneExt As String
Dim Pfad, Datei
'Pfad und Name der Access-Datenbank
Pfad = "Y:"
Datei = "Test_2008-11-26.mdb"
'Dateiname und Extension dür dateityp
strDateiOhneExt = Left(Datei, Len(Datei) - 4)
'SQL-String generieren
strSQL = "SELECT Tabelle1.Feld01, Tabelle1.Feld02 "
strSQL = strSQL & "FROM `" & Pfad & Application.PathSeparator & strDateiOhneExt _
& "`.Tabelle1 Tabelle1 "
strSQL = strSQL & "WHERE (Tabelle1.Feld01 Like 'A%') "
strSQL = strSQL & "ORDER BY Tabelle1.Feld01"
Call SQL_Abfrage_ACCESS_neueQuelle(wksZiel:=ActiveSheet, strPfad:=Pfad, strDatei:=Datei, _
strName:="TestQuerryACCESS_Q2", strSQL:=strSQL)
End Sub
Sub SQL_Abfrage_ACCESS_neueQuelle(wksZiel As Worksheet, _
ByVal strPfad As String, _
ByVal strDatei As String, _
strSQL As String, _
Optional strName As String = "AccessImport", _
Optional varQueryTable = 1)
'Quelle einer vorhandenen SQL-Abfrage in ACCESS-Datei wechseln
'wksZiel =Tabellenblatt mit der Access-Abfrage
'strPfad = Verzeichnis der Quelldatenbank
'strDatei = Name der Quelldatenbank
'strSQL = SQL-Befehlsstring für die Abfrage in der Datenbank
'strName = Name den die Abfrage im Tabellenblatt bekomen soll, Vorgabe="AccessImport"
'varQuery = Nummer oder Name der Abfrage im Tabellenblatt, Vorgabe = 1
Dim strCon As String
strCon = "ODBC;"
strCon = strCon & "DSN=Microsoft Access-Datenbank;"
strCon = strCon & "DBQ=" & strPfad & Application.PathSeparator & strDatei & ";"
strCon = strCon & "DefaultDir=" & strPfad & ";"
strCon = strCon & "DriverId=25;"
strCon = strCon & "FIL=MS Access;"
strCon = strCon & "MaxBufferSize=2048;"
strCon = strCon & "PageTimeout=5;"
With wksZiel.QueryTables(varQueryTable)
.Connection = strCon
.CommandType = xlCmdSql
.CommandText = strSQL
.Name = strName
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.PreserveColumnInfo = True
.Refresh BackgroundQuery:=False
End With
End Sub
Sub aaSQL_NeuesBlatt()
Dim wksZiel As Worksheet, strCon As String, strSQL As String, strDateiOhneExt As String
Dim Pfad, Datei
'SQL-Abfrage in ACCESS-Datei auf neuem Blatt anlegen
'Pfad und Name der Access-Datenbank
Pfad = "C:\Lokale Daten\Test"
Datei = "Test.mdb"
'Dateiname und Extension dür dateityp
strDateiOhneExt = Left(Datei, Len(Datei) - 4)
'SQL-String generieren
strSQL = "SELECT Tabelle1.Feld01, Tabelle1.Feld02 "
strSQL = strSQL & "FROM `" & Pfad & Application.PathSeparator & strDateiOhneExt _
& "`.Tabelle1 Tabelle1 "
strSQL = strSQL & "WHERE (Tabelle1.Feld01 Like 'A%') "
strSQL = strSQL & "ORDER BY Tabelle1.Feld01"
Call SQL_Abfrage_ACCESS_neuesBlatt(strPfad:=Pfad, strDatei:=Datei, _
strZelle:="A1", strName:="TestQuerryACCESS", strSQL:=strSQL)
End Sub
Sub SQL_Abfrage_ACCESS_neuesBlatt(ByVal strPfad As String, _
ByVal strDatei As String, _
strZelle As String, _
strName As String, _
strSQL As String)
'Quelle einer vorhandenen SQL-Abfrage in ACCESS-Datei wechseln
Dim wksZiel As Worksheet, strCon As String
ActiveWorkbook.Worksheets.Add
Set wksZiel = ActiveSheet
strCon = "ODBC;"
strCon = strCon & "DSN=Microsoft Access-Datenbank;"
strCon = strCon & "DBQ=" & strPfad & Application.PathSeparator & strDatei & ";"
strCon = strCon & "DefaultDir=" & strPfad & ";"
strCon = strCon & "DriverId=25;"
strCon = strCon & "FIL=MS Access;"
strCon = strCon & "MaxBufferSize=2048;"
strCon = strCon & "PageTimeout=5;"
With wksZiel.QueryTables.Add(Connection:=strCon, Destination:=Range(strZelle))
.CommandText = strSQL
.Name = strName
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.PreserveColumnInfo = True
.Refresh BackgroundQuery:=False
End With
End Sub


Anzeige
AW: Abfrage auf Access Datenbanken
12.12.2008 15:24:00
Mario
danke, schaut super aus,
werds Montag gleich ausprobieren...
jetzt geh ich Skifahren, hat grad voll viel Schnee bei uns :-)
lg mario
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige