none
Acc-XP, Lösch-Abfrage aus einer 1:1 Abfrage

    Frage

  • Hallo liebe NG'ler,

    ich möchte aus einer 1:1 Abfrage bestimmte Daten löschen.

    Beim Ausführen der Abfrage kommt aber die Meldung:

    • Löschen aus angegebener Tabelle nicht möglich
    Die Abfrage sieht wie folgt aus:

    Feld:          |tblZUNEU.*        | PEN_ABT

    Tabelle:    | tblZUNEU            | Penstamm

    Löschen:  |   Von                    | Bedingung

    Kriterien   |                              | Ist Null oder " "

    Ich möchte aus [tblZUNEU] den Datensatz löschen, wenn in der Tabelle [Penstamm] das Feld [PEN_ABT] leer ist.

    Die beiden Tabellen sind über ein gemeinsames Feld [MITGL_NR] 1:1 veknüpft

     

    Noch als Hinweis, auf beide Tabellen kann ich einzeln zugreifen und auch löschen aus den einzelnen Tabellen ist möglich.

    Ich bedanke mich schon für Antwort(en) und wünsche noch ein schönes Wochenende

    Richard

    Samstag, 23. Oktober 2010 14:09

Antworten

  • Hallo Olaf,

    jetzt muss ich mich doch nochmal melden, denn ich habe herausgefunden, durch einfügen von DISTINCTROW mit Eindeutige Datensätze: Ja funktioniert auch meine ganz oben angegebene Löschabfrage.

    Noch eine gute Zeit

    Richard

     

     

    Samstag, 23. Oktober 2010 18:44

Alle Antworten

  • Hi Richard,

    wechsle mal zur SQL-Ansicht Deiner Abfrage und füge folgendes SQL ein:

    DELETE tblZUNEU.MITGL_NR
    FROM tblZUNEU
    WHERE tblZUNEU.MITGL_NR In (SELECT Penstamm.MITGL_NR FROM Penstamm WHERE Penstamm.PEN_ABT IS NULL OR Penstamm.PEN_ABT = " ");
    
    
    BTW - Du prüfst dabei (zus. zu IS NULL ) nicht auf Leerstrings sondern vielmehr auf ein einzelnes Leerzeichen.


    Cheers,
    Olaf
    http://blogs.intuidev.com
    Samstag, 23. Oktober 2010 14:31
  • Hallo Olaf,

    besten Dank für die schnelle Antwort, super, es funktioniert.

    Was ich aber nicht verstehe, meine Lösung ist genau so, wie es in der Acc-Hilfe beschrieben ist und trotzdem geht es nicht

    Nochmals besten Dank

    Richard

     

     

    Samstag, 23. Oktober 2010 14:44
  • Hi Richard,

    anders als z.B. SQL Server unterstützt Jet/Access die FROM/FROM-Notation (DELETE FROM tbl FROM tbl INNER JOIN ...) in Löschabfragen nicht. Es mag tatsächlich sein, dass man die Löschabfrage auch unter Access mit einem JOIN direkt in der FROM-clause hinbekommt, aber ich hab's schon vor vielen Jahre aufgegeben und mache das dann per sub-SELECT wie gezeigt ... :-P

    Der Access-Designer (ich benutze das Ding kaum) ist für Löschabfragen ohnehin unbrauchbar; wenn Du Deine urspr. Abfrage mal in der SQL-Ansicht anschaust, wirst Du sehen, dass - obwohl Du nur eine Tabelle für die Löschaktion ausgewählt hast - beide Tabellen im DELETE zu sehen sind, ergo solltest Du grundsätzlich den produzierten SQL prüfen.


    Cheers,
    Olaf
    http://blogs.intuidev.com
    Samstag, 23. Oktober 2010 14:51
  • Hallo Olaf,

    erneut Danke, jetzt habe ich auch das verstanden.

    Noch ein schönes Wochenende

    Richard

     

    Samstag, 23. Oktober 2010 15:06
  • Hallo Olaf,

    jetzt muss ich mich doch nochmal melden, denn ich habe herausgefunden, durch einfügen von DISTINCTROW mit Eindeutige Datensätze: Ja funktioniert auch meine ganz oben angegebene Löschabfrage.

    Noch eine gute Zeit

    Richard

     

     

    Samstag, 23. Oktober 2010 18:44
  • Hi Richard,

    tja, da bin ich tatsächlich platt - das war mir nicht bekannt. :-)
    Ich hab's aber mal nachgeschlagen - der Grund hierfür ist der Umstand, dass das verwendete JOIN-Feld bei Dir nicht der PrimaryKey ist, daher benötigt JET DISTINCTROW, um die eindeutige Beziehung zwischen den beiden Tabellen zu erkennen. Hört sich für mich nach einer echten Krücke an, denn von der Syntax her ist das nicht wirklich intuitiv.

    Ich arbeite zwar seit vielen Jahren mit Access, aber die Gelegenheiten, zu denen ich DISTINCT/DISTINCTROW benutzt habe, könnte ich sicherlich an max. 5 Fingern abzählen. Vielleicht bin ich zu sehr ANSI-SQL fixiert ..?

     

     


    Cheers,
    Olaf
    http://blogs.intuidev.com
    Montag, 25. Oktober 2010 09:07