Avatar billede -anders- Juniormester
10. september 2013 - 20:22 Der er 3 kommentarer og
1 løsning

Slette en eller poster poster i en tabel via multimarkering på en listbox

Hej eksperter

Jeg arbejder i Access 2010

Jeg forsøger at lave en kode til at slette en eller flere poster i en tabel via multiselect på en listbox på en form, men det driller. Listboxen indeholder 2 kolonner (kolonne 0, og kolonne 1). Kolonne 0 er en tekststreng, og kolonne 1 er et tal (unik ID)

Jeg har nedenstående kode:

'Kode start'

Private Sub cmd09_Click()
If MsgBox("Vil du fjerne de markeret links fra listen?", vbQuestion + vbYesNo, "Fjern links") = vbYes Then
Dim db As Database
Set db = CurrentDb
Dim Itm As Variant
For Each Itm In Me!lstfiler.ItemsSelected
Itm = Me!lstfiler.Column(1) 'unik ID i tabellen, kolonne 0 i listboxen indeholder en tekststreng som ikke findes i tabellen'
db.Execute "Delete * From tblfiler Where [ID]=" & Itm 'kolonne 1 i listboxen som svare til den unikke ID for posten i tabellen'
Next Itm
End If
End Sub

'kode slut'

Koden virker fint når jeg markere en post på listboxen, men når jeg markere flere poster fejler koden. "Kan ikke finde posten der svare til ID=&"

Der er et eller andet galt med løkken der løber listboxen igennem, men jeg kan ikke lige regne ud hvad der er galt, det som løkken bare køre videre. Jeg er ikke nogen haj til disse løkker, er der nogen der har et bud/ex på hvordan det kan kodes?

Hilsen
Anders.
Avatar billede MSchlamovitz Mester
10. september 2013 - 21:14 #1
Fejlen er, at du bruger variablen itm 2 gange - dels til at gennemløbe items selected og dels til at indeholde ID på den post der skal slettes.

Private Sub cmd09_Click()
If MsgBox("Vil du fjerne de markeret links fra listen?", vbQuestion + vbYesNo, "Fjern links") = vbYes Then
Dim db As Database
Set db = CurrentDb
Dim Itm As Variant
Dim Øvle as Long ' Eller hvad der nu passer til Me!lstfiler.Column(1)
For Each Itm In Me!lstfiler.ItemsSelected
Øvle = Me!lstfiler.Column(1) 'unik ID i tabellen, kolonne 0 i listboxen indeholder en tekststreng som ikke findes i tabellen'
db.Execute "Delete * From tblfiler Where [ID]=" & Øvle 'kolonne 1 i listboxen som svare til den unikke ID for posten i tabellen'
Next Itm
End If
End Sub
Avatar billede -anders- Juniormester
11. september 2013 - 18:45 #2
hej igen, og tak for indlægget

jeg har nu rettet dit sidste forslag til jf. nedenstående, men igen det virker når jeg markere en post på listboxen, men markere jeg flere kommer fejlen "Run-time error 13 Type Mismatch"

Private Sub cmd09_Click()
If MsgBox("Vil du fjerne de markeret links fra listen?", vbQuestion + vbYesNo, "Fjern links") = vbYes Then
Dim db As Database
Set db = CurrentDb
Dim Itm As Variant
Dim ID As Long ' Eller hvad der nu passer til Me!lstfiler.Column(1)
For Each Itm In Me!lstfiler.ItemsSelected
ID = Me.lstfiler.Column(1) 'unik ID i tabellen, kolonne 0 i listboxen indeholder en tekststreng som ikke findes i tabellen'
db.Execute "Delete * From tblfiler Where [ID]=" & ID 'kolonne 1 i listboxen som svare til den unikke ID for posten i tabellen'
Next Itm
End If
End Sub

Den debugger på nedenstående linje i koden

ID = Me.lstfiler.Column(1) 'unik ID i tabellen, kolonne 0 i listboxen indeholder en tekststreng som ikke findes i tabellen'

Det som om der er noget datatypen, men jeg kan ikke lige se hvor det, koden ser jo helt rigtigt ud, nogen ideer

Hilsen
Anders
Avatar billede -anders- Juniormester
11. september 2013 - 18:57 #3
Måske det fordi at ID ligger i kolonne 1. Koden til at vedhæfte filer virker jo fint, og er i grunden bygget op på samme måde, men der spørges jo på kolonne 0, og ikke kolonne 1

Hilsen
Anders
Avatar billede -anders- Juniormester
11. september 2013 - 19:46 #4
Bingo så var den der jf. nedenstående

Private Sub cmd09_Click()
If MsgBox("Vil du fjerne de markeret links fra listen?", vbQuestion + vbYesNo, "Fjern links") = vbYes Then
Dim db As Database
Set db = CurrentDb
Dim Itm As Variant
Dim ID As Long
For Each Itm In Me!lstfiler.ItemsSelected
ID = Me!lstfiler.Column(1, Itm)'dette gjorde forskellen'
db.Execute "Delete * From tblfiler Where [ID]=" & ID
Next Itm
End If
End Sub

Tak for hjælpen, point er på vej :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester