Office: Komplexes EXCEL VBA Datenbank Thema

Helfe beim Thema Komplexes EXCEL VBA Datenbank Thema in Microsoft Excel Hilfe um das Problem gemeinsam zu lösen; Hallo! Ich versuche mich schon seit Stunden an einem Komplexen Datenbankvergleich Ziel ist es, den Unterschied aus der Datenbank an ein Excel Blatt zu... Dieses Thema im Forum "Microsoft Excel Hilfe" wurde erstellt von andysmith, 22. September 2012.

  1. andysmith Erfahrener User

    Komplexes EXCEL VBA Datenbank Thema


    Hallo!

    Ich versuche mich schon seit Stunden an einem Komplexen Datenbankvergleich
    Ziel ist es, den Unterschied aus der Datenbank an ein Excel Blatt zu übermitteln nach Regelwerk.
    Beides geschieht über Excel VBA Datenbank Verbindungen und eigentlich sollte das passen...

    Ich versuche also aus dem Excel Blatt alles auszulesen was unter Steuerung mit TF gekennzeichnet ist
    Das Ergebnis versuche ich dann mit den gleichen Bedingungen mit der Access DB abzugleichen um dann daraus das Fehlende an die Excel Tabelle wieder zurückzuspielen.
    Hierbei vergleiche ich anhand der Primärkeys der sich aus zwei Spalten zusammensetzt.
    Irgendwie kommt hier aber maximal die Meldung das die AccessDB die Eingabetabelle ExcelDB nicht findet.
    Was denke ich hier falsch??
    Das Ergebnis aus der Excel DB ist vorhanden. Hier ist also nicht das Problem zu suchen.

    Code:
    Set objAdoConnection = CreateObject("ADODB.CONNECTION")        Set objLeftJoinAdoConnection = CreateObject("ADODB.CONNECTION")
            strAdoConnectString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & strMyDBPath & ";Jet OLEDB:Database Password=" & strMyDbPassword & ";"
            strLeftJoinAdoConnectString = "Provider=Microsoft.ACE.OLEDB.12.0; Extended Properties='Excel 12.0 Xml;HDR=YES';Data Source=" & strPfad
    
    
                        'late Binding aktivieren
                        objLeftJoinAdoConnection.Open strLeftJoinAdoConnectString
                        Set objLeftJoinAdoRecordset = CreateObject("ADODB.RECORDSET")
                    If objAdoConnection.Mode = 0 Then
                        objAdoConnection.Open strAdoConnectString
                    End If
    
    
    
    'finde Tabellen Namen des Einzel BlattsFor Each wshBlattname In wbkUmsatz.Worksheets
        If Left(LCase(wshBlattname.Name), 6) = LCase("einzel") Then
            strTabellenBlattName = wshBlattname.Name
        End If
    Next
    ' Ergebnis aus der Excel Tabelle
    strLeftJoinSQL = "SELECT * FROM [" & strTabellenBlattName & "$] As ExcelDB"
    strLeftJoinSQL = strLeftJoinSQL & " WHERE [ExcelDB].[Steuerung] = 'TF'"
    'auslesen aus DB
        Set objLeftJoinAdoRecordset = CreateObject("ADODB.RECORDSET")
        With objLeftJoinAdoRecordset
            .Source = strLeftJoinSQL
            .ActiveConnection = objLeftJoinAdoConnection
            .Open
        End With
    If Not objLeftJoinAdoRecordset.EOF Then
        
    'auslesen aus DB mit Left Join auf DB
    strSQL_Query = "select * from [TBL_Daten] As AccessDB" & _
    " LEFT Join [ExcelDB] ON ([AccessDB].[Auftragsnr] = [ExcelDB].[Auftragsnr.])" & _
    " And ([AccessDB].[Hauptpos] = [ExcelDB].[Hauptpos.])" & _
    " where [AccessDB].[Steuerung] = 'TF';"
        Set objAdoRecordset = CreateObject("ADODB.RECORDSET")
        With objAdoRecordset
            .Source = strSQL_Query
            .ActiveConnection = objAdoConnection
            .Open
        End With
    'wenn Recordset vorhanden dann Daten daraus einsetzen
    If Not objAdoRecordset.EOF Then
    Vielen Dank für die Hilfe!
     
    andysmith, 22. September 2012
    #1
  2. Exl121150 Erfahrener User
    Hallo!

    Das, was mir als erstes aufgefallen ist, ist der Umstand, dass man Instanzen von Objekten nur mit der Set-Zuweisung an Eigenschaften zuweisen darf (Zuweisung von Zeigern auf Objekte). Wie Du durch die Namen "objLeftJoinAdoConnection" und "objAdoConnection" angedeutet hast, handelt es sich hier jeweils Objekt-Instanzen. Daher müssen die beiden With-Blöcke folgendermaßen programmiert werden:
    Code:
        With objLeftJoinAdoRecordset
            .Source = strLeftJoinSQL
            [COLOR=#ff0000][B]Set[/B][/COLOR] .ActiveConnection = objLeftJoinAdoConnection
            .Open
        End With
    ....
        With objAdoRecordset
            .Source = strSQL_Query
            [COLOR=#ff0000][B]Set[/B][/COLOR] .ActiveConnection = objAdoConnection
            .Open
        End With
    
    Du erzeugst in der String-Variablen "strLeftJoinSQL" eine SQL-Abfrage auf ein Excel-Arbeitsblatt und verwendest innerhalb dieser Abfrage den Alias [ExcelDB].
    Weiter unten erzeugst Du in der String-Variablen "strSQL_Query" eine weitere SQL-Abfrage auf eine Access-DB mit Hilfe einer JOIN-Verknüpfung, in der Du den Alias der 1. Abfrage verwendest. Das geht leider so nicht, denn der Alias der 1. Abfrage ist SQL nur innerhalb 1. Abfrage bekannt und somit innerhalb der 2. Abfrage unbekannt.
    Um mit Abfragedefinitionen eine Art virtuelle Tabelle zu erzeugen (wie in DAO), deren Abfragename dann in weiteren Abfragen wie eine Tabelle im FROM-Abschnitt von SELECT verwendet werden kann, muss man ADO-Objekte in ADOX-Objekte einbinden.
    Code:
      Dim Cat As New ADOX.Catalog
      Dim Cmd As New ADODB.Command
      '....
      '....
      Cat.ActiveConnection = strLeftJoinAdoConnectString
      Cmd.CommandText = "SELECT * FROM [" & strTabellenBlattName & "$] As ExDB  WHERE [ExDB].[Steuerung] = 'TF';"
      Cmd.CommandType = adCmdText
      Cat.Views.Append "[COLOR=#ff0000]ExcelDB[/COLOR]", Cmd
      '...
    
    Dann kann man in einer weiteren Abfrage mit Hilfe eines JOINs darauf zugreifen ...

    Zum Schluss noch eine generelle Bemerkung:
    Du hast offensichtlich mit der sogenanten "Late-Binding"-Methode (über CreateObject...) programmiert. Das ist eine sehr unpraktische Methode. Man verliert dadurch sämlichen Programmierkomfort, der von VBA eigentlich zur Verfügung gestellt wird beim Programmieren mit "Early-Binding".
    Wie Du siehst, habe ich die ADOX/ADODB-Objekte mit Early-Binding erstellt. Damit dies funktioniert, muss man nur im "Menü" des VBA-Editors über Tabulator "Extras" auf "Verweise..." klicken und dann unter "Verfügbare Verweise" die Objektbibliotheken "Microsoft ADO Ext. .." (=ADOX) und "Microsoft ActiveX Data Objects 2.8 Library" (=ADODB) anhaken.
    Dann bekommt man während des Programmierens automatische Unterstützung zum verwendeten Objektsystem.
    Erst wenn man sicher ist, dass wirklich alles funktioniert, kann man, falls es nötig sein sollte, den Source-Code auf "Late-Binding" umstellen.
     
    Exl121150, 23. September 2012
    #2
Thema:

Komplexes EXCEL VBA Datenbank Thema

Die Seite wird geladen...
  1. Komplexes EXCEL VBA Datenbank Thema - Similar Threads - Komplexes EXCEL VBA

  2. Excel Liniendiagramm erstellen

    in Microsoft Excel Hilfe
    Excel Liniendiagramm erstellen: Guten Tag, ich benötige Hilfe mit einer Excel Tabelle. Hierbei habe ich eine Tabelle in der ich in 4 Spalten die Verkäufe aufgelistet habe. Dabei zeigt Spalte 1 das Datums des verkaufs an, Spalte...
  3. Komplexes Makro ohne Ahnung :-/

    in Microsoft Excel Hilfe
    Komplexes Makro ohne Ahnung :-/: Hallo Ihr Lieben, ich brauche ganz dringend Hilfe. Ich bin zwar mit Formeln in Excel ganz gut aufgestellt, aber mit Makros leider nicht. Ich muss für meine Eltern und mich viele Versicherungen und...
  4. Komplexe Tabelle analysieren

    in Microsoft Excel Hilfe
    Komplexe Tabelle analysieren: Hallo, ich habe hier einen recht komplexen Datenexport als CSV, den ich gerne mit Excel analysieren würde. Ich bin kein Excel-Anfänger mehr, habe mit Pivot-Tabellen aber bisher nur sehr...
  5. Komplexere Formeln in Excel 2013

    in Microsoft Excel Tutorials
    Komplexere Formeln in Excel 2013: https://eus-streaming-video-rt-microsoft-com.akamaized.net/e60a0fd7-7c67-4636-a13e-2b4e5846b558/530a059b-e9b2-4f0c-8ab2-e2889e68_3400.mp4 Übersicht...
  6. komplexe Ordnerstrukturen via Excel VBA anlegen

    in Microsoft Excel Hilfe
    komplexe Ordnerstrukturen via Excel VBA anlegen: Hallo zusammen, (sorry falls ich hier einen doppelten Post aufmache, aber schätze ich war in dem anderen Forum an der falschen Adresse, da VBa und kein Excel VBA) Jetzt zum Thema Ich würde gerne...
  7. Angebotserstellung über Dropdown aus komplexer Liste

    in Microsoft Excel Hilfe
    Angebotserstellung über Dropdown aus komplexer Liste: Hallo zusammen, ich habe Google schonmal etwas bemüht aber nichts gefunden was 100%ig passt oder was sich zusammenbasteln lässt. Ich bin in Excel aber auch noch recht unerfahren....
  8. Komplexe Excel-Abfrage

    in Microsoft Excel Hilfe
    Komplexe Excel-Abfrage: Hallo Leute, ich arbeite in letzter Zeit viel mit Excel und stoße immer wieder an meine Grenzen. Deswegen muss ich hier nach Hilfe suchen. Ich habe folgendes Problem: Im ersten...
  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Auf dieser Website werden Cookies für die Zugriffsanalyse und Anzeigenmessung verwendet.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden