Модераторы: diadiavova, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> сохранение данных в базу после редактирования, нужна помощь 
V
    Опции темы
thicking
Дата 20.4.2009, 16:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 20
Регистрация: 27.3.2009

Репутация: нет
Всего: нет



Такая проблема, после изменения DataRow не могу сохранить изменения в базу
Вот код: 
Код

Public Class Student
    Public dataSet As New DataSet("postgres")
    Public DataAdapter As OdbcDataAdapter
    Public table As DataTable
    Public count_row As Integer
    Public row1 As DataRow
    Public i As Integer

Private Sub Student_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        
        DataAdapter = DataRead("SELECT students.fio, students.adress, students.obrazov, students.data_rozhden, students.tel, students.stud_bil_n, students.zachet, grup.kur, spec.name, spec.shifr, prep.name, students.zachisl FROM students, grup, spec, prep WHERE students.grup = grup.id And grup.spec = spec.id And grup.kurat = prep.id ;") 'формируем SQL запрос
        DataAdapter.Fill(dataSet, "spec")
        table = dataSet.Tables("spec")  
        count_row = table.Rows.Count
    


        row1 = table.Rows(0)
        TextBox1.Text = row1("fio").ToString
        ComboBox1.Text = row1("shifr").ToString & "   " & row1("name").ToString
        TextBox4.Text = row1("obrazov").ToString
        TextBox5.Text = row1("adress").ToString
        TextBox6.Text = row1("tel").ToString
        TextBox38.Text = row1("zachet").ToString
        TextBox37.Text = row1("stud_bil_n").ToString
        Select Case row1("zachisl").ToString
            Case "1"
                RadioButton1.Checked = True
            Case "2"
                RadioButton3.Checked = True
            Case "3"
                RadioButton2.Checked = True
        End Select
   End Sub

 Private Sub Save_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Save.Click
      
        For i = 0 To table.Columns.Count - 1
            table.Columns(i).ReadOnly = False
        Next
        
        row1 = table.Rows(0)
        row1.BeginEdit()
        row1("fio") = TextBox1.Text
        row1("obrazov") = TextBox4.Text
        row1("adress") = TextBox5.Text
        row1("tel") = TextBox6.Text
        row1("zachet") = TextBox38.Text
        row1("stud_bil_n") = TextBox37.Text

        If RadioButton1.Checked = True Then row1("zachisl") = "1"

        If RadioButton3.Checked = True Then row1("zachisl") = "2"

        If RadioButton2.Checked = True Then row1("zachisl") = "3"
        row1.EndEdit()
        row1.AcceptChanges()
        DataAdapter.Update(table)

    End Sub
End Class


Может я что-то не так делаю? Наставьте на путь истинный! 
PM MAIL   Вверх
diadiavova
Дата 21.4.2009, 00:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 8
Всего: 142



А почему не воспользоваться встроенными инструментами для работы с данными? Вот приаттачиваю пример, где всё сохраняется, и при этом "ручками" я написал ровно одну строчку кода.

Присоединённый файл ( Кол-во скачиваний: 12 )
Присоединённый файл  DBSample.rar 198,30 Kb


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
thicking
Дата 21.4.2009, 13:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 20
Регистрация: 27.3.2009

Репутация: нет
Всего: нет



Есть определенные трудности, поэтому готовыми инструментами сделать не вариант. И у тебя в примере 1 таблица, а у меня около 11. 
PM MAIL   Вверх
diadiavova
Дата 21.4.2009, 13:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 8
Всего: 142



Я свой пример сляпал минут за пять, просто для иллюстрации. Из твоего примера не вполне ясно, что откуда берётся. Выложи небольшой проект с такой же проблемой как у тебя, тогда можно будет подумать, а по куску кода ничего не определишь.

Цитата(thicking @  21.4.2009,  13:10 Найти цитируемый пост)
Есть определенные трудности, поэтому готовыми инструментами сделать не вариант. 

Какие?


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
thicking
Дата 24.4.2009, 18:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 20
Регистрация: 27.3.2009

Репутация: нет
Всего: нет



Цитата(diadiavova @  21.4.2009,  11:18 Найти цитируемый пост)
Цитата(thicking @  21.4.2009,  13:10 Найти цитируемый пост)
Есть определенные трудности, поэтому готовыми инструментами сделать не вариант. 

Какие? 


1. Это одно из условий мой дипломной работы
2. Использование динамически созданных объектов несколько повышает быстродействие.

Цитата(diadiavova @  21.4.2009,  11:18 Найти цитируемый пост)
Я свой пример сляпал минут за пять, просто для иллюстрации. Из твоего примера не вполне ясно, что откуда берётся. Выложи небольшой проект с такой же проблемой как у тебя, тогда можно будет подумать, а по куску кода ничего не определишь.


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

 Private Sub Save_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Save.Click
        Save.Visible = False
        

        For i = 0 To table.Columns.Count - 1
            table.Columns(i).ReadOnly = False
        Next
        row1 = table.Rows(0)
        row1.BeginEdit()
        row1("fio") = TextBox1.Text
        row1("obrazov") = TextBox4.Text
        row1("adress") = TextBox5.Text
        row1("tel") = TextBox6.Text
        row1("zachet") = TextBox38.Text
        row1("stud_bil_n") = TextBox37.Text

        If RadioButton1.Checked = True Then row1("zachisl") = "1"

        If RadioButton3.Checked = True Then row1("zachisl") = "2"

        If RadioButton2.Checked = True Then row1("zachisl") = "3"
        row1.EndEdit()
        
        Dim string_connection As String
        string_connection = StringConnectPostgreSQL()
        Dim connect_odbc As New OdbcConnection(string_connection)
        
        DataAdapter.UpdateCommand = New OdbcCommand("Update students set fio = ?fio", connect_odbc)
        DataAdapter.UpdateCommand.Parameters.Add("?fio", OdbcType.Text, 0, "fio")
        TextBox2.Text = connect_odbc.State.ToString
        Try
            DataAdapter.Update(dataSet, "spec")
            TextBox2.Text = "обновленно"
        Catch ex As Exception
            TextBox2.Text = "не обновленно"
        End Try


    End Sub


и если в строке 

Код

DataAdapter.UpdateCommand = New OdbcCommand("Update students set fio = ?fio", connect_odbc)

оставить так как есть, ругается на такую ошибку: ERROR [42601] ERROR: ошибка синтаксиса в или рядом "fio"; Error while executing the query
а если я явно задаю значение для fio, то тут все проходит нормально

Как я понял знак вопроса в ODBC ( set fio = ?fio), это теже самое знак @ в oleDB 
или я что-то не так делаю?

Это сообщение отредактировал(а) thicking - 24.4.2009, 18:40
PM MAIL   Вверх
diadiavova
Дата 24.4.2009, 20:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 8
Всего: 142



Цитата(thicking @  24.4.2009,  18:07 Найти цитируемый пост)
Как я понял знак вопроса в ODBC ( set fio = ?fio), это теже самое знак @ в oleDB 
или я что-то не так делаю?

Я точно не помню как это делается и студии под рукой нет, но делается это не так.  smile 
В эксесе параметры действительно обозначаются знаками вопроса, но (если не ошибаюсь) за ними не должно ничего следовать. То есть не  set fio = ?fio, а  set fio = ?. При вызове сопоставление аргументов параметров осуществляется в соответствии с порядком следования. То есть первый аргумент будет присваиваться первому параметру, второй - второму и т. д.

Я могу ошибаться, но по-моему так.


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
thicking
Дата 25.4.2009, 23:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 20
Регистрация: 27.3.2009

Репутация: нет
Всего: нет



Цитата(diadiavova @  24.4.2009,  18:36 Найти цитируемый пост)
точно не помню как это делается и студии под рукой нет, но делается это не так.  smile 
В эксесе параметры действительно обозначаются знаками вопроса, но (если не ошибаюсь) за ними не должно ничего следовать. То есть не  set fio = ?fio, а  set fio = ?. При вызове сопоставление аргументов параметров осуществляется в соответствии с порядком следования. То есть первый аргумент будет присваиваться первому параметру, второй - второму и т. д.

Я могу ошибаться, но по-моему так. 



Да, именно так. Спасибо огромное! Тему можно считать закрытой!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума VB .NET
diadiavova
  • Прежде чем задать вопрос, воспользуйтесь поиском: возможно Ваш вопрос уже обсуждался и на него был получен ответ.
  • Если такой же вопрос не найден, не стоит задавать свой вопрос в любую тему, создайте новую.
  • Заголовок темы должен отображать ее суть.
  • Содержание поста должно описывать проблему понятно, но в то же время, по возможности, лаконично. Сначала следует описать суть вопроса, потом можно привести пример кода, не вынуждайте других участников угадывать в чем Ваша проблема - телепатов здесь нет.
  • Будьте взаимно вежливы и дружелюбны.
  • При оформлении сообщений используйте форматирование, примеры кода заключайте в теги [CODE=vbnet][/CODE].
  • Также ознакомьтесь с общими правилами, действующими на всем форуме.
  • Если вопрос решен, не забывайте помечать тему решенной(вверху темы есть ссылка). Кроме того, если Вы хотите отблагодарить участников, оказавших помощь в решении, можно повысить им репутацию, в случае, если у Вас менее 100 сообщений в форуме и функция изменения репутации Вам недоступна, можете написать сюда.
  • Общие вопросы по программированию на платформе .NET обсуждаются здесь.
  • Литература по VB .NET обсуждается здесь.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, diadiavova.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | VB .NET | Следующая тема »


 




[ Время генерации скрипта: 0.0467 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.