Connectionstring für MS ACCESS *.accdb Datenbank

  • Hallo Spezialisten,

    ich versuche via Autoit eine MS Access DB zu öffnen um darin eine Tabelle auszulesen und in eine Spalte etwas zu hinein zuschreiben.

    Leider scheitere ich am Connection String:

    Code
    # den codeschnipsel habe ich aus der Access.au3 UDF-Beschreibung entlehnt: #
    
        $adoCon = ObjCreate("ADODB.Connection")
        $adoCon.open("Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" & $_datenbankpfad & ";")
        $adoRs = ObjCreate("ADODB.Recordset")
        $adoRs.CursorType = 1
        $adoRs.LockType = 3
        $adoRs.Open($_sql, $adoCon)

    Ich habe diverse Strings von der Website https://www.connectionstrings.com/microsoft-acce…db-odbc-driver/ versucht und scheitere bei allen
    mit dem Fehler Error: The Requested action with this object has failed.;(

    Kann mir jemand den korrekten Connection String sagen, für eine MS-Access DB aus Office Professional Plus 2016 und ob ein spezieller odbc-treiber notwendig ist...

  • Kann mir jemand den korrekten Connection String sagen, für eine MS-Access DB aus Office Professional Plus 2016 und ob ein spezieller odbc-treiber notwendig ist...

    Leider nicht, da mir u.a. die entsprechende Testumgebung fehlt.

    Man findet aber diverse Infos per Google, die eventuell weiterhelfen könnten, z.B. :

    https://docs.microsoft.com/en-us/answers/…-ist-nicht.html

    Hast Du Dir mal folgendes angeschaut ? : adoau3-udf

    86598-musashi-c64-png

    "Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."

  • Hallo Musashi,

    danke für die Info.

    Also das Problem beim Zugriff auf MS-Access ist die Architektur!

    Der String:

    Code
        $adoCon = ObjCreate("ADODB.Connection")
        $adoCon.open("Driver=Microsoft Access Driver (*.mdb, *.accdb); DBQ=" & $sdatenbankpfad)
        $adoRs = ObjCreate("ADODB.Recordset")

    funktioniert. Man muss das Script/Proggi nur als 32bit-Anwendung laufen lassen, da default nur 32bit-ODBC-Treiber installiert sind.

    Das Auslesen eines Feldes(Spalte) oder der ganzen Tabelle bekomme ich dank der Beispiele hin aber hat jemand einen Tipp wie ich einen Datensatz aus der Tabelle auslese?

    Mit den SQL-Befehlen kenne ich mich nur ungenügend aus....

  • ... hat jemand einen Tipp wie ich einen Datensatz aus der Tabelle auslese?

    Mit den SQL-Befehlen kenne ich mich nur ungenügend aus....

    Das Auslesen erfolgt i.a. über SELECT ... FROM ... WHERE ..., siehe z.B. https://tinohempel.de/info/info/datenbank/sql.htm

    Soweit bist Du sicher auch bereits gekommen ;) (SQL Tutorials mit tausenden von Beispielen findet man übrigens wie Sand am Meer). Da ich Deine Tabellen- und Feldnamen nicht kenne, hier ein Beispiel :

    SELECT * FROM Kunden WHERE Kundennummer = 'K1000'

    Liefert alle Datenfelder des Kunden 'K1000' aus der Tabelle Kunden.

    86598-musashi-c64-png

    "Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."

  • Hallo Musashi,

    danke für die Tipps :thumbup:

    Ich teste jetzt schon eine Weile herum aber i-wie bekomme ich das nicht hin.

    ausgehend von dem im Anhang befindlichen Code habe ich das Problem, dass ich bei Änderung des SQL-Befehls von

    Global $sQuery = "Select * From " & $sTableName in Global $sQuery = "Select * From " & $sTableName & " WHERE fld1 = " & $sVar
    eine Fehlermeldung bei der Ausführung des Befehls $oRecordSet.Open($sQuery, $oConnection) erhalte. ( by the Way: Die Variable $sVar enthält den String 8)

    D.H. frage ich die Tabelle ab funktioniert alles bestens aber sowie ich in irgendeiner Weise(gemäß den Beispielen von timohempel.de) die SQL-Sequenz ändere
    bekomme ich den Fehler "Error: The requested action with this object has failed".

    Hast du(oder jemand anderes) dazu eine Idee?

  • ARRRRRRRRRRRGGGGGHHHHHHH, DAS DARF NICHT WAR SEIN :cursing::cursing::cursing::cursing:

    Lösung gefunden: die Variable $sVar MUSS in einzelne Hochkommas eingeschlosssen werden :Face::Face::Face::Face:

    Global $sQuery = "Select * From " & $sTableName & " WHERE Seriennummer = " & "'" & $sVar & "'"

  • Andere Frage: Wenn die Tabelle oder der Datensatz abgefragt wird, dann stehen im _Arraydisplay Befehl nicht die Feldnamen der Datenbank sondern
    Platzhalter wie Col0, Col1, etc. Muss ich für die Anzeige der richtigen Feldnamen die SQL-Sequenz anpassen oder geht das womöglich gar nicht?

  • Wenn die Tabelle oder der Datensatz abgefragt wird, dann stehen im _Arraydisplay Befehl nicht die Feldnamen der Datenbank sondern Platzhalter wie Col0, Col1, etc.

    Diese 'Platzhalter' sind die Defaultwerte für die Spaltenüberschriften im Header der Arrayanzeige.

    Sie stehen in keiner Verbindung zum RecordSet der SQL-Abfrage.

    Du musst sie entweder von Hand setzen, oder sie aus dem RecordSet bilden.

    Beispiel (auf Basis deines Skriptes und DB) :

    86598-musashi-c64-png

    "Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."

  • hipfzwirgel 8. Juni 2021 um 14:06

    Hat das Label [ gelöst ] hinzugefügt.