Страница: 1 |
Страница: 1 |
Вопрос: !!! Не получается выполнить UPDATE !!!
Добавлено: 28.10.07 10:33
Автор вопроса: AlexDerS
Вот код программы целиком:
Public Class Form1
Dim connString As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=test.mdb;"
'You could change this connection string to point a different path,
'but if you don't then the sample.mdb needs to be in the same directory as TheSample.exe
Public dsMPMs As New DataSet()
Public accessConn As New OleDb.OleDbConnection(connString)
Sub db(ByVal act As String)
Dim cmbdoc As New OleDb.OleDbCommand("SELECT * FROM table1", accessConn)
Dim daMP As OleDb.OleDbDataAdapter = New OleDb.OleDbDataAdapter
daMP.SelectCommand = cmbdoc
Dim dsds As DataSet = New DataSet()
daMP.Fill(dsds, "table1")
Dim dtTable As DataTable = dsds.Tables.Item("table1")
Select Case act
Case "setup"
TextBox1.DataBindings.Add("Text", dtTable, "id")
TextBox2.DataBindings.Add("Text", dtTable, "param1")
TextBox3.DataBindings.Add("Text", dtTable, "param2")
ComboBox1.DataSource = dtTable
ComboBox1.DisplayMember = "param1"
DataGridView1.DataSource = dtTable
Case "update"
Dim cmbBuilder As OleDb.OleDbCommandBuilder = New OleDb.OleDbCommandBuilder(daMP)
dsds.GetChanges()
BindingContext(dsds, "table1").EndCurrentEdit()
dtTable.AcceptChanges()
dsds.Tables("table1").AcceptChanges()
daMP.UpdateCommand = cmbBuilder.GetUpdateCommand
daMP.Update(dsds, "table1")
dsds.AcceptChanges()
End Select
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
accessConn.Open()
db("setup")
End Sub
Private Sub update_button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles update_button.Click
db("update")
End Sub
End Class
В базе данных (test.mdb) 1 таблица (table1)
В таблице 3 поля: "id", "parem1" и "parem2"
НЕ ПОЛУЧАЕТСЯ ОБНОВИТЬ ДАННЫЕ, не через TextBox, не через DataGrid !!!
ВООБЩЕ НИКАК, ВСЁ ПЕРЕПРОБЫВАЛ!!!
УЖЕ НЕДЕЛЮ СИЖУ С ЭТОЙ ЛАЖОЙ!!!!
ПО-МО-ГИ-ТЕ!!!!!
Ответы
Всего ответов: 6
Номер ответа: 1
Автор ответа:
el-paso
Вопросов: 3
Ответов: 164
Профиль | | #1
Добавлено: 28.10.07 12:42
Сначала dsds.AcceptChanges()
(причем для остальных объектов не надо вызывать методы AcceptChanges - они вызовутся автоматически).
И потом уже daMP.Update(dsds).
(откуда взялся у тебя второй параметр - я не догнал)
Номер ответа: 2
Автор ответа:
el-paso
Вопросов: 3
Ответов: 164
Профиль | | #2
Добавлено: 28.10.07 12:45
И выкинь на..й dsds.GetChanges()
Возвращаемое значение не используется - зачем тогда без толку память расходовать?..
Номер ответа: 3
Автор ответа:
AlexDerS
Вопросов: 37
Ответов: 61
Профиль | | #3
Добавлено: 28.10.07 13:03
Если для daMP.Update(dsds) не указать второй параметр (srcTable - The name of the source table to use for table mapping), то генерируется ошибка:
InvalidOperationExeption was unhandled
При обновлении не удалось найти TableMapping['Table'] или DataTable 'Table'.
А если указать daMP.Update(dsds, "table1", то ошибки нет, но обновления в базе не происходят! ((
Номер ответа: 4
Автор ответа:
BUMM ®
Вопросов: 8
Ответов: 482
Профиль | | #4
Добавлено: 28.10.07 15:07
1. accept changes изменяет состояние всех строк на UNCHANGED, после чего естессно обновляй не обновляй, нихрена не обновится.
2. dsds.GetChanges() возвращает измененные строки. пользоваться примерно так:
Dim dt as datatable = dsds.table1.GetChanges()
daMP.Update(dt)
Номер ответа: 5
Автор ответа:
AlexDerS
Вопросов: 37
Ответов: 61
Профиль | | #5
Добавлено: 28.10.07 17:23
В общем нифига не получается.
В чём проблема - понять не могу. (((
Вот программка целиком (исходный код):
http://www.sseu.ru/site_kafedra/marketing/fop/testdb.rar
Размер: 104Kb
Visual Basic 2005
Спасибо!
Номер ответа: 6
Автор ответа:
AlexDerS
Вопросов: 37
Ответов: 61
Профиль | | #6
Добавлено: 28.10.07 21:29
Вопрос снимается.
пошёл другим путём...
всем спасибо.