2016-03-22 4 views
0

Это немного расстраивает! У меня есть раздел поиска, в котором вы можете прокручивать строки, используя кнопки и текстовые поля, обновлять данные строки, но когда я добавляю новые данные в базу данных, вернитесь в мое меню поиска, но новая добавленная строка не отображается? Как сбросить источник привязки, чтобы выполнить это, или, по крайней мере, иметь 2 части работы от одних и тех же данных?Как обновить источник связывания после вставки новой строки базы данных

Мой код: Вызов Write2tableAddClient() `здесь я надеюсь добавить код связывания этого обновления

Мой текущий связывание, в котором срабатывает по форме нагрузки:

Private Sub click() 
    sql = "Select * from tbl" 
    Using dbcon As New OleDbConnection(ACEConnStr) 
     Using cmd As New OleDbCommand(sql, dbcon) 

      dbcon.Open() 

      dtSample = New DataTable 
      dtSample.Load(cmd.ExecuteReader) 

     End Using 
    End Using 

    ' initialize BS from DT 
    bsSample = New BindingSource(dtSample, Nothing) 
    TxtCI.DataBindings.Add("Text", bsSample, "ID") 

End Sub 

AddCustomer:

Private Sub AClient() 
    If con.State = ConnectionState.Closed Then con.Open() 
    cmd = New OleDbCommand 
    cmd.Connection = con 
    cmd.CommandText = "INSERT INTO tblcustomer(Title)VALUES(?);" 

    cmd.Parameters.Add("?", OleDbType.VarChar).Value = TxtName.Text 
    cmd.ExecuteNonQuery() 
    con.Close() 
End Sub 

Рубрики:

Dim con As OleDbConnection = New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=.\Database.accdb") 
Dim cmd As OleDbCommand 
Dim sql As String 
Dim ds As New DataSet 
Dim da As New OleDbDataAdapter 
Dim RecCnt As Integer 
Dim inc As Integer 
Private ACEConnStr As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=.\Database.accdb" 
Private bsSample As BindingSource 
Private dtSample As DataTable 
+0

Его источник данных, а не привязки. DataTable не поддерживает живой «канал» в БД. Который я, почему я настоятельно призывал вас использовать данные, используемые везде в вашем приложении. Если ПОИСК и ADD использовали тот же DT, что и источник данных, добавленные данные автоматически появлялись бы в чем-либо, используя его. Вам необходимо перестроить данные для загрузки новых данных, добавленных другими вещами или пользователями. – Plutonix

+0

Ой, черт возьми, это когда в жизни .. Ты спрыгиваешь со здания хаха, тратя часы на эту программу, исправляешь одну вещь, и возникает другая ошибка :( –

+0

Я обновил вопрос там, в какой части я меняюсь, чтобы сделать все это в том же формате данных? Ps: Если я новичок в том, как использовать ту же таблицу, я действительно хотел бы хаха! –

ответ

0

Это распространенная ошибка. Вы делаете все неправильно. Если у вас есть данные, содержащие DataTable, вы не добавляете запись в базу данных, а затем обновляете DataTable. Сначала вы добавляете запись в DataTable, а затем сохраняете это изменение в базе данных.

Нет необходимости обновлять BindingSource. Он будет раскрывать все, что находится в DataTable. Добавьте новую строку в DataTable, и вы увидите эту строку в том, что связано с BindingSource. После того, как вы добавили строку в DataTable, используйте тот же адаптер данных или адаптер таблицы, который использовался для извлечения данных, в первую очередь, чтобы сохранить изменения в базе данных, то есть позвонить Update на том же адаптере, который вы назвали Fill ,

+0

Итак, я буду использовать: 'da.Update (dtSample)'? Я не лучше всех с VB, но все еще получаю от них пользу, поэтому извините заранее, если то, что я только что сказал, было тотальным, что нет, и момент facepalm. –

+0

@ irishwill2008 да, но * ваш * dataadapter не знает, как обновить или удалить – Plutonix

+0

Так что, возможно, мой ds будет как набор данных? –

0

Если вы похожи на меня и имеете какое-то беспорядок с таблицами данных, и вы всегда можете легко найти способ, который перезагружает форму, но показывает то же самое, где вы в последний раз останавливались!

Например, когда я добавил клиента к базе данных и поиск с использованием привязок информации я добавил бы не отобразить это в моем случае я добавил следующий код, когда я успешно добавлен клиент:

Dim frm = New main ' duplicate your form 
frm.Show() ' show your new duplicated form 
frm.AddCustomer() 'load back the menu you just left 
Me.Close() ' close the old form as your new form will now load! 

Это для меня простое, но эффективное решение! Могу не быть красивым, но обязательно выполняет задание :) В моем методе addcustomer у меня есть оператор if, поэтому, как только клиент будет добавлен, он представит вам сообщение с сообщением о том или ином, но затем говорит: «Перезагрузка данных, пожалуйста, подождите» и так далее то люди не пойдут. Почему это просто перезагрузилось? Он работает для меня в любом случае, я не лучший кодер в мире, и все еще изучаю, как я иду, но это, честно говоря, лучшее, что я придумал с ха-ха. Надеюсь, вы, ребята, можете относиться к нему! Спасибо :)

+1

... и если у db тысячи строк, это очень расточительно в крайнем случае – Plutonix

+0

Хм хорошо этот сценарий подходит для работы, о которой я думаю. –

+1

Дело в том, что SO - это сайт для профессиональных программистов ... Загрузка и создание элементов управления дороже в дополнение к служебным ресурсам db. – Plutonix

Смежные вопросы