Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1512to1516
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

Änderung von Access-Abfragen mittels SQL und VBA

Änderung von Access-Abfragen mittels SQL und VBA
13.09.2016 16:05:19
Access-Abfragen
Hallo zusammen,
ich konnte in den vergangenen Jahren schon sehr viel Wissen aus diesem Forum ziehen und bin immer sehr dankbar für diesen riesigen Pool an Informationen. Jetzt stehe ich aber leider vor einem Problem, zu welchem ich trotz intensiver Recherche noch nichts brauchbares finden konnte... Vielleicht steh ich auch einfach nur auf dem Schlauch (wie man so schön sagt).
Mein Problem:
Ich habe ein Tool programmiert, welches auf eine Access-Datenbank zugreifen soll, um dort eine bereits bestehende Abfrage (nennen wir sie "Abfrage 1") mittels SQL zu verändern. Anschließend greift das Tool auf eine andere Abfrage (nennen wir sie "Abfrage 2") derselben Datenbank zu, liest die "Ergebnisse" aus und überträgt sie ins Excel. Es ist anzumerken, dass "Abfrage 2" hierbei natürlich auf "Abfrage 1" beruht. Es stellt sich heraus, dass die Veränderung der "Abfrage 1" nicht funktioniert.
Nebenbei: Ich hab Office 2016.
Im Anschluss könnt ihr (ich bleib gleich beim "du") in vereinfachter Form meinen Code sehen:
------
Private Sub DatenLadenB2C()
Dim Datenbank As Object
Dim strPfad As String
Dim SQLAnweisung As String
Dim rs As Object
Dim Z, x As Integer
Dim anzahl As Integer
Dim Zielstring As String
strPfad = Sheets("Access-Daten").Cells(262, 3)      'Pfad auslesen aus Zelle
If strPfad = "" Or strPfad = "Falsch" Then          'Fehlerabfang
MsgBox "Fehler beim Öffnen"
Exit Sub
End If
Set Datenbank = CreateObject("ADODB.Connection")    'Datenbank öffnen
DBProvi = "Microsoft.ACE.OLEDB.12.0"
DBParameter = "Data Source=" & strPfad & ";Jet OLEDB:Engine Type=5;" & _
"Persist Security Info = False;"
Datenbank.Provider = DBProvi
Datenbank.ConnectionString = DBParameter
Datenbank.Open
Set rs = CreateObject("ADODB.recordset")
Zielstring = "abc"
SQLAnweisung = "SELECT blablabla, " & Zielstring & " AS Dingsda _
FROM [Abfrage 1] GROUP BY blablabla HAVING DiesUndDas;"
Debug.Print SQLAnweisung           'SQL sieht genau so aus wie es sein soll
Datenbank.Cursorlocation = 3       'hier soll die Abfrage verändert werden
rs.Open SQLAnweisung, Datenbank
rs.Close                           'der Code läuft problemlos durch, aber mit der Abfrage  _
passiert nichts... Kann mir hier jemand helfen?
SQLAnweisung = "SELECT * FROM [Abfrage 2]"  'Überschreiben der SQL-Anweisung
Datenbank.Cursorlocation = 3
rs.Open SQLAnweisung, Datenbank
rs.MoveLast
anzahl = rs.RecordCount
rs.MoveFirst
For x = 1 To anzahl
For Z = 169 To 170
Sheets("Access-Daten").Cells(Z, 54).Value = rs(0)
Sheets("Access-Daten").Cells(Z, 55).Value = rs(1)
rs.MoveNext
Next Z
Next x
rs.Close                           'Dieser Abschnitt klappt ganz hervorragend
Datenbank.Close
End Sub
Ich bin der festen Überzeugung, dass ich das noch nicht richtig geblickt habe... Ist auch das erste Mal, dass ich Access und Excel verbindend nutze.
Ich habe auch schon folgendes versucht:
CurrentDb.QueryDefs("Abfrage 1").Sql = "SELECT ..."
Da kommt bisher immer nur der mir unverständliche Laufzeitfehler 3001...
Vielen Dank schonmal im Voraus!
Liebe Grüße,
Lenny

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Änderung von Access-Abfragen mittels SQL und VBA
13.09.2016 17:15:11
Access-Abfragen
Inzwischen ist es "Laufzeitfehler 91: Objektvariable oder With-Blockvariable nicht festgelegt", _ wenn ich

CurrentDb.QueryDefs("Abfrage 1").Sql = "..."
verwende...
AW: Änderung von Access-Abfragen mittels SQL und VBA
13.09.2016 18:22:31
Access-Abfragen
Hallo Lenny,
das, was in Access klappt:
- aus einer Abfrage eine 2. Abfrage
- mit einschränkenden Bedingungen
zu Erstellen, funktioniert so bei Recordset nicht. Deshalb habe ich in der Access-DB eine
dummy-Abfrage, bei der ich per Vba
- ADODB/ADOX oder
- DAO / DAO.36 / DAO.120
die Syntax ändere/speichere und dann von dieser dummy-Abfrage das Recordset aufbaue.
Dein Lösungsversuch:
CurrentDb.QueryDefs("Abfrage 1").Sql = "..."
gehört zum DAO-Datenbank-Zugriff und hat mit ADODB nix zu tun.
Zuvor mußt man aber ein DAO-Objekt erstellen:
Dim daoObj As Object
Set daoObj = CreateObject("dao.dbengine.120") usw.
Gruß von Luschi
aus klein-Paris
Anzeige
AW: Änderung von Access-Abfragen mittels SQL und VBA
14.09.2016 09:53:15
Access-Abfragen
Hallo Luschi aus klein-Paris (wo auch immer das liegt :) ),
tausend Dank für den Hinweis! Jetzt funktioniert alles! Ich hab zwar nicht zu 100% verstanden, was ich gemacht habe bzw. was der Code jetzt im Detail bedeutet (ich muss mich mit dem Datenbankzugriff noch deutlich mehr beschäftigen), aber ich bin erstmal happy, dass es klappt.
Ich hab jetzt folgendes gemacht (Auszug):

Dim daoObj as Object
Dim db as Object
Dim strPfad as String
strPfad = Sheets("Access-Daten").Cells(261,3)     'Dateipfad aus Zelle entnehmen
SQLAnweisung = blabliblub                         'siehe ursprünglicher Code
Set daoObj = CreateObject(dao.dbengine.120)
Set db = daoObj.OpenDatabase(strPfad)
db.QueryDefs("Abfrage 1").Sql = SQLAnweisung
db.close
Set db = Nothing
Set daoObj = Nothing

Also nochmals: Tausend Dank!
Anzeige

54 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige