Hej ! Tack för ditt svar! Det var precis vad jag sökte efter. DoCmd är macro instruktioner. Ingen "vacker" lösning. Om det finns något man kallar "riktiga" utvecklar brukar dessa vända sig till SQL frågor för att ta bort poster. Tack för ditt svar! Visst är det bättre med SQL, om man kan det. Men... Du har alldeles rätt Ann. Du har <b>me.Refresh</b>, Vilket läser om aktuell post och <b>me.Requery</b>, vilket läser om samtliga poster i formuläret. Tyvärr räcker det inte med de två instruktionerna me.Refresh och me.Requery för att uppnå det jag beskrivit att jag vill åstadkomma. Jobbar vidare. Det är bra att lära sig mer. Har hittat hur du kan lösa det. Tack Andreas och Ann för era förslag.Vill slippa meddelanderuta vid radering av post.
Har ett fomulär där jag matar in uppgifter till poster i en tabell.
Vill jag ta bort poster, så gör jag det mha en kommandoknapp som kör rutin:
Private Sub cmdDelete_Click()
Response = MsgBox("Vill du verkligen permanent ta bort uppgiften ?", vbYesNo, "VÄLJ ALTERNATIV !!")
If Response = vbYes Then ' User chose Yes.
On Error Resume Next
DoCmd.RunCommand acCmdDeleteRecord
DoCmd.Close acForm, "Uppgifter", acSaveNo 'stäng formuläret
End Sub
Mitt problem uppstår när jag ”tar bort”(raderar) den sista posten (sista posten bland flera poster eller om jag vill radera den enda posten som finns)
eftersom programmet alltid försöker visa nästa post när man raderat en post.
Det som sker vid radering av sista posten är följande:
Min inmatningsruta för ny post visas tillsammans med en meddelanderuta med texten:
” ! Microsoft Access Du håller på att ta bort 1 post(er). Klicka på ja om posterna skall bort. Du kommer inte att kunna ångra borttagningen.” Här finns två alternativ: JA eller NEJ.
-Väljer jag JA så raderas posten och formuläret stängs.
- Väljer jag NEJ så raderas inte posten och formuläret stängs.
Problemet är alltså meddelanderutan som access poppar upp. Jag har ju redan före jag utför raderingskommandot frågat om posten skall raderas. Jag vill alltså inte att systemet frågar det en gång till bara för att det är sista posten som raderas.
Det verkar så förvirrande att användaren först efter att ha svarat ja på min raderingsfråga får en ny raderingsfråga av systemet.
Min önskan är att om användaren svarat ja på min fråga så raderas posten och nästa post visas. Finns ingen nästa post så vill jag bara radera posten och stänga formuläret.
Hur skall jag slippa den överflödiga frågan??
Orsaken till att jag vill ställa frågan före raderingen är den att systemets fråga om posten skall tas bort eller ej visas enbart för den sista posten.
Tacksam för svar.Sv:Vill slippa meddelanderuta vid radering av post.
Tack också för att svaret kom så snabbt.
/RolandSv: Vill slippa meddelanderuta vid radering av post.
Private Sub cmdDelete_Click()
Dim strSQL As String
Dim db As DAO.Database
On Error Goto cmdDelete_Click_Err
Select Case MsgBox("Vill du verkligen permanent ta bort uppgiften?", vbYesNo, "Ta bort post")
Case vbYes ' User chose Yes.
strSQL = "DELETE FROM tabellNamn" & vbCrLf & _
"WHERE primärNyckel=" & me("primärNyckel")
Set db = CurrentDB
db.Execute strSQL
End Select
cmdDelete_Click_Exit:
Exit sub
cmdDelete_Click_Err:
Select Case Err.Number
Case Else
MsgBox Err.Description, vbCritical, Err.Source
Resume cmdDelete_Click_Exit
End Select
End Sub
Jag tycker det är lite grovt att stänga av alla varningar för att man vill ta bort en post.
Sv:Vill slippa meddelanderuta vid radering av post.
Håller med om att SQL-lösningen är "rejälare".
Är tyvärr inte så hemmastadd i metoderna.
Har kört din lösning med nedanstående resultat:
Kör cmdDelete.
Frågan om jag vill ta bort posten visas.
Jag svarar ja. Därefter händer inget mer utan formuläret står kvar och visar fortfarande borttagna postens värden.
Jag använder då navigationspilarna för att gå till nästa post varvid det dyker upp en meddelanderuta som visar ”Posten är borttagen” och en OK knapp.
Jag klickar på OK varefter endel av fälten i formuläret ersätts med #Borttaget.
Jag väljer navpil framåt igen och nästa post visas.
Jag väljer navpil bakåt för att se om den borttagna posten verkligen är borttagen, men får då ett felmeddelande: ”En post i tabellen ’uppgifter’ har raderats av en annan användare”.
Jag väljer felmeddelanderutans avslutaknapp och stänger formuläret.
Öppnar formuläret på nytt och bläddrar med navpilarna bland posterna och konstaterar att borttagen post är borta.
Vad som verkar saknas är en uppdatering av tabellen efter borttagningen så att posten verkligen försvinner även ur tabellen.
Raderingen har alltså utförts men
Hur får jag rutinen att visa nästa post om sådan finns eller annars stänga formuläret.?
Tacksam för svar
/RolandSv:Vill slippa meddelanderuta vid radering av post.
Har uppfattningen att varningarna stängs av bara av för händelser i rutinen.
Macron är ju till för att man ska kunna göra lite perifer funktion till de vanliga funktionerna utan att vara utvecklare. Dessutom en ypperlig plattform för att gå vidare till att bli utvecklare eftersom det är logiskt att man ökar svårighetsgrad allteftersom.
/AnnSv: Vill slippa meddelanderuta vid radering av post.
Det macro du föreslog fungerar helt ok i mitt program men nu har jag ju blivit intresserad av att se hur SQL-lösningen skulle fungera.
mvh/ RolandSv: Vill slippa meddelanderuta vid radering av post.
Sv:Vill slippa meddelanderuta vid radering av post.
Tack i alla fall.
/RolandSv: Vill slippa meddelanderuta vid radering av post.
Nu har jag ingen kod att bidra med eftersom jag för tillfället tar mig friheten att vara soffpotatis på semestern. Tror att du måste skapa ett recordset och en querydef med de poster som ingår i frågan. Sedan kör du With recordset - skapa querydef - with querydef .. Deletekoden... End with, End with. I något läge efter deletekoden får du köra recordset.update för att få den effekt du vill ha borde rimligen vara före end with för recordset eller (soffpotatis var det ja).
Om det var för kryptiskt så får du posta igen så svarar väl jag eller någon annan :). Glad sommar!
/AnnSv: Vill slippa meddelanderuta vid radering av post.
Private Sub DeletRecordButton_Click()
Dim rs As DAO.Recordset
On Error GoTo Err_DeletRecordButton_Click
Select Case MsgBox("Vill du ta bort aktuell post?", vbYesNo Or vbQuestion, "Ta bort")
Case vbYes
Set rs = Me.Recordset
rs.Delete
End Select
Exit_DeletRecordButton_Click:
Exit Sub
Err_DeletRecordButton_Click:
MsgBox Err.Description
Resume Exit_DeletRecordButton_Click
End Sub
Sv:Vill slippa meddelanderuta vid radering av post.
Kompletterade Andreas forslag med:
Me.Refresh
Me.Requery
rs.Requery
som jag lade in efter instruktionen rs.Delete och efter det fungerade det hela ungefär som jag hoppades.
Glad sommar! mvh/Roland
ps: har redan en ny fråga, men jag skriver in den under egen rubrik: "SQL WHERE = Variabel"