PDA

Vollständige Version anzeigen : Markierten Datensatz Löschen ???


lordelox
24.09.2003, 08:34
Hallo Leute,

ich habe ein Problem. Ich bastel hier an einer Access-Datenbank und es will nicht so wie ich will.
Ich habe in einem Unterformular ein Listenfeld in dem Datensätze aus einer Tabelle angezeigt werden. Nun will ich aus diesem Listenfeld einen Datensatz makrieren und dann per Button löschen, aber es will nicht.

Habe schon nahezu alle Beiträge zu dem Thema durchsucht und alle Vorschläge ausprobiert ohne Erfolg.

Wenn möglich helft mir mal weiter.

Ciao und Danke.

Gast
24.09.2003, 09:02
Hi,

ich habe es gerade mal ausprobiert. In dem Listenfeld sollte natürlich der Primärschlüssel des zu löschenden Datensatzes gebunden sein.

Ich hab dann eine Löschabfrage erstellt. Einfach den Primärschlüssel in den Abfrageentwurfsbereich setzen und als Bedingung das Listenfeld im Formular angeben.

Ein Makro öffnet dann diese Abfrage und aktualisiert anschließen das Listenfeld (Aktion "AktualisierenDaten").
Das Makro kannst Du ja dann sowohl über einen Button, als auch z.B. per Doppelclick auf das Listenfeld ausführen.

Sollte funktionieren.

Viel Erfolg.

Daniel

JR²
24.09.2003, 09:03
Hi, lordelox,

gib bitte immer die Version von Access an, die Du verwendest.


Mindestvoraussetzung für Deinen Punkt: Der Schlüssel der angezeigten Tabelle muß mit in dem Feld sein. Falls er nicht angezeigt werden soll, z.B. weil er ein Autowert ist, kannst Du ja die Spaltenbreite auf 0 stellen.

Gruß,
JR²

Johnny Loser
24.09.2003, 09:12
Ich setze jetzt mal voraus, daß die ID sich in der gebundenen Spalte befindet.

CurrentDb.Execute("DELETE FROM Tabelle WHERE ID = " & Listenfeld)
Listenfeld.Requery
Befindet sich die ID in einer nicht gebundenen Spalte:

CurrentDb.Execute("DELETE FROM Tabelle WHERE ID = " & Listenfeld.Column(0)) '0 = 1. Spalte
Listenfeld.Requery
Wenn Du eine Mehrfachauswahl hast, dann hilft Dir vielleicht dieser Thread weiter: http://www.ms-office-forum.net/forum/showthread.php?s=&threadid=103201

lordelox
24.09.2003, 09:12
Hallo erstmal,
danke für eure schneller Antworten.
Version:
MS Access 2000 (9.0.4402 SR-1)

Löschen per Makro noch nicht drüber nachgedacht, Lieber wäre mir VBA.
Und was ist ein "Abfrageentwurfsbereich".

Ciao

lordelox
24.09.2003, 09:16
An Johnny Looser so in etwa hatte ich die Sache auch schon das Problem ist aber genau das "".
Wie spreche ich den selektierten Datensatz an?
thx

Johnny Loser
24.09.2003, 09:34
...das Problem ist aber genau das "".
Was ist das Problem?

Kopiere doch einfach mal den Code, den ich Dir geschrieben habe, ersetze Tabelle durch Deinen Tabellennamen und Listefeld durch den Namen Deines Listenfeldes.

Listenfeld[.Value] gibt Dir den Wert der gebundenen Spalte des gewählten Eintrags zurück.
Listenfeld.Column(0) gibt Dir den Wert der 1. Spalte des gewählten Datensatzes zurück.

Diesen Wert wird als Kriterium für das DELETE-Statement übergeben, worauf der Datensatz gelöscht wird.
Anschließend wird mit Requery das Listenfeld aktualisiert.

lordelox
24.09.2003, 09:53
Vielen Dank.

Es funzt nach geringfügiger Korrektur.
Das Semikolon hat noch gefehlt :D

Da zerbricht man sich n halben Tag lang den Kopf und dann sind es 2 lächerlich Zeilen.

That's life !!!

[EC] Firestarter
24.09.2003, 18:09
hi,

ich hatte genau das gleiche problem, habe den oben genannten code verwendet, jetzt bekomme ich allerdings beim klick auf den button die fehlermeldung: Syntaxfehler (fehlender Operator) in Abfrageausdruck 'ID = 123'.

während "123 der inhalt der 1. spalte des listenfeldes ist.

vielleicht hat ja noch jemand eine idee :)

thx

fire...

[EC] Firestarter
24.09.2003, 18:09
hi,

ich hatte genau das gleiche problem, habe den oben genannten code verwendet, jetzt bekomme ich allerdings beim klick auf den button die fehlermeldung: Syntaxfehler (fehlender Operator) in Abfrageausdruck 'ID = 123'.

während "123" der inhalt der 1. spalte des listenfeldes ist.

vielleicht hat ja noch jemand eine idee :)

thx

fire...

Johnny Loser
24.09.2003, 19:00
Hi,

beigefügt einmal ein Beispiel

[EC] Firestarter
24.09.2003, 20:07
aha, danke , hab ich mir grad angeschaut und festgestellt, daß du in der tabelle das 1. feld "ID" genannt hast.

bei meiner tabelle sind in der 1. spalte zahlen im format "12 34 56" welche pro datensatz nur 1x vorkommen und das format ist "text". der feldname ist "produktnummer".

nun habe ich im vb-code bei mir das "ID" gegen "Produktnummer" getauscht, leider bleibt der fehler (nur daß jetzt auch in der fehlermeldung statt "id" "produktnummer"steht), kann es mir nicht erklären.

eigentlich bestehen ja keine unterschiede. sorry meine db kann ich hier leider nicht anhängen.

hm. wenn ich die fehlermeldung verstehen würde wäre sicherlich vieles einfacher...

gruß

fire...

Arne Dieckmann
24.09.2003, 20:57
Wenn das Feld in der Tabelle ein Textfeld ist, dann muss das Kriterium in Hochkommata gesetzt werden:


CurrentDb.Execute("DELETE * FROM Tabelle WHERE PRODUKTNUMMER ='" & Me!Listenfeld.Column(0) & "'")



Tabelllenname, Listenfeldname und der Verweis auf die Spalte mittels Column() sind evtl. noch anzupassen.

[EC] Firestarter
24.09.2003, 21:20
hey suuuupper, es funktioniert, vielen dank!!!

und ich zerbrech mir hier stundenlang den kopf :rolleyes:

echt klasse! ;)

gruß

fire...

Hansjürg
12.11.2003, 12:08
Hi

Das Beispiel hat mir sehr geholfen. Nur erhalte ich einen Fehler, denn ich nicht zuordnen kann. Der Fehler lautet:

1 Parameter wurde erwartet, aber es wurden zu wenig Parameter übergeben.

Der Code sieht bei mir wie folgt aus:


Private Sub BfDSLoeschen_Click()
On Error GoTo Err_BfDSLoeschen_Click

Dim stSql As String

stSql = "DELETE FROM TStuecklisteArtifaktRelation "
stSql = stSql & "WHERE GAR_GliederungID = " & Me![lstStueckliste].Column(0)
stSql = stSql & " AND Gar_ArtefaktID = " & Me![lstStueckliste].Column(1)

MsgBox stSql

CurrentDb.Execute stSql
lstStueckliste.Requery

Exit_BfDSLoeschen_Click:
Exit Sub

Err_BfDSLoeschen_Click:
MsgBox Err.Description
Resume Exit_BfDSLoeschen_Click

End Sub

JR²
12.11.2003, 12:17
Hallo, Hansjürg,

in welcher Zeile steigt er denn aus, ich nehme an, in der Execute-Zeile.
Kannst Du nicht einmal den Inhalt der Msgbox (Testausgabe) angeben ?
Sind Deine beiden IDs Zahlen oder evtl. Texte ? Dann müssten noch Anführungsstriche hinzugefügt werden.

Gruß,
JR²

Hansjürg
12.11.2003, 12:22
Hi JR

Die Messagebox zeigt das DELETE-Statement:

DELETE FROM TStuecklisteArtifaktRelation WHERE GAR_GliederungID = 1 AND Gar_ArtefaktID = 1161

Beide Felder sind Long. :bawling:

Arne Dieckmann
12.11.2003, 12:33
Stimmen denn die Feldnamen GAR_GliederungID und Gar_ArtefaktID wirklich und sind diese in der Tabelle TStuecklisteArtifaktRelation vorhanden? Bitte kontrolliere diese noch einmal ganz genau.

Kontrolliere den String:
DELETE FROM TStuecklisteArtifaktRelation WHERE GAR_GliederungID = 1 AND Gar_ArtefaktID = 1161
noch einmal, indem Du eine neue Abfrage anlegst und diesen dort in der SQL-Ansicht (über Ansicht/SQL-Ansicht) einfügst. Wechsel anschliessend wieder in die Entwurfsansicht. Evtl. siehst Du dann den Fehler.

Hansjürg
12.11.2003, 12:41
Hallo zusammen

Shame on me :upps:
Das Feld heisst nicht ArEfakt sondern ArIfakt....

Danke herzlichst