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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Update нескольких баз из DataGridView, как сделать? 
:(
    Опции темы
yur1221
Дата 28.6.2011, 22:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Всем привет.
Заполняю DataGridView  с помощью SQL запроса, в которjм объединяются 2 базы. Что-то меняю в дата гриде, хочу проапдейтить базы. Естественно он мне пишет: "Динамическое создание SQL для нескольких базовых таблиц не поддерживается". А как тогда лучше поступить, подскажите плиз?

Код:

Код

Dim connetionString As String
    Dim connection As SqlConnection
    Dim adapter As SqlDataAdapter
    Dim ds As New DataSet
    Dim good As String
    Dim sql As String



    Public Sub DataGrid_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles DataGrid.Click
        connetionString = "Data Source=.\SQLEXPRESS1;Initial Catalog=test;User Id=test;Password=*;Trusted_Connection=False"
        connection = New SqlConnection(connetionString)
        sql = "select g.id as Id, g.good as [Название], p.amount as [Кол-во], p.price as [Цена]" + _
        " from good g inner loop join prop p on p.goodid=g.id"
        Try
            connection.Open()
            adapter = New SqlDataAdapter(sql, connection)
            adapter.Fill(ds)
            connection.Close()
            DataGridView1.DataSource = ds.Tables(0)
            Dim builder As New SqlCommandBuilder(adapter)
        Catch ex As Exception
            MsgBox(ex.ToString)
        End Try
    End Sub

    Private Sub BUpdate_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BUpdate.Click

        ' DataGridView1.BeginEdit(True)
        adapter.Update(ds, ds.Tables(0).ToString)

    End Sub

PM MAIL   Вверх
yur1221
Дата 29.6.2011, 21:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Совсем нет идей :(
PM MAIL   Вверх
diadiavova
Дата 29.6.2011, 22:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(yur1221 @  29.6.2011,  22:27 Найти цитируемый пост)
Совсем нет идей 

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


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


Новичок



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

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



Я пробовал создавать мастером tableadapter'ы, первый вытаскивает данные из 1 таблицы, второй из второй. В первом tableadapter'е задаю запрос объединения таблиц, типа как 
Код

"select g.id as Id, g.good as [Название], p.amount as [Кол-во], p.price as [Цена]" + _
        " from good g inner loop join prop p on p.goodid=g.id"

затем заливаю адаптеры в датасеты:

Код

  Me.GoodTableAdapter.FillBy(Me.TestDataSet.good)
  Me.PropTableAdapter.Fill(Me.TestDataSet.prop)


потом заполняю датагрид:

Код

DataGridView1.DataSource = Me.TestDataSet.good


в датагрид все встает прекрасно, но если я меняю в датагриде данные из первой и второй таблицы и затем апдейчу, менятся только первая таблица.. в принципе логично ,т.к. DataGridView1.DataSource = Me.TestDataSet.good

А как же мне сделать так чтобы менялось и во второй табле тоже?

код апдейта:

Код

Me.GoodTableAdapter.Update(Me.TestDataSet.good)
Me.PropTableAdapter.Update(Me.TestDataSet.prop)

PM MAIL   Вверх
diadiavova
Дата 30.6.2011, 10:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



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


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


Новичок



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

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



Мдя.. гимор еще тот  smile, придется лепить все в одну таблицу, спасибо за ответ.
PM MAIL   Вверх
yur1221
Дата 8.7.2011, 23:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(diadiavova @ 30.6.2011,  10:19)
...какая такая необходимость в том, чтобы использовать для этого разные базы....

diadiavova только щас внимательно прочитал ответ , у меня база одна.. таблицы 2 юзается. Вот как бы мне при использовании отношений 2-х таблиц, связать их, вывести в датагриде и проапдейтить каждую в отдельности. Выводить получается, апдейтить тоже.. но только ту таблицу, которая заполняет датагрид первой
PM MAIL   Вверх
diadiavova
Дата 8.7.2011, 23:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Не должно быть в одной базе двух таблиц с одинаковым набором полей. Это грубая ошибка при проектировании базы данных. Забей все в одну таблицу в базе и проблемы не будет. Если надо разделить данные таблиц, то добавь в эту общую таблицу еще одно поле, в котом укажи параметр, по которому данные различаются. Все эти действия не предусмотрены именно потому, что так никто не делает и для этого вся эта система не приспособлена. Можно сделать через жо руками, но зачем? smile 


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


Новичок



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

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



Я мб не так что-то обьяснил? У меня нет одинаковых наборов. 1 таблица- это товар и его производитель, 2- это свойство товара (цена, количество и т.д.) 2 таблица связана со второй по ключевому полю goodid= полю id во второй таблице.
Почему по разным таблицам- потому что из первой юзается имя товара гдето еще, и производитель..чтобы не плодить одинаковые поля в других таблицах

Это сообщение отредактировал(а) yur1221 - 8.7.2011, 23:39
PM MAIL   Вверх
diadiavova
Дата 8.7.2011, 23:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



А что происходить при апдейте второй таблицы?


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


Новичок



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

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



Цитата(diadiavova @ 8.7.2011,  23:42)
А что происходить при апдейте второй таблицы?

Должно происходить или происходит?

1)Должна обновлятся так же как и первая, при внесении изменений в датагриде
2) А она ессно не обновляется ,т.к. в датагрид заливается дататейбл из первой таблицы с соотвествущим запросом там
 о чем я писал чуть выше:

Цитата

...Я пробовал создавать мастером tableadapter'ы, первый вытаскивает данные из 1 таблицы, второй из второй...


Честно говоря мне это нужно позарез осуществить. Хотя бы куда закинуть удочки.. чтото мыслей уже не осталось.

Это сообщение отредактировал(а) yur1221 - 8.7.2011, 23:54
PM MAIL   Вверх
diadiavova
Дата 8.7.2011, 23:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(yur1221 @  9.7.2011,  00:50 Найти цитируемый пост)
Должна обновлятся так же как и первая, при внесении изменений в датагриде

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

Но это уже не сегодня ессно. smile 


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


Новичок



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

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



Пример- ехе-шник скомпилировать?
PM MAIL   Вверх
diadiavova
Дата 9.7.2011, 00:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(yur1221 @  9.7.2011,  00:59 Найти цитируемый пост)
Пример- ехе-шник скомпилировать? 

Что я с ним буду делать? Проект посмотреть, где у тебя есть эта проблема. Ну маленькую базу там сделай с похожей структурой, грид, и функции программы, которые задействованы в твоей проблеме. Чтобы я имел представление о чем мы говорим.


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


Новичок



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

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



Вот архив с проектом и базой. Пароль от архива в личке. Гляньте, плиз, что можно сделать.

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

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

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


 




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


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

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