Выберите другую таблицу в базе данных access с помощью VB.NET
Во-первых, мои извинения, если этот вопрос был задан. Я искал в интернете, но не нашел точного ответа на проблему, с которой столкнулся. Во-вторых, Я должен подчеркнуть, что я не являюсь разработчиком, Я инженер-механик и пишу sowftware только в качестве необходимой ситуации, с которой нужно покончить.
У меня есть форма, которая передает данные в базу данных access (это работает). Однако мне нужно обновить его так, чтобы он передавал информацию в разные таблицы в одной и той же БД, основываясь на выборе в выпадающем списке. Например, если combobox selection = X, то вставить в tableX, если combobox = Y, то вставить в tableY. Любая и всякая помощь будет оценена по достоинству.
Примечание: Я пробовал использовать операторы If для выбора соответствующей таблицы, но это не работает. Я не получаю никаких ошибок в VS, однако, когда я пытаюсь отправить, я получаю диалоговое окно с надписью "текст команды не установлен для объекта команды".
Пожалуйста, смотрите код ниже.
Что я уже пробовал:
Imports System.Data.OleDb Public Class Form1 Public ds As New DataSet Dim provider As String Dim dataFile As String Dim connString As String Dim myConnection As OleDbConnection = New OleDbConnection Dim rs As New resizer Dim cmd As OleDbCommand Private con As Object Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click provider = "Provider=Microsoft.Jet.OleDb.4.0;Data Source=" dataFile = "R:\Quality\NCR-Access_Database\NCRdb1.mdb" connString = provider & dataFile myConnection.ConnectionString = connString myConnection.Open() Dim str As String str = "" If ComboBox2.SelectedText = "Assembly" Then str = "Insert into [ASSEMBLYtbl]([NCR-No],[Week-No],[Part-No],[Drawing-Rev],[Description],[W/O-Number],[Operator-No],[Operation-No],[Machine-No],[Section],[Batch-Qty],[Reject_Qty],[Disposition],[Mat-Cost],[Standard-Cost],[Defect-Descripition],[Fault-Code],[Dept],[Root-Cause],[NCR-Pinksheet],[Action]) Values (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)" ElseIf ComboBox2.SelectedText = "Grinding" Then str = "Insert into [GRINDINGtbl]([NCR-No],[Week-No],[Part-No],[Drawing-Rev],[Description],[W/O-Number],[Operator-No],[Operation-No],[Machine-No],[Section],[Batch-Qty],[Reject_Qty],[Disposition],[Mat-Cost],[Standard-Cost],[Defect-Descripition],[Fault-Code],[Dept],[Root-Cause],[NCR-Pinksheet],[Action]) Values (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)" ElseIf ComboBox2.SelectedText = "Milling" Then str = "Insert into [MILLINGtbl]([NCR-No],[Week-No],[Part-No],[Drawing-Rev],[Description],[W/O-Number],[Operator-No],[Operation-No],[Machine-No],[Section],[Batch-Qty],[Reject_Qty],[Disposition],[Mat-Cost],[Standard-Cost],[Defect-Descripition],[Fault-Code],[Dept],[Root-Cause],[NCR-Pinksheet],[Action]) Values (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)" ElseIf ComboBox2.SelectedText = "Mill-Turn" Then str = "Insert into [MILL-TURNtbl]([NCR-No],[Week-No],[Part-No],[Drawing-Rev],[Description],[W/O-Number],[Operator-No],[Operation-No],[Machine-No],[Section],[Batch-Qty],[Reject_Qty],[Disposition],[Mat-Cost],[Standard-Cost],[Defect-Descripition],[Fault-Code],[Dept],[Root-Cause],[NCR-Pinksheet],[Action]) Values (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)" ElseIf ComboBox2.SelectedText = "Turning" Then str = "Insert into [TURNINGtbl]([NCR-No],[Week-No],[Part-No],[Drawing-Rev],[Description],[W/O-Number],[Operator-No],[Operation-No],[Machine-No],[Section],[Batch-Qty],[Reject_Qty],[Disposition],[Mat-Cost],[Standard-Cost],[Defect-Descripition],[Fault-Code],[Dept],[Root-Cause],[NCR-Pinksheet],[Action]) Values (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)" ElseIf ComboBox2.SelectedText = "Supplier" Then str = "Insert into [PURCHASINGtbl]([NCR-No],[Week-No],[Part-No],[Drawing-Rev],[Description],[W/O-Number],[Operator-No],[Operation-No],[Machine-No],[Section],[Batch-Qty],[Reject_Qty],[Disposition],[Mat-Cost],[Standard-Cost],[Defect-Descripition],[Fault-Code],[Dept],[Root-Cause],[NCR-Pinksheet],[Action]) Values (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)" ElseIf ComboBox2.SelectedText = "Subcon" Then str = "Insert into [PURCHASINGtbl]([NCR-No],[Week-No],[Part-No],[Drawing-Rev],[Description],[W/O-Number],[Operator-No],[Operation-No],[Machine-No],[Section],[Batch-Qty],[Reject_Qty],[Disposition],[Mat-Cost],[Standard-Cost],[Defect-Descripition],[Fault-Code],[Dept],[Root-Cause],[NCR-Pinksheet],[Action]) Values (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)" ElseIf ComboBox2.SelectedText = "Quality" Then str = "Insert into [QUALITYtbl]([NCR-No],[Week-No],[Part-No],[Drawing-Rev],[Description],[W/O-Number],[Operator-No],[Operation-No],[Machine-No],[Section],[Batch-Qty],[Reject_Qty],[Disposition],[Mat-Cost],[Standard-Cost],[Defect-Descripition],[Fault-Code],[Dept],[Root-Cause],[NCR-Pinksheet],[Action]) Values (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)" End If cmd = New OleDbCommand(str, myConnection) cmd.Parameters.Add(New OleDbParameter("NCR-No", TextBox1.Text)) cmd.Parameters.Add(New OleDbParameter("Week-No", TextBox3.Text)) cmd.Parameters.Add(New OleDbParameter("Part-No", TextBox4.Text)) cmd.Parameters.Add(New OleDbParameter("Drawing_Rev", TextBox5.Text)) cmd.Parameters.Add(New OleDbParameter("Description", TextBox6.Text)) cmd.Parameters.Add(New OleDbParameter("W/O-No", TextBox7.Text)) cmd.Parameters.Add(New OleDbParameter("Operator-No", TextBox8.Text)) cmd.Parameters.Add(New OleDbParameter("Operation-No", TextBox9.Text)) cmd.Parameters.Add(New OleDbParameter("Machine-No", TextBox10.Text)) cmd.Parameters.Add(New OleDbParameter("Section", ComboBox2.Text)) cmd.Parameters.Add(New OleDbParameter("Batch-Qty", TextBox12.Text)) cmd.Parameters.Add(New OleDbParameter("Reject_Qty", TextBox13.Text)) cmd.Parameters.Add(New OleDbParameter("Disposition", TextBox14.Text)) cmd.Parameters.Add(New OleDbParameter("Mat-Cost", TextBox15.Text)) cmd.Parameters.Add(New OleDbParameter("Standard-Cost", TextBox16.Text)) cmd.Parameters.Add(New OleDbParameter("Defect-Description", RichTextBox1.Text)) cmd.Parameters.Add(New OleDbParameter("Fault-Code", TextBox17.Text)) cmd.Parameters.Add(New OleDbParameter("Dept", TextBox18.Text)) cmd.Parameters.Add(New OleDbParameter("Root-Cause", RichTextBox2.Text)) cmd.Parameters.Add(New OleDbParameter("NCR-Pinksheet", ComboBox1.Text)) cmd.Parameters.Add(New OleDbParameter("Permanent-Action", RichTextBox3.Text)) Try cmd.ExecuteNonQuery() cmd.Dispose() myConnection.Close() TextBox1.Clear() TextBox4.Clear() TextBox5.Clear() TextBox3.Clear() TextBox6.Clear() TextBox7.Clear() TextBox8.Clear() TextBox9.Clear() TextBox10.Clear() ComboBox2.ResetText() TextBox12.Clear() TextBox13.Clear() TextBox14.Clear() TextBox15.Clear() TextBox16.Clear() RichTextBox1.Clear() TextBox17.Clear() TextBox18.Clear() RichTextBox2.Clear() ComboBox1.ResetText() RichTextBox3.Clear() Catch ex As Exception MsgBox(ex.Message) End Try End Sub End Class
FranzBe
Какую версию доступа вы используете. "это не работает" означает что? У тебя есть исключение? С 1-го взгляда ваш код не выглядит неправильно (было бы лучше иметь только имя таблицы в операторе if, так как остальная часть sql-команды остается прежней)
The-guy-on-the-couch
Использование access 2003. Извините за это, я скопировал текст и забыл вставить остальное. Я не получаю никаких ошибок в VS, однако, когда я пытаюсь отправить, я получаю диалоговое окно с надписью "текст команды не установлен для объекта команды".
FranzBe
Это означает: переменная "str" пуста в конце оператора if-else. Вы можете добавить еще одно "еще" в конце, со значением "ни одно из моих ожидаемых значений combobox, где они совпадают, что-то не так". Или еще лучше: реструктурируйте свой код, как это предлагается в приведенном ниже решении. Установите точку останова в начале оператора if-else и изучите содержимое "ComboBox2.SelectedText". Если вы не знаете, то подойдет "Messagebox(ComboBox2.SelectedText)".
The-guy-on-the-couch
Спасибо за предложение вашей помощи, я попытался завершить оператор If Else, и он выдал тот же диалог "текст команды не установлен". Что касается приведенного ниже решения, то я попробовал метод "switch", однако он выдает ошибку BC32017 - запятая,`) ` или ожидаемое допустимое продолжение выражения. Удаление $"\"{ComboBox2.SelectedText}\ из аргумента очищает ошибку, но затем я получаю необработанное событие исключения при отправке данных.
FranzBe
хорошо, один шаг назад: значение, которое приходит из вашего combobox, не совпадает с ожидаемыми записями для 'tablename', с которыми вы проверяете. вы должны убедиться, что выбор, возможный с помощью выпадающего списка, соответствует именам таблиц, которые вы должны предоставить. Попробуйте установить точку останова в начале обработчика событий button1_click, проверьте .Свойство SelectedText. Что-то здесь не так.
FranzBe
Я только что опубликовал фрагмент в разделе решение 2, Возможно, вы сможете продолжить свой путь от этого в качестве отправной точки.
The-guy-on-the-couch
Ваше здоровье, я попробую. Надеюсь, я заставлю эту штуку работать. Я действительно не знаю, как разработчики могут делать это весь день. Я полагаю, что это помогает, если вы точно знаете, что делаете. Еще раз спасибо, я дам вам знать о результатах.
F-ES Sitecore
используйте отладчик, чтобы проверить, что "str" все еще не является пустой строкой, когда она попадает в ваш блок "try".