| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
| PNY präsentiert die neue NVIDIA RTX A400 und die A1000 Grafikkarte, eine Pressemitteilung
|
Autor
|
Thema: MS Access Abfrage (2346 / mal gelesen)
|
otm Mitglied Bauingenieur
Beiträge: 188 Registriert: 26.08.2009 MS Win 10 AutoCAD Civil 3D 2023.2.1 Update VBA Enabler 2019 MS Access Database Enginge X64 MSO 365 (64bit)
|
erstellt am: 26. Jun. 2017 13:09 <-- editieren / zitieren --> Unities abgeben:
Liebes Forum, ich versuche von C3D über VBA eine Access Abfrage auszuführen. Ich erhalte die Fehlermeldung 'Objekterstellung durch ActiveX-Komponente nicht möglich'. Der Fehler passiert in der Zeile:
Code:
Set db = OpenDatabase(DBPathName, , True)
Hier mal der ganze Code: Code:
Function IsKrzlInQry(strQry As String, strKrzl As String) As Boolean Dim db As Database Dim qry As QueryDef Dim rs As Recordset Dim DSAnz As Integer 'Datenbank öffnen 'Die DB wird nicht exklusiv und schreibgeschützt geöffnet. Set db = OpenDatabase(DBPathName, , True) 'Abfrage definieren Set qry = db.QueryDefs(strQry) 'Abfrageparameter setzen. Einfach mit Namen ansprechen. qry.Parameters("Krzl") = strKrzl 'Abfrage ausführen Set rs = qry.OpenRecordset 'Geht zum letzten Datensatz des Recordsets. 'Wichtig für das korrekte Ermitteln der DS-Anzahl und für das Auffüllen des rs-Objekts rs.MoveLast 'Zähler wieder auf den Anfang der Liste stellen rs.MoveFirst If rs.EOF Then 'keine Datensätze in der Abfrage enthalten. Standard-AG "ibh" wird erzeugt. MsgBox "Die Abfrage hat eine leere Liste ergeben." , vbCritical, "Hinweis" IsKrzlInQry = False GoTo Exit_IsKrzlInQry Else 'Datensätze in der Abfrage zählen DSAnz = rs.RecordCount If DSAnz = 1 Then IsKrzlInQry = True Else IsKrzlInQry = False End If End If Exit_IsKrzlInQry: rs.Close db.Close End Function
Unter 2013 ging es. Woran kann das liegen? ------------------ Grüße aus München Christian
[Diese Nachricht wurde von otm am 26. Jun. 2017 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KlaK Ehrenmitglied V.I.P. h.c. Dipl. Ing. Vermessung, CAD- und Netz-Admin
Beiträge: 2799 Registriert: 02.05.2006 AutoCAD LandDesktop R2 bis 2004 Civil 3D 2005 - 2022 Plateia, Canalis Visual Basic
|
erstellt am: 29. Jun. 2017 17:01 <-- editieren / zitieren --> Unities abgeben: Nur für otm
Kann man so schlecht sagen, da die Umgebung nicht bekannt ist. Was verwendest Du denn? Betriebssystem 64 Bit? Civil 2016 64 Bit? Office 2010 32 Bit? Welche Verweise hast Du aktiviert? ADO DAO ? Ich definiere das im Code gerne explizit DBPathName ist eine globale Variable? Grüße Klaus Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
otm Mitglied Bauingenieur
Beiträge: 188 Registriert: 26.08.2009 MS Win 10 AutoCAD Civil 3D 2023.2.1 Update VBA Enabler 2019 MS Access Database Enginge X64 MSO 365 (64bit)
|
erstellt am: 30. Jun. 2017 22:31 <-- editieren / zitieren --> Unities abgeben:
Hallo Klaus, die Variable ist global. Ich verwende Windows 7 Prof. 64bit, MSO 2010 32bit C3D 2013 64bit VBA Enabler für AutoCAD 2013 32bit C3D 2016 64bit VBA Enabler für AutoCAD 2016 64bit Und im Anhang meine Verweise (einmal 2016 und einmal die alten von 2013). Ich hoffe das ist alles was Du brauchst. Kannst Du mir bitte ein Beispiel für einen expliziten Verweis geben, damit ich das bei mir mal testen kann. ------------------ Grüße aus München Christian [Diese Nachricht wurde von otm am 03. Jul. 2017 editiert.] [Diese Nachricht wurde von otm am 03. Jul. 2017 editiert.] [Diese Nachricht wurde von otm am 03. Jul. 2017 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KlaK Ehrenmitglied V.I.P. h.c. Dipl. Ing. Vermessung, CAD- und Netz-Admin
Beiträge: 2799 Registriert: 02.05.2006 AutoCAD LandDesktop R2 bis 2004 Civil 3D 2005 - 2022 Plateia, Canalis Visual Basic
|
erstellt am: 04. Jul. 2017 14:21 <-- editieren / zitieren --> Unities abgeben: Nur für otm
Hallo Christian, Was mir bei Deinen Verweisen auffällt: Unter 2013 hast Du zwei zusätzliche Verweise die unter 2016 fehlen: - Microsoft Forms 2.0 Object Library - AXDBLib Von daher dürfte der Fehler aber nicht kommen denn die DataBase ist ja im Microsoft Office definiert Rufe doch mal mit F2 den Objektkatalog auf und lasse nach dem Element suchen (siehe Bild) Hast Du auch mal den DBPathName überprüft? Gibt es die Datenbank überhaupt? Direkter Verweis:
Code:
'Um ADO nutzen zu können muß im Menü unter Projekt-Verweise 'ein Verweis auf die "Microsoft ActiveX Data Objects 2.x Library" 'gesetzt werden Public strMDBDatei As String Public Cn As ADODB.ConnectionSub MDB_Verbinden() ' _Jet() ' Dim Cn As New ADODB.Connection 'bereits global ' bestehede Connection beenden On Error Resume Next Cn.Close Err.Clear On Error GoTo Err_Verbinden With Cn 'Meistens Cursor auf Client außer für SEHR große Arbeiten .CursorLocation = adUseClient ' Sperrungen (hier keine bei Multiuser) .mode = adModeShareDenyNone ' DB-Provider (hier Access 2000) 'Definitionen für Win64 #If Win64 Then .Provider = "Microsoft.ACE.OLEDB.12.0" ' ( Windows 8.1 mit Office 2010) #ElseIf Win32 Then .Provider = "Microsoft.Jet.OLEDB.4.0" ' ( Windows XP mit Office 2000) #End If .ConnectionString = "Data Source=" & strMDBDatei .Open End With Exit Sub Err_Verbinden: MsgBox Err.Number & " : " & Err.Description Stop Resume Next End Sub
Grüße Klaus Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
otm Mitglied Bauingenieur
Beiträge: 188 Registriert: 26.08.2009 MS Win 10 AutoCAD Civil 3D 2023.2.1 Update VBA Enabler 2019 MS Access Database Enginge X64 MSO 365 (64bit)
|
erstellt am: 04. Jul. 2017 15:32 <-- editieren / zitieren --> Unities abgeben:
Hallo Klaus, ich habe nun alle Verweise angepasst. Die Verweise sind identisch, jedoch die Dateien auf die die Verweise sich beziehen liegen teilweise in ...Progamme(x86) und teilweise in ...Programme. Besonders der Verweis "Visual Basic für Applications" differiert um die 32/64-bit-Version. Im Objektkatalog ist das Objekt vorhanden. Die Datenbank ist auch vorhanden. Testhalber habe ich eine ganz neue ACCESS-2010-DB gemacht mit nur einer Tabelle "Buchstaben" und einer Abfrage "Buchstabe" und anhängendes Makro laufen lassen. Debuggen ist fehlerfrei durchgelaufen. Code:
Option Explicit Const DBPathName = "N:\CAD\Test2016.accdb"Sub TestDB() Dim strBlk As String strBlk = GetDB("C") End Sub Function GetDB(xxx As String) As String 'Eingangswert: xxx ... (z.B. "C") 'Rückgabe: String mit dem Buchstaben, wenn dieser vorhanden ist. 'Variablendefinition Dim db As Database Dim qry As QueryDef Dim rs As Recordset Dim intI As Integer Set db = OpenDatabase(DBPathName, , True) Set qry = db.QueryDefs("Buchstabe") qry.Parameters("ABC") = xxx Set rs = qry.OpenRecordset If rs.EOF Then intI = 0 Else rs.MoveLast rs.MoveFirst intI = rs.RecordCount End If If intI = 1 Then GetDB = rs.Fields(0).Value ElseIf intI = 0 Then GetDB = "Nix" Else GetDB = "Fehler" End If Exit_GetDB: rs.Close db.Close End Function
Zur Laufzeit wieder der Fehler 429.
------------------ Grüße aus München Christian Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KlaK Ehrenmitglied V.I.P. h.c. Dipl. Ing. Vermessung, CAD- und Netz-Admin
Beiträge: 2799 Registriert: 02.05.2006 AutoCAD LandDesktop R2 bis 2004 Civil 3D 2005 - 2022 Plateia, Canalis Visual Basic
|
erstellt am: 04. Jul. 2017 17:33 <-- editieren / zitieren --> Unities abgeben: Nur für otm
Hi, Was passiert denn wenn Du der db explizit den Katalog zuweist? Code:
Dim db As DAO.Database
aber ist schon komisch wenn es im Debugmodus geht, zur Laufzeit aber nicht. Ansonsten verweisen die Microsoft Fehlerhinweise zu Fehler 429 noch auf Automatisierungsfehler, die durch folgende Zeilen umgangen werden könnte:
Code:
Dim strDB As String Dim oAccessApp As Access.Application Dim oDB As Database strDB = "Pfad\DeineDatenbank.mdb" Set oAccessApp = CreateObject("Access.Application") oAccessApp.OpenCurrentDatabase strDB, False Set oDB = oAccessApp.CurrentDb ' weitere Auswertungen oDB.Close Set oDB = Nothing Set oAccessApp = Nothing
Müßtest Du einmal testen. Ich habe ja damals mir das Office 2010 als 64 Bit Version installiert und damit die Automatisierungsfehler umgangen. Grüße Klaus
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
otm Mitglied Bauingenieur
Beiträge: 188 Registriert: 26.08.2009 MS Win 10 AutoCAD Civil 3D 2023.2.1 Update VBA Enabler 2019 MS Access Database Enginge X64 MSO 365 (64bit)
|
erstellt am: 09. Jul. 2017 07:58 <-- editieren / zitieren --> Unities abgeben:
|
KlaK Ehrenmitglied V.I.P. h.c. Dipl. Ing. Vermessung, CAD- und Netz-Admin
Beiträge: 2799 Registriert: 02.05.2006 AutoCAD LandDesktop R2 bis 2004 Civil 3D 2005 - 2022 Plateia, Canalis Visual Basic
|
erstellt am: 09. Jul. 2017 19:14 <-- editieren / zitieren --> Unities abgeben: Nur für otm
|