Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > VB .NET > Ошибка при UPDATE Database


Автор: Andruxa28 26.2.2011, 18:51
Здравствуйте! 
Возникла проблема при обновлении записей в таблице БД 
вот привожу код 
Код

'Подключаюсь к БД и вывожу таблицу "Доходы в DataGrid
Dim StrCon As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source="_
 & My.Computer.FileSystem.SpecialDirectories.MyDocuments & "\Users\" & User_name & "\DataBase.mdb")
    Dim Select2 As String = "SELECT * FROM Доходы"
    Dim comand As New OleDbCommand(Select2, StrCon)
    Dim adapter As New OleDbDataAdapter(comand)
    Dim AllTables As New DataSet("AllData")
    Dim comanbuilder As New OleDbCommandBuilder(adapter)
    adapter.Fill(AllTables, "Доходы")
    DataGrid_Доходы.DataSource = AllTables.Tables.Item("Доходы")
' Так пытаюсь обновить записи
Private Sub Update_button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Update_button.Click
        StrCon.Open()
        Dim COMMAND2 As New System.Data.OleDb.OleDbCommand("UPDATE Доходы SET Категория = ?, _
             Тип = ?, Сумма = ?, Валюта = ?, Дата = ?, [Член Семьи] = ? WHERE([id дохода] = ?) _ 
             AND (? = 1 AND Категория IS NULL OR Категория = ?) AND (? = 1 AND Тип IS NULL OR Тип = ?) _
             AND (? = 1 AND Сумма IS NULL OR Сумма = ?) AND (? = 1 AND Валюта IS NULL OR Валюта = ?) _
             AND (? = 1 AND Дата IS NULL OR Дата = ?) AND (? = 1 AND [Член Семьи] IS NULL OR [Член Семьи] = ?)")
        COMMAND2.Connection = StrCon
        COMMAND2.ExecuteNonQuery()
        StrCon.Close()
           End Sub


на что получаю вот такую ошибку  smile 
Код

System.Data.OleDb.OleDbException не обработано
  ErrorCode=-2147217904
  Message="Отсутствует значение для одного или нескольких требуемых параметров."

таблица  "Доходы"
user posted image

Помогите разобраться..
Правильно ли я вообще пытаюсь обновить записи?
Может как-то по другому можно?

Автор: diadiavova 26.2.2011, 23:48
Andruxa28, у тебя в запросе 19 параметров smile Им всем надо передать значения.

Автор: Andruxa28 27.2.2011, 00:11
Цитата(diadiavova @ 26.2.2011,  23:48)
Andruxa28, у тебя в запросе 19 параметров smile Им всем надо передать значения.

хм... а как их передавать то ? не подскажешь?
это 
Код

COMMAND2.parameters.add("Категория", OleDbType.VarWChar, 50, "Категория") 

??? 
а мож как -то проще можно это все сделать?

Автор: diadiavova 27.2.2011, 00:27
Цитата(Andruxa28 @  27.2.2011,  00:11 Найти цитируемый пост)
а мож как -то проще можно это все сделать?

Проще будет, если использовать встроенные инструменты студии, да и при использовании SQL Server вместо эксесса тоже есть кое-какие преимущества. А так можно код и иначе написать, но принцип все равно останется тем же - коллекцию параметров придется инициировать вручную в коде.

Автор: Andruxa28 27.2.2011, 00:32
Цитата(diadiavova @ 27.2.2011,  00:27)

 А так можно код и иначе написать.

А это иначе , лучше(надежнее) того что я накалякал?


Автор: diadiavova 27.2.2011, 00:51
Цитата(Andruxa28 @  27.2.2011,  00:32 Найти цитируемый пост)
А это иначе , лучше(надежнее) того что я накалякал?

В смысле " надежнее"? Тебе просто надо добавить параметры, так что в смысле надежности разницы нет. Хотя сам по себе запрос с 19-ю параметрами выглядит как-то странно.

Посмотри метод AddRange, если совместить его с инициализатором массива, то может получится код, который тебе больше понравится. Но, на самом деле, это дело вкуса и в данном случае без разницы - все равно будет громоздко.

Автор: Andruxa28 27.2.2011, 01:08
Большое спасибо за помощь! Буду разбираться  

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)