SQL-Abfrage per DAO und ADO liefert unterschiedliche Ergebnisse
#1
Hallo zusammen,

ich als Access-Novize benötige mal wieder ein paar zielführende Tipps.
Zunächst nochmal zum Hintergrund:
Ziel ist es ein kleines Tool zu entwickeln, mit dem sich "Paletten-/Lagerbestände" nachvollziehen lassen.
Das ganze ist über ein Excel-Frontend und ein Access-Backend realisiert. Also Datenerfassung in Excel und Datenhaltung in Access.
Das Tool soll simultan an mehreren Rechnern (3-6) genutzt werden und so schien die Idee naheliegend, die Umsetzung wie oben beschrieben
zu realisieren. Ich hatte hier bereits schon ein paar Fragen allerdings in der "Excel-Sektion" gestellt.
Grundsätzlich läuft das Tool, ABER nicht uneingeschränkt auf allen Rechnern. Den Zugriff auf Access habe ich,
da ich hier leider erst nach Auftreten der nachfolgend beschriebenen Probleme angefangen habe zu recherchieren Blush , über ADO realisiert.

Code:
Public rst As ADODB.Recordset
Dim AccApp As Object
Dim conn As New ADODB.Connection

Sub DatenbankÖffnen()

   Set AccApp = CreateObject("Access.Application")
   'AccApp.Visible = True
   Set rst = New ADODB.Recordset
   conn.Open "Provider=Microsoft.Jet.OLEDB.4.0; " & "Data source=" & ThisWorkbook.Path & "\Aufarbeitung.mdb;"
   rst.Open strSQL, conn, adOpenKeyset, adLockOptimistic
   
End Sub

Auf einigen Rechnern erscheint ein Laufzeitfehler sobald Daten aus Access abgerufen werden.

   

Nun habe ich ein wenig recherchiert und herausgefunden, dass seit Office 2007 gewisse Komponenten, welche bei den vorherigen Versionen
noch zum Standard gehörten, von Microsoft aus dem Office Paket entfernt wurden.

https://support.microsoft.com/de-de/kb/244264

Ich habe im weiteren Verlauf der Recherche auch einen Link zu einem von Microsoft angeboten Bugfix gefunden

https://www.microsoft.com/en-us/download...px?id=3671

Das Bugfix wurde durch die IT installiert und, wen wundert es :20: , der Laufzeitfehler tritt immer noch auf.
Im weiteren Verlauf wurden Teile aus dem Office 2000 und 2003 Paket installiert. Eben das in Office 2007 fehlende "Collaboration Data Objects-Paket".
Kein Workaround hat hier geholfen.

Hat jemand von Euch eine Idee oder das gleiche Problem schon einmal gelöst?


Als Plan B habe ich angefangen den Zugriff über DAO zu realisieren mit dem "Erfolg", dass nun zwar keine Fehlermeldung mehr beim Öffnen der Datenbank auftritt, dafür aber
die übergebenen SQL-Strings unterschiedliche bzw. kein Ergebnis liefern. 

Der Zugriff per ADO:
Code:
With UserForm1

   'Listenfeld löschen
   .ListBox1.Clear
   
   'Alle Datensätze anzeigen
   If .TextBox1.Value = "*" Then
       strSQL = "SELECT * FROM Artikel ORDER BY Artikel ASC"
       GoTo weiter
   ElseIf .TextBox2.Value = "*" Then
       strSQL = "SELECT * FROM Artikel ORDER BY CMMF ASC"
       GoTo weiter
   End If
   
   'Nach DS mit Anfangskombinationsuchen
   If .TextBox1.Value <> "*" And .TextBox2 = "" Then
       strSQL = "SELECT * FROM Artikel WHERE Artikel LIKE '" & .TextBox1.Value & "%' ORDER By Artikel ASC"
   ElseIf .TextBox2.Value <> "*" And .TextBox1 = "" Then
       strSQL = "SELECT * FROM Artikel WHERE CMMF LIKE '" & .TextBox2.Value & "%' ORDER By Artikel ASC"
   End If

im weiteren Verlauf werden die Ergebnisse dann in einer Listbox ausgegeben.

Bei einer Abfrage aller Datensätze liefert mir diese per ADO unter Verwendung des nachfolgenden SQL-Strings

Code:
strSQL = "SELECT * FROM Artikel ORDER BY Artikel ASC"

7230 Datensätze.

Die Verwendung des gleichen Strings bei Zugriff per DAO liefert 0 Datensätze :s .
Nachfolgend der Zugriff per DAO:

