2016-06-03 12 views
0

Ich arbeite gerade mit einem Listenfeld, das Werte löscht, die den ausgewählten Text aus einer Tabelle enthalten. Ich habe den folgenden Code:ListBox Auswahldaten nach Requery beibehalten

Private Sub DeleteEntry_Click() 

Dim DeleteTbl As String 
Dim Msg As String 



If IsNull(Me.lstSolution) = True Then 
    MsgBox "Please Select a Entry", vbOKOnly, "No Entry Selected" 
Else 
    DeleteTbl = MsgBox(Msg, vbYesNo, "Delete Entries?") 
    Msg = "Are you sure you wish to delete all entrys containing: " 
    Msg = Msg & Me.lstSolution 
    DeleteTbl = MsgBox(Msg, vbYesNo, "Delete Entries?") 
End If 

If DeleteTbl = vbYes Then 
    DoCmd.SetWarnings False 
    DoCmd.RunSQL "Delete * FROM [Solutions] WHERE [Solutions].SolutionText = '" & Me.lstSolution & "'" 
    DoCmd.SetWarnings True 
Else 
    'Do Nothing 
End If 

    Me.lstSolution.Requery 

End Sub 

Das Problem, das ich habe, ist, dass nach dem Eintrag aus der Tabelle gelöscht, und ich auf den Button klicken Sie erneut auf (ohne eine Auswahl) der zuvor ausgewählte Wert in der MsgBox erscheint nach wie vor. Ich brauche diesen Wert zu löschen, so dass eine Fehlermeldung Feld angezeigt wird, zu sagen, dass kein Eintrag

+0

Wie lstSolution ist gebunden? – Brad

+1

BTW Ich finde 'DoCmd.RunSQL', um allgemein schlechte Praxis zu sein. Es bedeutet, dass Sie 'DoCmd.SetWarnings' verwenden müssen, was ein echter Schmerz ist, wenn Sie vergessen, sie wieder einzuschalten/etwas schief geht und sie nicht wieder angeschaltet werden. Stattdessen sollte 'CurrentDb.Execute' verwendet werden, denke ich. Dies hat den zusätzlichen Vorteil, dass Sie eine RecordsAffected-Eigenschaft zurückgeben, mit der Sie ermitteln können, wie viele Datensätze gelöscht wurden. – Brad

+0

Wenn Sie nicht möchten, dass eine Listenfeldzeile ausgewählt wird, macht 'Me! LstSolution.Value = Null 'das nicht für Sie? – HansUp

Antwort

0

ich es geschafft haben, ausgewählt wurde durch Zugabe in einer NotSelected Variable um das Problem zu lösen, wie folgt:

Private Sub DeleteEntry_Click() 

Dim DeleteTbl As String 
Dim Msg As String 
Dim NotSelected As String 

If IsNull(Me.lstSolution) = True Then 
    MsgBox "Please Select a Entry", vbOKOnly, "No Entry Selected" 
    NotSelected = True 
Else 
    Msg = "Are you sure you wish to delete all entrys containing: " 
    Msg = Msg & Me.lstSolution 
    DeleteTbl = MsgBox(Msg, vbYesNo, "Delete Entries?") 
    NotSelected = False 
End If 

If NotSelected = True Then 
    End 
ElseIf DeleteTbl = vbYes Then 
    DoCmd.SetWarnings False 
    DoCmd.RunSQL "Delete * FROM [Solutions] WHERE [Solutions].SolutionText = '" & Me.lstSolution & "'" 
    DoCmd.SetWarnings True 
End If 

    Me.lstSolution.Requery 


End Sub 
+0

Interessanterweise funktioniert das, wenn Sie boolesche Werte 'True' und' False' auf einen deklarierten String-Typ 'NotSelected' setzen. Wenn irgendetwas Boolescher Wert zu Integer-Werten und nicht zu String passen würde. – Parfait

Verwandte Themen