Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Formular/Abfrage: Löschen nur aus einer Tabelle

11 views
Skip to first unread message

Tim Germer

unread,
Feb 9, 2010, 3:55:11 AM2/9/10
to
Hallo zusammen,

ich steh im Moment auf dem Schlauch... Ich habe zwei Tabellen: eine
mit Kundenstammdaten, Unique Key ist die Kundennummer. Die zweite
Tabelle enthält eine Kundenauswahl, auch hier ist der Unique Key die
Kundennummer (einziges Feld).

In einem Formular zur Pflege der Kunden in der Tabelle Kundenauswahl
ist als Datenquelle eine Abfrage aus beiden Tabellen, da Name, Adresse
etc. mit angezeigt werden sollen, die aus dem Kundenstamm gezogen
werden. Verkürztes SQL-Statement: "SELECT KdAuswahl.KdNr,
KdStamm.KdName1 FROM KdAuswahl LEFT JOIN KdStamm ON KdAuswahl.KdNr =
KdStamm.KNr;" Left Join, damit die Erfassung auch klappt, wenn der
Kundenstamm noch nicht aus dem Host-System upgedatet ist.
Soweit kein Problem.

Wenn ich jetzt in dem Formular einen Datensatz löschen will, wird
dieser in beiden Tabellen gelöscht. Wahrscheinlich, weil Access eine
1:1-Verbindung sieht. Wie kann ich dieses verhindern? Es soll nur der
Datensatz aus der Kundenauswahltabelle gelöscht werden, nicht jedoch
aus dem Kundenstamm.

Vielen Dank für jede Hilfe.

Tim

Access 2002, Win XP

Karl Donaubauer

unread,
Feb 9, 2010, 5:47:21 AM2/9/10
to
Tim Germer wrote:
> ich steh im Moment auf dem Schlauch... Ich habe zwei Tabellen: eine
> mit Kundenstammdaten, Unique Key ist die Kundennummer. Die zweite
> Tabelle enth�lt eine Kundenauswahl, auch hier ist der Unique Key die

> Kundennummer (einziges Feld).
>
> In einem Formular zur Pflege der Kunden in der Tabelle Kundenauswahl
> ist als Datenquelle eine Abfrage aus beiden Tabellen, da Name,
> Adresse etc. mit angezeigt werden sollen, die aus dem Kundenstamm
> gezogen werden. Verk�rztes SQL-Statement: "SELECT KdAuswahl.KdNr,

> KdStamm.KdName1 FROM KdAuswahl LEFT JOIN KdStamm ON KdAuswahl.KdNr =
> KdStamm.KNr;" Left Join, damit die Erfassung auch klappt, wenn der
> Kundenstamm noch nicht aus dem Host-System upgedatet ist.
> Soweit kein Problem.
>
> Wenn ich jetzt in dem Formular einen Datensatz l�schen will, wird
> dieser in beiden Tabellen gel�scht. Wahrscheinlich, weil Access eine

> 1:1-Verbindung sieht. Wie kann ich dieses verhindern? Es soll nur
> der Datensatz aus der Kundenauswahltabelle gel�scht werden, nicht
> jedoch aus dem Kundenstamm.
> ...

Du kannst dir z.B. eine L�schen-Schaltfl�che basteln, mit der du
gezielt den Datensatz aus der gew�nschten Tabelle l�scht. Code ca.

If MsgBox("M�chten Sie den Datensatz mit der KdNr " _
& Me!KdNr & " wirklich l�schen?", vbYesNo, "L�schen?") = vbYes Then

' falls DS in Arbeit, dann wegspeichern
If Me.Dirty = True Then Me.Dirty = False

CurrentDb.Execute _
"DELETE FROM KdAuswahl WHERE IDKdNr & Me!KdNr, dbFailOnError

End If

--
Servus
Karl
****************
Access-FAQ: http://www.donkarl.com /// http://www.donkarl.com?NEK
.NET-Entwickler-Konferenz f�r Accessler 27./28.2. + 20./21.3.2010

Tim Germer

unread,
Feb 9, 2010, 5:54:28 AM2/9/10
to
On 9 Feb., 11:47, "Karl Donaubauer" <NoS...@donkarl.com> wrote:
> Du kannst dir z.B. eine Löschen-Schaltfläche basteln, mit der du
> gezielt den Datensatz aus der gewünschten Tabelle löscht. Code ca.
>
> If MsgBox("Möchten Sie den Datensatz mit der KdNr " _
>   & Me!KdNr & " wirklich löschen?", vbYesNo, "Löschen?") = vbYes Then

>
>   ' falls DS in Arbeit, dann wegspeichern
>   If Me.Dirty = True Then Me.Dirty = False
>
>   CurrentDb.Execute _
>     "DELETE FROM KdAuswahl WHERE IDKdNr & Me!KdNr, dbFailOnError
>
> End If

Hallo Karl,

danke für die Antwort. Zwischenzeitlich habe ich es anders realisiert:
Ich habe in der Tabellendefinition der Kundenauswahl die
Mehrfachspeicherung der Kundennummer zugelassen. Damit habe ich eine
1:n-Beziehung, die dazu führt, dass nur noch auf der n-Seite gelöscht
wird. In dem Form prüfe ich dann mit

Me.RecordsetClone.FindFirst "KdNr='" & KdNr & "'"
If Not Me.RecordsetClone.NoMatch Then
MsgBox "Zu der Kundennummer " & KdNr & " gibt es bereits einen
Eintrag. Doppelte Einträge sind nicht möglich.", vbOKOnly +
vbExclamation, "Speicherung abgebrochen"
Cancel = True
End If

ob es die Kundennummer bereits gibt und breche die Speicherung
gegebenenfalls ab. Ich glaube, dass dieses für mich die bessere Lösung
ist, da bei einer Löschen-Schaltfläche noch nicht das Löschen mit DEL-
Taste bzw. Menü unterbunden ist.

Viele Grüße nach Wien

Tim

Thomas Möller

unread,
Feb 9, 2010, 12:10:40 PM2/9/10
to
Hallo Tim,

Am 09.02.2010 11:54, schrieb Tim Germer:
> ..., da bei einer L�schen-Schaltfl�che noch nicht das L�schen mit DEL-
> Taste bzw. Men� unterbunden ist.

das lie�e sich aber leicht bewerkstelligen:

Formular / Entwurfsansicht / Eigenschaften / Reiter "Daten" /
Eigenschaft "L�schen zulassen" / Nein

CU
--
Thomas

Homepage: www.Team-Moeller.de

0 new messages