Status per Button nach Auswahl im Listenfeld

Hallo an die Access/VBA-Experten hier,

habe folgendes Problem und hoffe mir kann jemand weiterhelfen.

Hier erstmal der Code (ein Programmausschnitt)und anschließend meine Frage.

Dim i As Integer
Dim items As String
Dim alt As String

'Listenfeld durchgehen, wenn markierten Datensatz gefunden, speichere ‚ID in Variable items
For i=0 To LstAuswahl.ListCount -1
If LstAuswahl.Selected(i) = True Then
items = items & LstAuswahl.Column(0,i) & „“
CurrentDb.Execute „UPDATE Auto SET Auto.Status = '“ & alt & "‘" &_
„WHERE Auto.ID = " & items &“"
End If
Next i

End Sub

Es existiert eine Tabelle namens ‚Auto‘ u.a. mit den Spalten ‚ID‘ und ‚Status‘ sowie ein Listenfeld wo sich mehrere Datensätze befinden, welche man einzeln markieren kann.

Ich möchte per Markierung des jeweiligen Datensatzes im Listenfeld und anschließendem click auf Button ‚Status auf alt setzen‘ den vorhandenen Status ‚neu‘ in der Tabelle ‚Auto‘ automatisch auf ‚alt‘ ändern (nur beim markierten).

Momentan wird mir ein Syntaxfehler in der SQL-Anweisung angezeigt.
Was ist daran falsch bzw. ist meine Vorgehensweise generell falsch?
Sollte ich vielleicht statt

CurrentDb.Execute

lieber

DoCmd.RunSQL nutzen?

Danke wer mir helfen kann!

Hallo,

Dim i As Integer
Dim items As String

die Wörter ITEM/ITEMS sind reservierte Worte in Access und dürfen für eigene Zwecke nicht verwendet werden!!

Dim alt As String

bei ALT bin ich mir nicht sicher, sollte aber auch umbenannt werden!

'Listenfeld durchgehen, wenn markierten Datensatz gefunden,
speichere 'ID in Variable items

ist Multiselect für das Listenfeld aktiviert?

For i=0 To LstAuswahl.ListCount -1
If LstAuswahl.Selected(i) = True Then
items = items & LstAuswahl.Column(0,i) & „“

wozu soll diese Zeile sein? den Wert kann mandirekt in die WHERE Bedingung einfügen.

CurrentDb.Execute „UPDATE Auto SET Auto.Status = '“ & alt &

ALT ist ein TEXT und keine Variable! D.h. er kann direkt eingegeben werden.
CurrentDb.Execute "UPDATE Auto SET Auto.Status = ‚alt‘ " &_

„WHERE Auto.ID = " & items & " ;

hier fehlt das Semikolon!!

neue WHERE Klausel (mit Leerzeichen am Anfang):
" WHERE [ID] = " & LstAuswahl.Column(0,i) & " ;"

End If
Next i

End Sub

Es existiert eine Tabelle namens ‚Auto‘ u.a. mit den Spalten
‚ID‘ und ‚Status‘ sowie ein Listenfeld wo sich mehrere
Datensätze befinden, welche man einzeln markieren kann.

auch STATUS ist ein reserviertes Wort in Access!! = umbenennen

Ich möchte per Markierung des jeweiligen Datensatzes im
Listenfeld und anschließendem click auf Button ‚Status auf alt
setzen‘ den vorhandenen Status ‚neu‘ in der Tabelle ‚Auto‘
automatisch auf ‚alt‘ ändern (nur beim markierten).

Momentan wird mir ein Syntaxfehler in der SQL-Anweisung
angezeigt.

kein wunder, bei so vielen Fehlern :smile:

Was ist daran falsch bzw. ist meine Vorgehensweise generell
falsch?

bevor du SQL-Anweisungen per Hand programmierst, solltest du dir diese als Abfrage erstellen und dann den SQL-String in deinen VBA-Code kopieren.

Sollte ich vielleicht statt
CurrentDb.Execute
lieber
DoCmd.RunSQL nutzen?

ich habe noch keinen Unterschied gefunden

Grüße aus Schönberg (Lübeck)
Wolfgang
(Netwolf)

Hallo,

wenn das Listenfeld keine Mehrfachauswahl erlaubt und Tabellenfeld „ID“ vom Datentyp Zahl,long (bzw. Autowert) ist und ein gültiger ID-Wert in der ersten Spalte des Listenfeldes steht,
dann sollte dieses gehen:

Sub LstAuswahl_Afterupdate()
CurrentDb.Execute „UPDATE Auto SET [Status] = ‚alt‘“ & _
" WHERE ID = " & Me!LstAuswahl.Column(0)
End Sub

Der Unterschied zwischen Currentdb.Execute und Docmd.Run besteht darin, daß Execute eine Methode der Jet-Engine ist und Run ein Access-Makro, so daß bei RUN mitunter Access-Meldungen erscheinen, während bei Exceute explizit per Code der Erfolg der Durchführung der SQl abgefragt werden muß, falls man das braucht. Beide benötigen aber den selben korrekten SQl-String.

Viele Grüße vom Bodensee
Franz , DF6GL

PS: Feedback erwünscht!