Hot News:

Unser Angebot:

  Foren auf CAD.de (alle Foren)
  AutoCAD VBA
  MS Access Abfrage

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte
Autor Thema:  MS Access Abfrage (2295 mal gelesen)
otm
Mitglied
Bauingenieur


Sehen Sie sich das Profil von otm an!   Senden Sie eine Private Message an otm  Schreiben Sie einen Gästebucheintrag für otm

Beiträge: 167
Registriert: 26.08.2009

MS Win 10
AutoCAD Civil 3D 2023
VBA Enabler 2023
MS Access Database Enginge X64
MSO 365 (64bit)

erstellt am: 26. Jun. 2017 13:09    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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



Sehen Sie sich das Profil von KlaK an!   Senden Sie eine Private Message an KlaK  Schreiben Sie einen Gästebucheintrag für KlaK

Beiträge: 2624
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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für otm 10 Unities + Antwort hilfreich

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


Sehen Sie sich das Profil von otm an!   Senden Sie eine Private Message an otm  Schreiben Sie einen Gästebucheintrag für otm

Beiträge: 167
Registriert: 26.08.2009

MS Win 10
AutoCAD Civil 3D 2023
VBA Enabler 2023
MS Access Database Enginge X64
MSO 365 (64bit)

erstellt am: 30. Jun. 2017 22:31    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities


C3D2013_VerweiseVBA.png


C3D2016_VerweiseVBA.png

 
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



Sehen Sie sich das Profil von KlaK an!   Senden Sie eine Private Message an KlaK  Schreiben Sie einen Gästebucheintrag für KlaK

Beiträge: 2624
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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für otm 10 Unities + Antwort hilfreich


20170704_Objektkatalog.jpg

 
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.Connection

Sub 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


Sehen Sie sich das Profil von otm an!   Senden Sie eine Private Message an otm  Schreiben Sie einen Gästebucheintrag für otm

Beiträge: 167
Registriert: 26.08.2009

MS Win 10
AutoCAD Civil 3D 2023
VBA Enabler 2023
MS Access Database Enginge X64
MSO 365 (64bit)

erstellt am: 04. Jul. 2017 15:32    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities


C3D2013-16_VerweiseVBA.png

 
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



Sehen Sie sich das Profil von KlaK an!   Senden Sie eine Private Message an KlaK  Schreiben Sie einen Gästebucheintrag für KlaK

Beiträge: 2624
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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für otm 10 Unities + Antwort hilfreich

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


Sehen Sie sich das Profil von otm an!   Senden Sie eine Private Message an otm  Schreiben Sie einen Gästebucheintrag für otm

Beiträge: 167
Registriert: 26.08.2009

MS Win 10
AutoCAD Civil 3D 2023
VBA Enabler 2023
MS Access Database Enginge X64
MSO 365 (64bit)

erstellt am: 09. Jul. 2017 07:58    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo Klaus,

ich hab das Problem gelöst.

Wenn man MSO deinstalliert, die MSO Database Enginge 20xx Reditributable 64bit installiert, dann MSO 20xx 32bit wieder installiert.
Dann geht es.

Hier der Link dazu.
https://forums.autodesk.com/t5/visual-basic-customization/vba-problems-between-autocad-2015-64-bit-and-access-2010-32-bit/td-p/5096876

Vielen Dank für's Mitdenken.

------------------
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



Sehen Sie sich das Profil von KlaK an!   Senden Sie eine Private Message an KlaK  Schreiben Sie einen Gästebucheintrag für KlaK

Beiträge: 2624
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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für otm 10 Unities + Antwort hilfreich

Hallo Christian,
Danke fürs mitteilen des Lösungsvorschlages auch wenn es eher unkonventionell ist

Grüße
Klaus 

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2023 CAD.de | Impressum | Datenschutz