PDA

Vollständige Version anzeigen : Listenfeld Datensatz löschen


Pascalx
06.07.2006, 09:23
Guten Morgen

habe momentan ein kleines Problem, ich möchte zb. per Button einen Datensatz aus einem Listenfeld löschen, der Datensatz-Lösch Button über den assistenten fragt mich zwar ob ich den angeklickten Datensatz des Listenfelds löschen möchte, allerdings bleibt dieser bei anklicken von Ja immer noch erhalten... Die Datensätze vom Listenfeld stehen bei mir in einer Tabelle... gibt es evntl ne Möglichkeit den angeklickten Datensatz im Listenfeld dann direkt in der Tabelle zu löschen?

Grüße Pascal

J_Eilers
06.07.2006, 09:29
Hi,

Ist der Datensatz wirklich noch in der Tabelle oder wird er vielleicht nur noch im Listenfeld angezeigt? Versuche mal folgenden Code

Dim strSQL As String

strSQL = "DELETE * FROM DeineTabelle WHERE ID = " & Me!Listenfeld
DBEngine(0)(0).Execute strSQL, dbFailOnError

Me!Listenfeld.Requery

Pascalx
06.07.2006, 09:41
Huhu, ja da steht zwar "wollen sie den Datensatz löschen" aber er steht danach noch im Listenfeld und in der Tabelle, auch nach aktualisierung.


mein Code bisher lautete:


On Error GoTo Err_Befehl434_Click


DoCmd.DoMenuItem acFormBar, acEditMenu, 8, , acMenuVer70
DoCmd.DoMenuItem acFormBar, acEditMenu, 6, , acMenuVer70

Exit_Befehl434_Click:
Exit Sub

Err_Befehl434_Click:
MsgBox Err.Description
Resume Exit_Befehl434_Click


Das der normale Code zum Datensatz löschen, der aber für Datensätze die in Listenfeldern stehen nicht zu klappen scheint

Pascalx
06.07.2006, 09:43
Achso


Private Sub cmdLöschen_Click()
Dim strSQL As String

strSQL = "DELETE * FROM Tabelle WHERE ID = " & Me!Listenfeld
DBEngine(0)(0).Execute strSQL, dbFailOnError

Me!Listenfeld.Requery

End Sub

klappt btw nicht

laut debuggmodus


1 parameter wurde erwartet, aber es wurden zu wenig parameter übergeben

J_Eilers
06.07.2006, 09:44
Der dürfte auch nicht funktionieren, da er IMHO für den Datensatz eines Formulars verwendet wird. Und von diesen Konstrukten rate ich dir eh ab. Versuche mal den geposteten Code aus. Du musst nur den Namen der Tabelle, des Feldes und des Listenfeldes gegen deine austauschen.

Pascalx
06.07.2006, 09:47
Huhu, wie gesagt

Private Sub cmdLöschen_Click()
Dim strSQL As String

strSQL = "DELETE * FROM Tabelle WHERE ID = " & Me!Listenfeld
DBEngine(0)(0).Execute strSQL, dbFailOnError

Me!Listenfeld.Requery

End Sub

klappt btw nicht

laut debuggmodus


1 parameter wurde erwartet, aber es wurden zu wenig parameter übergeben

habe natürlich bei Tabelle den namen meiner tabelle und bei den beiden Listenfeld den namen meines Listenfelds angegeben

Pascalx
06.07.2006, 09:48
Der Fehler wird btw in der Zeile

DBEngine(0)(0).Execute strSQL, dbFailOnError

angezeigt

:)

J_Eilers
06.07.2006, 09:54
Tausch das mal so:

strSQL = "DELETE * FROM Tabelle WHERE ID = '" & Me!Listenfeld & "'"
DBEngine(0)(0).Execute strSQL, dbFailOnError

Wenn das immer noch nicht funktioniert so:

strSQL = "DELETE * FROM Tabelle WHERE ID = " & Me!Listenfeld
Debug.Print strSQL
'DBEngine(0)(0).Execute strSQL, dbFailOnError

Einmal ausführen und STRG+G drücken und den String bitte aus dem Direktfenster mit etwas Beschreibung posten.

Pascalx
06.07.2006, 10:17
Also im Direktfenster steht
DELETE * FROM tblOperationen WHERE ID = 20

Der debuggmodus zeigt bei dem ersten quellcode wieder den fehler in der

DbEngine zeile und beim zweiten quellcode tút sich garnix :/

J_Eilers
06.07.2006, 10:24
Heißt dein Feld in der Tabelle denn auch tatsächlich ID? Denn irgendwie musst du den Datensatz ja identifizieren können.

Pascalx
06.07.2006, 10:43
Huhu, also meine forlaufende ID heisst OpNr, verstehe momentan selber nicht warum das nicht funktionieren will -.-

J_Eilers
06.07.2006, 10:46
strSQL = "DELETE * FROM tblOperationen WHERE OpNr = " & Me!Listenfeld
DBEngine(0)(0).Execute strSQL, dbFailOnError

Pascalx
06.07.2006, 10:47
Der nimmt ja auch schon die richtige Id also meine OpNr von dem Datensatz den ich löschen will war zb 20.... wenn ich einen andern Datensatz löschen will ändert der die ID auf die OpNr die gelöscht werden sollte.... aber löschen tut er dann nicht

Pascalx
06.07.2006, 10:50
Öhh nu geht´s, super, danke dir, find ich super das dir soviel Zeit genommen hast :o)

Fabz
01.07.2013, 11:10
Hi :)

Ich kram das mal wieder raus, weils einfach super Passt..


Wie kann man das mit mehreren Where Kriterien umbasteln?

Ich kenn mich mit Access leider null aus... Brauch ich da 5 Kombinationsfelder? (das wäre ungünstig..)

maikek
01.07.2013, 11:34
Moin,
du kannst mehrere Kriterien mit AND (oder OR) aneinanderhängen, die Frage ist, wo die Vergleichs-Werte dafür dann herkommen. Das können feste Werte sein wie Date (= heutiges Datum) oder Werte aus Formularfeldern.
Für eine detailliertere Antwort müsstest du also das hier noch etwas genauer beschreiben:
... mehreren Where Kriterien ...
Ansonsten kann die Antwort auf:
Brauch ich da 5 Kombinationsfelder?
nur lauten: Im Prinzip Jein ;) .

maike

Fabz
01.07.2013, 13:23
Naja das Problem ist, ich hab ein Kombinationsfeld, was aus der Datenbank selektiert, allerdings weiß ich nicht ganz genau, ob das Feld alle 5 Werte übergibt... wäre aber gut, weil sonst nicht eindeutig zu selektieren ist...

Man kann zwar schon anhand des MyId Feldes selektieren, allerdings wüsste ich nicht ob das nicht zu unsicher wäre..

maikek
01.07.2013, 14:21
Hallo? Wenn du das schon nicht weißt, woher bitte sollen wir das dann wissen? :rolleyes:
Wenn das MyID Feld der Primärschlüssel ist, dann ist das das sicherste überhaupt.
maike

Fabz
02.07.2013, 08:24
Hab mich wohl bissle falsch ausgedrückt..

Die MyId ist eine Art Primärschlüssel, aber eben für mehrere Einträge der selben Person..

Habe aber mittlerweile erfahren, dass das dann auch so passt ^^


Aber vielen Dank für deine Hilfe :)