With the current code that I am running no errors occur, but no data gets added to the Microsoft Access DB. It only uploads the data to the DB if 2 or less of the ComboBoxes are included in the code. This has me very confused. I have tried ComboBox1.SelectedItem.ToString, ComboBox1.SelectedItem.Text, and ComboBox1.Text and similar issues arise for all of them. Any ideas?
Imports System.Data.OleDb
Public DefineDataFile As String
Dim provider As String
Dim dataFile As String
Dim connString As String
Dim myConnection As OleDbConnection = New OleDbConnection
provider = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="
dataFile = "XXXXXXXXXXXXX.mdb"
connString = provider & dataFile
myConnection.ConnectionString = connString
myConnection.Open()
Dim str As String
str = "INSERT INTO [Panels/Equipment] ([Panel/Equipment Name], [Machine Name], [Panel/Equipment #], [Type], [Functional Location], [Facility], [Category], [Lifetime Cost Savings], [Hours Per Day], [Days Per Week], [Weeks Per Year], [Description], [Environmental Condition], [Environmental Option], [Environmental Finding], [Heating/Cooling Condition], [Heating/Cooling Option], [Heating/Cooling Finding], [Wiring Condition], [Wiring Option], [Wiring Finding], [Machines ID])"
str += "SELECT ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,[Machines].[Machines ID]"
str += "FROM [Machines] WHERE [Machines].[Machine Name] = ? "
Dim cmd As OleDbCommand = New OleDbCommand(str, myConnection)
cmd.Parameters.Add(New OleDbParameter("Panel/Equipment Name", CType(TextBox_Name.Text, String)))
cmd.Parameters.Add(New OleDbParameter("Machine Name", CType(TextBox_Machine.Text, String)))
cmd.Parameters.Add(New OleDbParameter("Panel/Equipment #", CType(TextBox_PENum.Text, String)))
* cmd.Parameters.Add(New OleDbParameter("Type", CType(ComboBox_Type.SelectedItem.Text, String)))
cmd.Parameters.Add(New OleDbParameter("Functional Location", CType(TextBox_FunctionalLocation.Text, String)))
cmd.Parameters.Add(New OleDbParameter("Facility", CType(TextBox_Facility.Text, String)))
* cmd.Parameters.Add(New OleDbParameter("Category", CType(ComboBox_Category.SelectedItem.Text, String)))
cmd.Parameters.Add(New OleDbParameter("Lifetime Cost Savings", CType(TextBox_LifetimeCostSavings.Text, String)))
cmd.Parameters.Add(New OleDbParameter("Hours Per Day", CType(TextBox_HoursPerDay.Text, String)))
cmd.Parameters.Add(New OleDbParameter("Days Per Week", CType(TextBox_DaysPerWeek.Text, String)))
cmd.Parameters.Add(New OleDbParameter("Weeks Per Year", CType(TextBox_WeeksPerYear.Text, String)))
* cmd.Parameters.Add(New OleDbParameter("Priority", CType(ComboBox_Priority.SelectedItem.Text, String)))
cmd.Parameters.Add(New OleDbParameter("Description", CType(TextBox_Description.Text, String)))
* cmd.Parameters.Add(New OleDbParameter("Environmental Condition", CType(ComboBox_EC.SelectedItem.Text, String)))
* cmd.Parameters.Add(New OleDbParameter("Environmental Option", CType(ComboBox_EO.SelectedItem.Text, String)))
* cmd.Parameters.Add(New OleDbParameter("Environmental Finding", CType(ComboBox_EF.SelectedItem.Text, String)))
* cmd.Parameters.Add(New OleDbParameter("Heating/Cooling Condition", CType(ComboBox_HCC.SelectedItem.Text, String)))
* cmd.Parameters.Add(New OleDbParameter("Heating/Cooling Option", CType(ComboBox_HCO.SelectedItem.Text, String)))
* cmd.Parameters.Add(New OleDbParameter("Heating/Cooling Finding", CType(ComboBox_HCF.SelectedItem.Text, String)))
* cmd.Parameters.Add(New OleDbParameter("Wiring Condition", CType(ComboBox_WC.SelectedItem.Text, String)))
* cmd.Parameters.Add(New OleDbParameter("Wiring Option", CType(ComboBox_WO.SelectedItem.Text, String)))
* cmd.Parameters.Add(New OleDbParameter("Wiring Finding", CType(ComboBox_WF.SelectedItem.Text, String)))
* cmd.Parameters.Add(New OleDbParameter("Machine ID", CType(ComboBox_Machine.SelectedItem.ToString, String)))
Try
cmd.ExecuteNonQuery()
cmd.Dispose()
myConnection.Close()
MsgBox("Panel/Equipment Successfully Added")
Catch ex As Exception
MsgBox(ex.Message)
End Try
myConnection.Close()
Why are you converting a text to a string? In CType(TextBox_Name.Text, String)
the expression TextBox_Name.Text
is a string already. Simply write
cmd.Parameters.Add(New OleDbParameter("Panel/Equipment Name", TextBox_Name.Text))
For the other parameters, you must provide a value of a type which matches the type in the table column. E.g. If Machine ID in Access is a Numeric Long (32-bit), write
cmd.Parameters.Add(New OleDbParameter("Machine ID", _
CType(ComboBox_Machine.SelectedItem, Integer))) 'Integer in VB is 32-bit
Also you have 21 ?
but are inserting 23 Parameters. The Priority
parameter seems to be wrong. Since you insert the Machine ID
directly in the INSERT, you should not add a parameter for it but instead one for Machine Name
in the where clause.
The SelectedItem
property of the ComboBox
returns an Object
. An object does not contain a property Text
. What kind of objects do the combo boxes contain? If you added strings, then SelectedItem
is a string already. E.g.
cmd.Parameters.Add(New OleDbParameter("Type", ComboBox_Type.SelectedItem))
Also I recommend you to use the project option Strict On
in VB, as this shows you coding errors that are not shown otherwise.