Reputation: 39
So when I click the delete button and have someone selected in the listbox this code runs
'check if a member is selected
If LBmembers.SelectedItems.Count = 0 Then
MessageBox.Show("You have not selected a member to delete.")
ElseIf LBmembers.SelectedItems.Count > 0 Then
Dim i As String = LBmembers.SelectedItem
Dim dbProvider = "PROVIDER=Microsoft.Jet.OLEDB.4.0;"
Dim dbSource = "Data Source= C:\Users\Gotrek65\Documents\Visual Studio 2013\Projects\Ice Mining Calculator\Ice Mining Calculator\members.mdb "
Dim SqlQuery As String =
"DELETE FROM tblMembers WHERE Member = @ID;"
'remove member(i) from database
Using con = New OleDb.OleDbConnection(dbProvider & dbSource)
Using cmd = New OleDb.OleDbCommand(SqlQuery, con)
con.Open()
cmd.Parameters.AddWithValue("@ID", OleDb.OleDbType.Variant).Value = i
cmd.ExecuteNonQuery()
con.Close()
End Using
End Using
TBtimestart.Text = ""
TBtimeend.Text = ""
TBtimecycle.Text = ""
RBpro.Checked = False
RBret.Checked = False
RBcov.Checked = False
RBskiff.Checked = False
RBmack.Checked = False
RBhulk.Checked = False
LBmembers.Items.Remove(LBmembers.SelectedItem)
End If
Private Sub LBmembers_SelectedIndexChanged(sender As Object, e As EventArgs) Handles LBmembers.SelectedIndexChanged
'unfinished
'if the selected idex changes then the individual stats should be retrieved from database and updated
Dim i As String = LBmembers.SelectedItem
Dim dbProvider = "PROVIDER=Microsoft.Jet.OLEDB.4.0;"
Dim dbSource = "Data Source= C:\Users\Gotrek65\Documents\Visual Studio 2013\Projects\Ice Mining Calculator\Ice Mining Calculator\members.mdb "
Dim SqlQuery As String = "SELECT StartTime, EndTime, ShipCode, CycleTime FROM tblMembers WHERE Member = @ID;"
Using con = New OleDb.OleDbConnection(dbProvider & dbSource)
Using cmd = New OleDb.OleDbCommand(SqlQuery, con)
con.Open()
cmd.Parameters.AddWithValue("'@ID'", OleDb.OleDbType.VarWChar).Value = i
'EXCEPTION when deleting data from tblMembers function "Parameter @ID has no default value."
Using reader = cmd.ExecuteReader()
If reader.Read() Then
'reader is outputing "System.Data.OleDb.OleDbDataReader"
'but running the same query in access just yields 4 blank values...
TBtimestart.Text = reader.ToString(0)
TBtimeend.Text = reader.ToString(1)
Dim j = Convert.ToInt32(reader.ToString(2))
TBtimecycle.Text = reader.ToString(3)
If j = 1 Then
RBpro.Checked = True
ElseIf j = 2 Then
RBret.Checked = True
ElseIf j = 3 Then
RBcov.Checked = True
ElseIf j = 4 Then
RBskiff.Checked = True
ElseIf j = 5 Then
RBmack.Checked = True
ElseIf j = 6 Then
RBhulk.Checked = True
Else
RBpro.Checked = False
RBret.Checked = False
RBcov.Checked = False
RBskiff.Checked = False
RBmack.Checked = False
RBhulk.Checked = False
Exit Sub
End If
End If
con.Close()
End Using
End Using
End Using
End Sub
trying to prevent the SelectedIndexChanged from running when deleting a entry/member from the listbox. Curious if there is a possible way to do this because this is just started to get silly.
Additional information about the program.
The LBmembers(listbox) is used to update a database from said list. Also when you select an entry in the listbox(LBmembers) it should go to the database(access DB tblMembers(columns: Member(text), StartTime(text), EndTime(text), ShipCode(number), CycleTime(number), WorkPercent(number), Share(number)) should be pulled from said database and populated into their specific boxes.
Let me know if you need more code information.
Upvotes: 2
Views: 576
Reputation: 38875
A simple flag to ignore the change when desired:
Private ignoreChange As Boolean
Private Sub DeleteBtn_Click(...
ignoreChange = True
'... lots of code
LBmembers.Items.Remove(LBmembers.SelectedItem)
ignoreChange = False
End Sub
Private Sub LBmembers_SelectedIndexChanged(sender ...
If ignoreChange Then Exit Sub
' lots more code
End Sub
Upvotes: 2