Страница: 1 |
Вопрос: Как обновить данные в БД Access из VS 2005 (VB. | Добавлено: 08.07.08 22:30 |
Автор вопроса: ![]() |
Всех приветствую. Поможите кто чем может :(
Работаю в VS 2005. Пишу приложение на VB.net к БД Access. Как записать изменения в БД? Есть форма. В форме есть DataGridview. Заполняю Dataset. Таблицу из Dataset привязываю к DataGridview. В форме вношу руками изменения (напр., добавляю строку). Жму кнопку "Обновить": .... Try ndop.Update(ds) Catch ex As Exception MsgBox(ex.ToString) End Try ..... ndop - OleDbDataAdapter; ds - Dataset. Код Insert для DataAdapter следующий: With ndop .InsertCommand = New OleDbCommand() With .InsertCommand .Connection = connect .CommandText = "INSERT INTO Size_doplats(ID, Size) VALUES(?, ?)" 'не получается ни так... '.CommandText = "INSERT INTO `Size_doplats` (`Size`) VALUES (?)" 'ни так... .UpdatedRowSource = UpdateRowSource.Both End With End With Пишет ошибку: system.Data.Oledb.OledbException: Ошибка синтаксиса в инструкции INSERT INTO.... |
Ответы | Всего ответов: 10 |
Номер ответа: 1 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Разработчик Offline Client Вопросов: 236 Ответов: 8362 |
Профиль | Цитата | #1 | Добавлено: 09.07.08 04:21 |
Так вопросики и пытаешься вставить, или это типа сюда для примера? ![]() Вообще синтаксически запрос вроде правильный, так что ищи проблему в названии\количестве\регистре полей таблицы. |
Номер ответа: 2 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Разработчик Вопросов: 130 Ответов: 6602 |
Профиль | Цитата | #2 | Добавлено: 09.07.08 06:44 |
Знаки ? вроде бы разрешены в запросах в MS Access, но не понятно где собственно выполняется установка параметров и собственно запрос.
По синтаксису вызывают подозрение кавычки в названии таблицы, не уверен что по синтаксиму разрешены. А вообще нужно знать что пишет исключение после "INSERT INTO...." - там как раз начиналось самое интересное, а ты обрезал, зачем?! |
Номер ответа: 3 Автор ответа: ![]() ![]() ![]() Вопросов: 18 Ответов: 14 |
Профиль | Цитата | #3 | Добавлено: 09.07.08 21:20 |
Ok.
Привожу весь листинг формы: Class Sdoplat Inherits Spravochnik Public connect As New OleDbConnection(connectionString) Private Sub Sdoplat_load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load With ndop 'OleDbDataAdapter .SelectCommand = New OleDbCommand() With .SelectCommand .Connection = connect .CommandText = "SELECT Size_doplats.* FROM Size_doplats" End With .InsertCommand = New OleDbCommand() With .InsertCommand .Connection = connect .CommandText = "INSERT INTO Size_doplats(ID, Size) VALUES(?, ?)" .UpdatedRowSource = UpdateRowSource.Both End With .UpdateCommand = New OleDbCommand() With .UpdateCommand .Connection = connect .CommandText = "update Size_doplats set Size = ? where ID = ?" End With .DeleteCommand = New OleDbCommand() With .DeleteCommand .Connection = connect .CommandText = "delete from Size_doplats where ID = ?" End With .AcceptChangesDuringFill = True .TableMappings.Add("Table", "Size_doplats" ![]() .MissingSchemaAction = MissingSchemaAction.AddWithKey End With Try ds.Clear() ndop.Fill(ds) MyGridView.DataSource = ds.Tables("Size_doplats" ![]() Catch ex As Exception MsgBox("Error occured:" & ex.Message) End Try With ds.Tables("Size_doplats" ![]() .Columns("Size" ![]() End With With MyGridView .AutoResizeColumns() End With End Sub Private Sub mybut_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mybut.Click del() End Sub Public Overrides Sub del() If MyGridView.SelectedRows.Count > 0 AndAlso Not MyGridView.SelectedRows(0).Index = _ MyGridView.Rows.Count - 1 Then MyGridView.Rows.RemoveAt(MyGridView.SelectedRows(0).Index) End If End Sub Private Sub mybut1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mybut1.Click canc() End Sub Public Overrides Sub canc() ds.RejectChanges() End Sub Private Sub mybut2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mybut2.Click Save() End Sub Public Overrides Sub Save() 'ndop.InsertCommand.UpdatedRowSource = UpdateRowSource.Both 'ndop.Update(ds) Try ndop.Update(ds) Catch ex As Exception MsgBox(ex.ToString) End Try End Sub End Class Текст ошибки: System.Data.OleDb.OleDbException was caught ErrorCode=-2147217900 Message="Ошибка синтаксиса в инструкции INSERT INTO." Source="Microsoft JET Database Engine" StackTrace: at System.Data.Common.DbDataAdapter.UpdatedRowStatusErrors(RowUpdatedEventArgs rowUpdatedEvent, BatchCommandInfo[] batchCommands, Int32 commandCount) at System.Data.Common.DbDataAdapter.UpdatedRowStatus(RowUpdatedEventArgs rowUpdatedEvent, BatchCommandInfo[] batchCommands, Int32 commandCount) at System.Data.Common.DbDataAdapter.Update(DataRow[] dataRows, DataTableMapping tableMapping) at System.Data.Common.DbDataAdapter.UpdateFromDataTable(DataTable dataTable, DataTableMapping tableMapping) at System.Data.Common.DbDataAdapter.Update(DataSet dataSet, String srcTable) at System.Data.Common.DbDataAdapter.Update(DataSet dataSet) at doplats.Sdoplat.Save() in G:\My eBooks\учёба\Доплаты\doplats\doplats\Sdoplat.vb:line 92 |
Номер ответа: 4 Автор ответа: ![]() ![]() ![]() Вопросов: 18 Ответов: 14 |
Профиль | Цитата | #4 | Добавлено: 09.07.08 21:22 |
Ok.
Привожу весь листинг формы: Class Sdoplat Inherits Spravochnik Public connect As New OleDbConnection(connectionString) Private Sub Sdoplat_load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load With ndop 'OleDbDataAdapter .SelectCommand = New OleDbCommand() With .SelectCommand .Connection = connect .CommandText = "SELECT Size_doplats.* FROM Size_doplats" End With .InsertCommand = New OleDbCommand() With .InsertCommand .Connection = connect .CommandText = "INSERT INTO Size_doplats(ID, Size) VALUES(?, ?)" .UpdatedRowSource = UpdateRowSource.Both End With .UpdateCommand = New OleDbCommand() With .UpdateCommand .Connection = connect .CommandText = "update Size_doplats set Size = ? where ID = ?" End With .DeleteCommand = New OleDbCommand() With .DeleteCommand .Connection = connect .CommandText = "delete from Size_doplats where ID = ?" End With .AcceptChangesDuringFill = True .TableMappings.Add("Table", "Size_doplats" ![]() .MissingSchemaAction = MissingSchemaAction.AddWithKey End With Try ds.Clear() ndop.Fill(ds) MyGridView.DataSource = ds.Tables("Size_doplats" ![]() Catch ex As Exception MsgBox("Error occured:" & ex.Message) End Try With ds.Tables("Size_doplats" ![]() .Columns("Size" ![]() End With With MyGridView .AutoResizeColumns() End With End Sub Private Sub mybut_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mybut.Click del() End Sub Public Overrides Sub del() If MyGridView.SelectedRows.Count > 0 AndAlso Not MyGridView.SelectedRows(0).Index = _ MyGridView.Rows.Count - 1 Then MyGridView.Rows.RemoveAt(MyGridView.SelectedRows(0).Index) End If End Sub Private Sub mybut1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mybut1.Click canc() End Sub Public Overrides Sub canc() ds.RejectChanges() End Sub Private Sub mybut2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mybut2.Click Save() End Sub Public Overrides Sub Save() Try ndop.Update(ds) Catch ex As Exception MsgBox(ex.ToString) End Try End Sub End Class Текст ошибки: System.Data.OleDb.OleDbException was caught ErrorCode=-2147217900 Message="Ошибка синтаксиса в инструкции INSERT INTO." Source="Microsoft JET Database Engine" StackTrace: at System.Data.Common.DbDataAdapter.UpdatedRowStatusErrors(RowUpdatedEventArgs rowUpdatedEvent, BatchCommandInfo[] batchCommands, Int32 commandCount) at System.Data.Common.DbDataAdapter.UpdatedRowStatus(RowUpdatedEventArgs rowUpdatedEvent, BatchCommandInfo[] batchCommands, Int32 commandCount) at System.Data.Common.DbDataAdapter.Update(DataRow[] dataRows, DataTableMapping tableMapping) at System.Data.Common.DbDataAdapter.UpdateFromDataTable(DataTable dataTable, DataTableMapping tableMapping) at System.Data.Common.DbDataAdapter.Update(DataSet dataSet, String srcTable) at System.Data.Common.DbDataAdapter.Update(DataSet dataSet) at doplats.Sdoplat.Save() in G:\My eBooks\учёба\Доплаты\doplats\doplats\Sdoplat.vb:line 92 |
Номер ответа: 5 Автор ответа: ![]() ![]() ![]() Вопросов: 18 Ответов: 14 |
Профиль | Цитата | #5 | Добавлено: 09.07.08 21:23 |
Прошу прощения. Два раза добавил ![]() |
Номер ответа: 6 Автор ответа: ![]() ![]() ![]() Вопросов: 18 Ответов: 14 |
Профиль | Цитата | #6 | Добавлено: 10.07.08 23:36 |
Блин, ребята, подскажите пожалуйста что делать.
Уже три дня бьюсь по вечерам с этим вопросом. |
Номер ответа: 7 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() Вопросов: 0 Ответов: 55 |
Профиль | Цитата | #7 | Добавлено: 11.07.08 17:42 |
den,
у меня нет под рукой на чем проверить так только навскидку: "INSERT INTO Size_doplats " & _
" ![]() " ![]() у тебя нет пробела перед круглыми скобками вроде ~'J'~ |
Номер ответа: 8 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() Вопросов: 0 Ответов: 55 |
Профиль | Цитата | #8 | Добавлено: 12.07.08 13:59 |
Только сейчас заметил:
а Connection вообще надо открывать? ~'J'~ |
Номер ответа: 9 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Разработчик Вопросов: 130 Ответов: 6602 |
Профиль | Цитата | #9 | Добавлено: 12.07.08 16:23 |
При работе с SQL Server вообще-то надо, но DataAdapter по-моему и сам открывает если не открыто |
Номер ответа: 10 Автор ответа: ![]() ![]() Вопросов: 6 Ответов: 13 |
Профиль | Цитата | #10 | Добавлено: 26.07.08 00:35 |
Id не счетчик ли, его же тогда не надо добавлять ... |
Страница: 1 |
|