Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1028to1032
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

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

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

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige