Office: (Office 2010) Dlookup mit MAX

Helfe beim Thema Dlookup mit MAX in Microsoft Access Hilfe um das Problem gemeinsam zu lösen; Die verlinkte Tabelle ist eine hervorragende Ausgangsbasis. Die benötigten Daten per Abfrage herauslösen und an eine (oder mehrere) Zieltabelle(n)... Dieses Thema im Forum "Microsoft Access Hilfe" wurde erstellt von Gery, 31. Juli 2012.

  1. Dlookup mit MAX


    Die verlinkte Tabelle ist eine hervorragende Ausgangsbasis. Die benötigten Daten per Abfrage herauslösen und an eine (oder mehrere) Zieltabelle(n) anzufügen, heißt vorzugsweise SQL-Anweisungen zu benutzen und eher nicht eine Vielzahl von aufwändigen Recordsetoperationen auszuführen. Wenn Du eine funktionierende Lösung siehst, wirst Du in Erfahrung eigener Versuche beginnen, SQL zu lieben.

    Deine Bedingungen sind allerdings noch etwas unklar:
    - Gibt es ein höchstes Datum bezogen auf ein Material (hinterlegt in einer Tabelle) oder ist mit aktuellem Datum Heute ( Date() ) gemeint?
    - Status "C" konstant oder veränderlich?

    Wenn ich Date() und "C" als konstante Filter verwende, komme ich zu folgender Zwischenlösung:
    Code:
    Hier hat man aber schon bzgl. der weiteren Bedingungen einen Widerspruch. Bezogen auf Material 40002119 wäre das höchste "bearbeitet" der 18.01.2011 und die höchste Pos 4, diese Werte liegen allerdings in unterschiedlichen Datensätzen. Was nun?

    Bezüglich Einfügen in Zieltabelle: Von der müsste man auch eine Vorstellung haben!
     
  2. Richtig, war von mir ein Logischer Denkfehler.*rolleyes.gif*
    Daher sollte nur die Pos den höchsten Wert haben.
    Weiters hat die verknüpfte Tabelle ingesamt über 50 Spalten. So wie dein Code würde ich es gerne Aufbauen, aber irgend etwas fehlt damit nicht die ganze Tabelle berücksichtigt wird sondern auf das Material bezogen. Nur darf es vom jedem Material nur ein DS sein. Bei meinem Versuch gelinkt das nur bedingt. Wenn ich nur Spalten mit den bedinungen auslese gelingt das durch die Gruppierung nur bedingt, weil bei einer weiteren Abfrage um die restlichen daten zu erhalten von 370 DS gleich über 6000 DS ergeben.
    Der Grund liegt daran das die grösste Zahl von "Pos" von allen Daten der Tabelle ausgelesen wird und nicht des jeweiligen Materials.
    Code:
    Erstelle ich nun eine neue Abfrage mit meiner Abfrage und der Importtabelle mit einer Verknüpfungseigenschaft bekomme ich wie schon geschrieben statt 370 über 6000 DS raus.
    Code:
    Und die Haupttabelle enthält auch fast 40 Spalten, jedoch nur 1 DS je Material(Nummer) die eben mit der Abfrage aus dem Import anhand des Material verglichen wird.
    Ist Material nicht vorhanden wird das Material angerfügt. Ist Material vorhanden jedoch ein Unterschied bei "bearbeiten" oder "pos" then EDIT
    sonst keine Aktion.
    Ich finde jedoch keine Lösung um den Max Wert von Pos nur auf das Material zu beziehen und nicht auf die ganze Import Tabelle.
    Gruß Gerhard
     
    Zuletzt von einem Moderator bearbeitet: 7. Januar 2021
  3. Vielleicht so:
    Code:
    Nennen wir diese Abfrage qryAuswahl.
    Das löst man nun über zwei Aktionsabfragen (in dieser Reihenfolge):
    1) Vorhandene Datensätze editieren (Schlüssel ist Material)
    2) Nur neue Datensätze anfügen
    Code:
    FELDAUSWAHL müsste von Dir konkretisiert werden, da man schlecht 50 Felder schlecht in 40 Felder einfügen kann.
     
  4. Dlookup mit MAX

    Hallo Ebs17,
    leider sind wieder mehrere Materialien dabei.
    Ich habe dir jetzt mal eine Beispiel DB angehängt. Dabei habe ich die Spalten reduziert und die Zeilen. Du findest eine Abfrage "Deine_SQL_Abfrage" und zeigt dir das Ergebnis. Wie du siehst sind mehrere identische Materialien in der Abfrage, aber es sollte nur eine Materialnummer exestieren.
    Die zweite Abfrage heist "Gewünschte_DS" so sollte sie aussehen, aber sobald man weitere Spalten hinzufügt hat diese Abfrage auch wieder mehrere identische Material(Nummern) wie deine Abfrage.
    Ich hoffe das es doch eine einfache Lösung gibt und man nicht mit Schleifen arbeiten muss.
    Und Ebs17, danke nochmals für deine Gedult.
     
  5. Ich verarbeite hier nur Acc2000-lesbare DB's. Daher ist Deine Demo für mich unbrauchbar.

    Wenn in der Abfrage mehrere Datensätze mit gleichem Material auftreten, dann gibt es mehrere gleiche höchste Werte für Pos pro Material. Somit wäre bezogen auf Deine Daten die Bedingung Material und höchste Pos zu unscharf gewählt.
     
  6. Nein, die Pos kommt nur einmal vor.
    Habe die Datei nochmals im Access2000 Dateiformat angehängt.
    Gruß Gerhard
     
  7. Gelogen. Schau in Deine Tabelle und nimm ggf. eine Duplikatsabfrage (Erstellung per Assistent ist ganz einfach) zu Hilfe.
     
  8. Dlookup mit MAX

    *boah
    Sorry, bevor ich hier im Forum schrieb habe ich mich 14 Tage damit rumgeärgert, das die Abfragen mehrere Stunden dauerten und immer abgebrochen habe. Und bei deiner Feststellung von gestern habe ich den Faden verloren.
    Hier hat man aber schon bzgl. der weiteren Bedingungen einen Widerspruch. Bezogen auf Material 40002119 wäre das höchste "bearbeitet" der 18.01.2011 und die höchste Pos 4, diese Werte liegen allerdings in unterschiedlichen Datensätzen. Was nun?

    Und lies "bearbeitet" unter dem Tisch fallen, keine Ahnung auf welchen trip ich wahr obwohl bei Max "bearbeitet" (Datum) auch wenn mehrere identische Datum (bearbeitet) vorkommen nur eine max Pos vorkommen kann. Ich bin vom Weg abgekommen. Sorry, so gesehen war dein Code schon richtig, das er aber wie du schriebst die beiden MAX Werte in unterschiedlichen Zeilen sind wurden wieder 2DS angezeigt für das Material.
    Vielleicht ist das der Grund warum ich es mit so vielen Schleifen es auslesen versucht hatte. Denn ich habe den Code auf bearbeitet geändert und es kommen aber auch noch leere Felder des Status. Die dürften natürlich auch nicht sein, werden aber durch MAX wieder angezeigt.
    ich versuche das ganze wie eine Schleife zu erklären.
    Finde das erste Material und bilde eine Gruppe aus identischen Material.
    Aus der Gruppe Material finde alle Zeilen mit dem Status ="C"
    von den erhaltenen Zeilen suche nun die Zeile mit den MAX Datum von der Spalte "bearbeitet". Sollten mehere Zeilen mit den selben Datum vorhanden sein so suche die Zeile mit dem höchsten Pos Wert.

    Und so habe ich dann auch die Schleifen in VBA geschrieben und sicherlich umständlich.

    Ich habe es 4x durchgelesen bevor ich es sendete um nicht noch mal so eine Dummheit zu begehen.*wink.gif*

    Gruß Gerhard
     
    Zuletzt von einem Moderator bearbeitet: 7. Januar 2021
  9. Code:
    Hier ist nun im Vergleich zu obiger Abfrage in der Gruppierung "Pos" durch "bearbeitet" ersetzt worden, gleichfalls wird nochmals nach Status "C" gefiltert.

    Das ergibt nach vorhandenen Daten für 4 Materialien einen Datensatz, für Material 40002201 allerdings 5 Datensätze. Diese unterscheiden sich jedoch nicht im Feld "Pos", sondern in den Feldern "VBAK-Pos" bzw. "Änderung Position".

    Was ist nun relevant?
     
  10. Ich bin jetzt nochmals alle 58 Spalten durchgegangen und ich benötige noch die Spalte "VBAK-Pos". Somit müsste jetzt nur mehr 1 DS ergeben.
    Erklärung: Wie ich schon mal schrieb dürfte die "Pos" mit "C" nur einmal vorkommen, denn ich sah mir nochmals die Daten im SAP an. Jedoch benötigte ich auch andere Daten die in der Registerkarte des Materials nicht vorhanden waren und so hat man für mich im SAP eine Query angefertigt und durch die Verknüpfungen werden nun Daten mehrmals ausgeworfen. Für mich nicht Nachvollziehbar, aber ich kenne die verzweigte Struktur des SAP nicht. Vermutlich sind die daten der Registerkarten nicht anders auszulesen. Aber ich muss nun damit Leben. Und Dank deiner Hilfe rückt das Ziel näher.
    Gruß Gerhard
     
  11. OK, nehmen wir also bei mehrfachen Datensätzen den mit der höchsten "VBAK-Pos". Das könnte man mit einer erneuten Gruppierung hinbekommen, oder aber man nimmt die TOP 1-Werte bezogen auf Material wie folgt:

    Wenn man die letzte Abfrage mit U bezeichnet:
    Code:
    ... oder wenn man beide Abfragen zusammenkopiert (damit nur Tabellen und deren Felder verwendet werden und so keine Abhängigkeiten zu anderen Abfragen bestehen):
    Code:
    Trifft das Ergebnis Deine Vorstellungen?
     
  12. Das würde es treffen.
    Versuchsweise kopierte ich deine SQL in eine Abfrage. Beim Ausführen bekam ich einen Syntaxfehler. Ich fügte zum Schluß noch eine geschlossene Klammer hinzu. Danach startete die Abfrage, jedoch nach 20min. brach ich ab, da nur mehr die Sanduhr lief.

    beim test in VBA bekomme ich ebenfalls einen Syntaxfehler aber kann ihn nicht finden.
    Code:
     
  13. Dlookup mit MAX

    Moin,
    was mir auf den ersten Blick auffällt sind die fehlenden Leerzeichen bei Zeilenumbrüchen:
    Code:
    maike
     
  14. maikek danke, das waren die Syntaxfehler.*wink.gif*

    Nun meldet mir Access einen Error: "Eine Auswahlabfrage kann nicht durchgeführt werden".
     
  15. Per VBA .execute kannst du keine SELECTs ausführen, das ist richtig. Ich hab' jetzt nicht den ganzen Thread gelesen, was willst du denn erreichen? Ein UPDATE- oder INSERT-Statement würde funktionieren.
    maike
     
Thema:

Dlookup mit MAX

Die Seite wird geladen...
  1. Dlookup mit MAX - Similar Threads - Dlookup MAX

  2. DLookup (Datum) bei Datum-Zeit

    in Microsoft Access Hilfe
    DLookup (Datum) bei Datum-Zeit: Moin, wenn ich Datensätze mit Datum im Datumsformat per DLookup auslese, funktioniert alles. Wenn die Datensätze auch noch eine Uhrzeit beinhalten, werden sie ignoriert. Muss man in die Kriterien...
  3. Mit DLookUp einen Wert aus einer Abfrage auslesen

    in Microsoft Access Hilfe
    Mit DLookUp einen Wert aus einer Abfrage auslesen: Hallo Forum, ich möchte mit Hilfe der DLookUp-Funktion einen Wert aus einer Abfrage in meinem Formular in einem Textfeld angezeigt bekommen. Die Kriterien sollen sich hierbei dynamisch an der...
  4. Dlookup- Probleme

    in Microsoft Access Hilfe
    Dlookup- Probleme: Hallo zusammen, ich habe Probleme mit der Dlookup-Methode. Beim Start der DB wird die Personalnummer ausgelesen und im Startformular in das Feld [Benutzer] eingetragen. Nun möchte ich das div....
  5. Problem bei der DLookup Funktion

    in Microsoft Access Hilfe
    Problem bei der DLookup Funktion: Hallo, ich habe ein Problem mit der DLooup Funktion und ich komme einfach nicht auf die Lösung. Ich habe eine Form mit einem Edit-Feld und einem Button. Nun soll ich beim Klicken den Inhalt in...
  6. Syntax DLookUp / DomWert mit Kriterium

    in Microsoft Access Hilfe
    Syntax DLookUp / DomWert mit Kriterium: Hallo Forum, ich scheitere gerade kläglich an einer DomWert-Abfrage, bei der sich das Kriterium auf ein berechnetes Textfeld im Formular bezieht:...
  7. DLookup ersetzen

    in Microsoft Access Hilfe
    DLookup ersetzen: Hallo, ich würde gerne folgende Funktion in mein Projekt integrieren: Code: Function DLookup(Expression As String, Domain As String, Optional Criteria) As Variant Dim strSQL As String '...
  8. DLookup-Funktion

    in Microsoft Access Tutorials
    DLookup-Funktion: DLookup-Funktion Access für Microsoft 365 Access 2019 Access 2016 Access 2013 Access 2010 Access 2007 Mehr... Weniger...
  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