Frage

Jetzt habe ich diese Frage gesehen in einem anderen Forum , aber es hat eine akzeptable Antwort nicht hatte.

Angenommen, ich habe zwei Tabellen, die Gruppen-Tabelle und die Elemente Tabelle. Die Tabellen haben keine definierten Beziehungen. Die Elemente Tabelle hat ein IdGroup Feld, das an die IdGroup (PK) Feld der Tabelle Gruppen bezieht.

Ich verwende die folgende Abfrage durch eine ADO-Re-Cord-Tabellen-Werte zu einem Datenraster zu füllen:

SELECT Elements.*, Groups.GroupName
FROM Elements
INNER JOIN Groups ON Elements.IdGroup = Groups.IdGroup

Von diesem Gitter Ich mag drücken, um Löschen ein Element zu löschen. Hier ist mein Problem. Als ich DAO verwendet, löschen Sie die DAO () Funktion nur den Datensatz in der Gruppe Elemente gelöscht. Dies war das erwartete Verhalten.

Wenn ich auf ADO geändert, die Delete () Funktion gelöschte Datensätze in beiden Tabellen, das Element Datensatz und die Gruppe, zu der das Element gehört!

Gibt es eine Möglichkeit, das DAO Verhalten in ADO zu reproduzieren, ohne Beziehungen in die Tabellen zu definieren, mit?

Hinweis: Ich weiß, es gibt Alternativen (ausführender querys DELETE könnte die Arbeit erledigen). Zeigen Sie mir doch einfach eine Möglichkeit, dies in ADO zu tun oder sagen, es kann nicht getan werden.

War es hilfreich?

Lösung

Rewrite Sie Abfrage an:

  • ersetzen die INNER JOIN mit einer WHERE-Klausel ein, bestehend VORHANDEN;
  • eine Unterabfrage in der SELECT-Klausel verwenden, um den Wert von Groups.GroupName zurückzukehren.

Beispiel:

SELECT Elements.*, 
       (
        SELECT Groups.GroupName
          FROM Groups 
         WHERE Elements.IdGroup = Groups.IdGroup
       )
  FROM Elements
 WHERE EXISTS (
               SELECT * 
                 FROM Groups 
                WHERE Elements.IdGroup = Groups.IdGroup
              );

ich getestet habe diese mithilfe von SQL Server 2008 mit einem Re-Cord-ADO gesetzt, wie die Datasource-Eigenschaft eines Microsoft OLEDB Datagrid Control (MSDATGRD.OCX), dann die Zeile über die gird Löschen (ich nehme an, Sie tun etwas ähnliches) und die Reihe ist in der Tat nur aus den Tabellenelementen gelöscht (dh die Zeile in Gruppen undeleted bleibt).

die überarbeitete Abfrage Hinweis eine negative Auswirkung auf die Leistung haben kann, wenn Zeilen abgerufen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top