Announcement

Collapse
No announcement yet.

Löschen einer ganzen Tabellenzeile

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • #16
    nein nein,

    ich möchte sowie vorher auswerten, wenn er einen eintrag in der tabelle2(e_key) findet wie den aktuellen Datensatz (tabelle1, e_key)

    dann möchte ich eine Meldung ausgeben
    also das mit dem count (zähler) find ich eine gute Idee nur müßt ich das irgendwie umsetzen können

    Comment


    • #17
      <p>Hallo Bine,<br>
      <br>
      <pre>
      SELECT COUNT(t1.e_key)
      FROM "..\Tabelle1" t1
      "..\Tabelle2" t2
      WHERE t1.e_key=t2.e_key
      </pre>
      <br>
      Gruß Thomas</p&gt

      Comment


      • #18
        <p>Hallo Bine,<br>
        <br>
        ich glaube mein letztes Beispiel dürfte so nicht gehen. Ich habe es nicht getestet, da ich kein vergleichbares Beispiel habe.<br>
        Ich lasse mir bis Morgen etwas einfallen.<br>
        <br>
        Gruß Thomas</p&gt

        Comment


        • #19
          Stimmt ich bekomme einen "Syntaxfehler in der FROM Klausel".

          Wäre wirklich lieb von dir wenn du mir helfen könntest:-)

          BIN

          Comment


          • #20
            <p>Hallo Bine,<br>
            <br>
            wie versprochen, die Lösung für Dein Problem:<br>
            <br>
            <pre>
            SELECT MASTER.e_key, Count(DETAIL.e_key) AS Anzahl
            FROM
            "..\mastertabelle" MASTER
            INNER JOIN
            "..\detailtabelle" DETAIL
            ON
            MASTER.e_key=DETAIL.e_key
            GROUP BY
            MASTER.e_key
            </pre>
            <br>
            Gruß Thomas</p&gt

            Comment


            • #21
              Danke, aber irgendwas stimmt bei der Auswertung nicht:
              ER schreibt mir immer die Meldung!
              <pre>
              if not (deleteQuery.fields[0].asinteger = 0) then
              begin
              MessageDlg ('Sie können Ihn nicht löschen.'+#13#10+'Er wird verwendet!',mtinformation, [mbok],0);
              end;
              </pre>

              Ich weiß nicht warum aber die Überprüfung stimmt immer zu und deswegen schreibt er immer diese Meldung

              Comment


              • #22
                <pre>
                deleteQuery.close;
                deleteQuery.Sql.Clear;
                deleteQuery.Sql.Add('SELECT MASTER.e_key, Count(DETAIL.e_key) AS Anzahl FROM tabelle1 MASTER INNER JOIN tabelle2 DETAIL ON MASTER.e_key=DETAIL.e_key GROUP BY MASTER.e_key');
                deleteQuery.open;
                if (deleteQuery.fields[0].asinteger = 0) then
                begin ... end
                else
                begin
                MessageDlg ('Sie können ihn nicht löschen.'+#13#10+'Er wird verwendet!',
                mtinformation, [mbok],0);
                end;
                </pre>
                Ich weiß nicht warum aber die Überprüfung stimmt immer zu und deswegen schreibt er immer diese Meldung.
                'Sie können ihn nicht löschen. Er wird verwendet!

                Comment


                • #23
                  <p>Hallo Bine,<br>
                  <br>
                  eine Löschabfrage darf keine Aggegratfunktionen wie "COUNT", "MAX", usw. beeinhalten.<br>
                  <br>
                  Folgend ein Ausschnitt aus der Hilfe zu "Local-SQL"<br>
                  <br>
                  <pre>
                  Einzeltabellenabfragen

                  Abfragen, die Daten aus einer einzelnen Tabelle abrufen, sind aktualisierbar, vorausgesetzt:

                  Das Schlüsselwort DISTINCT ist nicht im SELECT enthalten.
                  Alles in der SELECT-Klausel ist eine einfache Spaltenreferenz oder eine berechnete Spalte, es ist keine Aggregation erlaubt. Berechnete Spalten bleiben schreibgeschützt.
                  Die in der FROM-Klausel referenzierte Tabelle ist eine aktualisierbare Basistabelle.
                  Es ist keine GROUP BY- oder HAVING-Klausel vorhanden.
                  In der Anweisung sind keine Unterabfragen vorhanden.

                  Keine ORDER BY-Klausel ist vorhanden.

                  Der Schreibschutzeffekt einer ORDER BY-Klausel wird negiert und die Abfrage aktualisierbar, falls die ORDER BY-Klausel eine einzelne Spalte verwendet und ein dBASE-Einzelspalten-Primär- oder Sekundärindex vorhanden ist, der auf demselben Feld basiert. dBASE-Compound- (Ausdrucks-) Indizes negieren nicht den Schreibschutzeffekt einer ORDER BY-Klausel. Ein Paradox-Einzel- oder Mehrfachfeld- Primärindex macht die Abfrage aktualisierbar, falls ORDER BY exakt die gleichen Spalten (in der gleichen Reihenfolge) verwendet wie der Index. Paradox-Sekundärindizes negieren nicht den Schreibschutzeffekt einer ORDER BY-Klausel.

                  Mehrtabellenabfragen

                  Alle Abfragen, die zwei oder mehr Tabellen verbinden, erzeugen eine schreibgeschützte Ergebnismenge.

                  Berechnete Felder

                  Bei aktualisierbaren Abfragen mit berechneten Feldern identifiziert eine zusätzliche Feldeigenschaft ein Ergebnisfeld als schreibgeschützt und berechnet. Jeder Aufruf der BDE-Funktion DbiPutField verursacht eine Neuberechnung etwaiger abhängiger Felder.
                  </pre>
                  <br>
                  Gruß Thomas</p&gt

                  Comment


                  • #24
                    Nein nein ich mache ja keine Löschabfrage in diesem Sinne ich frage

                    nur nach (zähle!) ob eine Verknüpfung besteht und wenn der Wert 0 ist

                    dann lösche ich ihn (ohne SQL anweisung).

                    Das sollte doch funktionieren oder??

                    Comment


                    • #25
                      <p>Hallo Bine,<br>
                      <br>
                      wenn Du Dir die Ergenismenge einmal anschausst, wirst Du feststellen, dass es dort keinen Datensatz mit Anzahl=0 gibt. Dazu muss die Abfrage noch ein klein wenig geändert werden:<br>
                      <pre>
                      SELECT MASTER.e_key, Count(DETAIL.e_key) AS Anzahl
                      FROM
                      "..\mastertabelle" MASTER
                      LEFT JOIN // ---> hier wurde geändert
                      "..\detailtabelle" DETAIL
                      ON
                      MASTER.e_key=DETAIL.e_key
                      GROUP BY
                      MASTER.e_key
                      </pre>
                      <br>
                      Außerdem machst Du bei<br>
                      <pre>if (deleteQuery.fields[0].asinteger=0) then</pre><br>
                      (glaube ich) einen Denkfehler??<br>
                      <br>
                      Der für Dich relavante Wert steht doch im 2. Feld. Oder?<br>
                      Also müßte Deine Abfrage so lauten:<br>
                      <pre>if (deleteQuery.fields[1].asinteger=0) then</pre><br>
                      oder so<br>
                      <pre>if (deleteQuery.FieldByName('Anzahl').AsInteger=0) then</pre><br>
                      <br>
                      Gruß Thomas</p&gt

                      Comment


                      • #26
                        <p>Hallo Bine,<br>
                        <br>
                        wenn Du Dir die Ergebnismenge einmal anschausst, wirst Du feststellen, dass es dort keinen Datensatz mit <b>Anzahl=0</b> gibt. Dazu muss die Abfrage noch ein klein wenig geändert werden:<br>
                        <pre>
                        SELECT MASTER.e_key, Count(DETAIL.e_key) AS Anzahl
                        FROM
                        "..\mastertabelle" MASTER
                        LEFT JOIN // ---> hier wurde geändert
                        "..\detailtabelle" DETAIL
                        ON
                        MASTER.e_key=DETAIL.e_key
                        GROUP BY
                        MASTER.e_key
                        </pre>
                        Außerdem machst Du bei<br>
                        <pre>if (deleteQuery.fields[0].asinteger=0) then</pre>
                        (glaube ich) einen Denkfehler??<br>
                        <br>
                        Der für Dich relavante Wert steht doch im 2. Feld. Oder?<br>
                        Also müßte Deine Abfrage so lauten:<br>
                        <pre>if (deleteQuery.fields[1].asinteger=0) then</pre>
                        oder so<br>
                        <pre>if (deleteQuery.FieldByName('Anzahl').AsInteger=0) then</pre><br>
                        <br>
                        Gruß Thomas</p&gt

                        Comment


                        • #27
                          Hi Thomas!!

                          Also ich schätze das jetzt alles paßt nur mit der Abfrage

                          <pre>if (deleteQuery.fields[1].asinteger=0) then... </pre>

                          komme ich irgendwie noch nicht zurecht,..

                          also welcher wert steht in der eckigen klammer

                          Comment


                          • #28
                            <p>Hallo Bine,<br>
                            <br>
                            Die Abfrage liefert 2 Spalten zurück: e_key und Anzahl. Die Eigenschaft Fields repräsentiert (vereinfacht gesagt) diese Spalten. Wie üblich, beginnt die Zählung der Spalten bei 0. Die Reihenfolge der Spalten ist analog der SELECT-Anweisung.<br>
                            Dies bedeutet, um die Anzahl abzufragen, musst Du die 2. Spalte auswerten, da aber die Zählung mit 0 beginnt, ist der Spalten-Index 1.
                            <br>
                            deleteQuery.fields[0] entspricht "e_key"<br>
                            deleteQuery.fields[1] entspricht "Anzahl"<br>
                            <br>
                            Gruß Thomas</p&gt

                            Comment


                            • #29
                              Auf welche Tabelle ist das bezogen? Auf die Master oder auf die Detailtabelle??

                              KAnn ich in Access irgendwie mit der TAbelle sowas machen?

                              (Löschschutz solange man die Verknüpfung nicht löscht!) Ist sowas möglich?? Ist glaube ich besser

                              Comment


                              • #30
                                Auf welche Tabelle ist das bezogen? Auf die Master oder auf die Detailtabelle??

                                Kann ich in Access irgendwie mit der TAbelle (referenzielle Integrität) sowas machen?

                                (Löschschutz solange man die Verknüpfung nicht löscht!) Ist sowas möglich?? Ist glaube ich besser

                                Comment

                                Working...
                                X