Code:
Public rst As DAO.Recordset
Dim db As DAO.Database

Sub DatenbankÖffnen()

   Set db = OpenDatabase(ThisWorkbook.Path & "\Aufarbeitung.mdb")
   Set rst = db.OpenRecordset(strSQL, dbOpenDynaset)

End Sub
Da ich wie gesagt Access-Novize bin, muss ich bei Zugriff über DAO das SQL-Statement anders übergeben? Ich dachte SQL wäre an dieser Stelle universell Huh ?!
Oder mache ich einen Fehler beim Öffnen der Datenbank per DAO? Ich bin echt verwirrt und blicke es leider nicht. "Gefährliches Halbwissen"!!! :16:

Danke und Gruß
Ich
Top
#2
Hallöchen,

den strSQL hast Du auch als Public gesetzt, sodass dao dann auch hat?
Tritt ein Fehler auf? (mal den dao schrittweise durchlaufen und in der Überwachung err hinzufügen)
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Top
#3
Hallo André,

Danke für Deine Antwort.

Ich denke wir sind jetzt so weit  :19:.

Ich finde da nichts.
Im Anhang also eine anonamisierte Version.

Zu meinem Testszenario:
Probiert bitte zunächst die ADO-Version.
Klickt in Tabelle 1 auf "Neue Palette ,etc."
Klickt nachfolgend auf "Neue Palette anlegen"
Und gebt nachfolgend in der UF1 in der TB "Artikel" einen "*" ein.

Danach das gleiche Szenario mit der DAO-Version.

Für Hilfe bin ich extrem dankbar.
Mir rennt die Zeit davon!

Gruß
Ich

Alle Dateien müssen in das gleiche Verzeichnis.

.mdb   AufarbeitungAnonymus.mdb (Größe: 304 KB / Downloads: 3)

.xlsm   Retourenbearbeitung_1_01_ADO.xlsm (Größe: 177,34 KB / Downloads: 5)

.xlsm   Retourenbearbeitung_1_01_DAO.xlsm (Größe: 132,79 KB / Downloads: 3)

P.S. Warum kann ich keine ZIP-Datei hochladen?
Top
#4
Hi du,

Zitat:P.S. Warum kann ich keine ZIP-Datei hochladen?

ZIP-Dateien sind freigegeben. Es müsste also gehen, es sei denn, dass diese zu groß ist. Die Begrenzung liegt bei 2 MB.

http://www.clever-excel-forum.de/misc.php?action=help&hid=8
Gruß Günter
Jeder Fehler erscheint unglaublich dumm, wenn andere ihn begehen.
angebl. von Georg Christoph Lichtenberg (1742-1799)
Top
#5
Hallo Günter,

es war schon spät gestern.
Ich wollte eine 7z-Verzeichnis hochladen.

Gruß
Ich
Top
#6
Hallo Ich,

also, bei der DAO-Variante konnte ich keine Abweichungen feststellen.
Beim ADO habe ich folgende Änderung vorgenommen - mangels Access auf einem Rechner. Das war übrigens auch die Ursache für den Fehler 429...

Code:
Sub DatenbankÖffnen()

'    Set AccApp = CreateObject("Access.Application")
   'AccApp.Visible = True
   Set rst = New ADODB.Recordset
'    conn.Open "Provider=Microsoft.Jet.OLEDB.4.0; " & "Data source=" & ThisWorkbook.Path & "\AufarbeitungAnonymus.mdb;"
   conn.Open "Provider=Microsoft.ACE.OLEDB.12.0; " & "Data source=" & ThisWorkbook.Path & "\AufarbeitungAnonymus.mdb;"
   rst.Open strSQL, conn, adOpenKeyset, adLockOptimistic
   
End Sub

Bei der Bearbeitung werden mir in beiden Versionen 15 Treffer gemeldet. Beim Bearbeiten wird in beiden Versionen die Palettennummer hochgezählt und gespeichert, trotz Abbruch der Bearbeitung.

Beim DAO hatten wir vor Jahren mit Workspaces gearbeitet. Eventuell hilft das-

Set db = Workspaces(0).OpenDatabase(...)

Geschadet hat es jedenfalls nicht, der Code lief auch damit bei mir durch. Aber eventuell reicht nun ja auch ADO.
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
[-] Folgende(r) 1 Nutzer sagt Danke an schauan für diesen Beitrag:
  • IchBinIch
Top
#7
Hallo André,

das war's! Danke Thumps_up!

Gruß
Ich
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste