10. september 2013 - 20:22Der 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?
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
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
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
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 :-)
Synes godt om
Ny brugerNybegynder
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.