| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > VB .NET > Update нескольких баз из DataGridView |
| Автор: yur1221 28.6.2011, 22:38 | ||
| Всем привет. Заполняю DataGridView с помощью SQL запроса, в которjм объединяются 2 базы. Что-то меняю в дата гриде, хочу проапдейтить базы. Естественно он мне пишет: "Динамическое создание SQL для нескольких базовых таблиц не поддерживается". А как тогда лучше поступить, подскажите плиз? Код:
|
| Автор: yur1221 29.6.2011, 21:27 |
| Совсем нет идей :( |
| Автор: diadiavova 29.6.2011, 22:10 |
Идеи есть, но сам их не пробовал. Попробуй обновлять не весь датасет, а таблицы поотдельности. В дизайнере датасета добавь к адаптерам таблиц соответствующие запросы и выполняй их. Ну это если речь об идее, а готового решения нет |
| Автор: yur1221 29.6.2011, 22:41 | ||||||||
Я пробовал создавать мастером tableadapter'ы, первый вытаскивает данные из 1 таблицы, второй из второй. В первом tableadapter'е задаю запрос объединения таблиц, типа как
затем заливаю адаптеры в датасеты:
потом заполняю датагрид:
в датагрид все встает прекрасно, но если я меняю в датагриде данные из первой и второй таблицы и затем апдейчу, менятся только первая таблица.. в принципе логично ,т.к. DataGridView1.DataSource = Me.TestDataSet.good А как же мне сделать так чтобы менялось и во второй табле тоже? код апдейта:
|
| Автор: diadiavova 30.6.2011, 10:19 |
| Ну вообще-то, хранить однотипные данные надо в одном месте, поэтому я уж не знаю, какая такая необходимость в том, чтобы использовать для этого разные базы. Но если уж кровь с носа нужно, то придется львиную долю работы вручную делать. Я бы добавил в датасет еще одну таблицу, в которой будут содержаться данные из обеих таблиц, связанными с базами. После заполнения таблиц из баз, данные вручную передавать в это таблицу, в ней, по всей видимости, еще надо будет сделать поле, в котором будет указано, из какой базы эта запись. При обновлении раскидывать данные из этой таблицы по адаптерам, связанным с базами и уже из них выполнять обновление. Правда тут еще надо определить, куда пихать данные, которые были добавлены во время редактирования, но я полагаю у тебя есть ответ на этот вопрос. А вообще, лучше создать одну базу, если это возможно. |
| Автор: yur1221 30.6.2011, 10:49 |
| Мдя.. гимор еще тот |
| Автор: yur1221 8.7.2011, 23:17 | ||
diadiavova только щас внимательно прочитал ответ , у меня база одна.. таблицы 2 юзается. Вот как бы мне при использовании отношений 2-х таблиц, связать их, вывести в датагриде и проапдейтить каждую в отдельности. Выводить получается, апдейтить тоже.. но только ту таблицу, которая заполняет датагрид первой |
| Автор: diadiavova 8.7.2011, 23:29 |
| Не должно быть в одной базе двух таблиц с одинаковым набором полей. Это грубая ошибка при проектировании базы данных. Забей все в одну таблицу в базе и проблемы не будет. Если надо разделить данные таблиц, то добавь в эту общую таблицу еще одно поле, в котом укажи параметр, по которому данные различаются. Все эти действия не предусмотрены именно потому, что так никто не делает и для этого вся эта система не приспособлена. Можно сделать через жо руками, но зачем? |
| Автор: yur1221 8.7.2011, 23:37 |
| Я мб не так что-то обьяснил? У меня нет одинаковых наборов. 1 таблица- это товар и его производитель, 2- это свойство товара (цена, количество и т.д.) 2 таблица связана со второй по ключевому полю goodid= полю id во второй таблице. Почему по разным таблицам- потому что из первой юзается имя товара гдето еще, и производитель..чтобы не плодить одинаковые поля в других таблицах |
| Автор: diadiavova 8.7.2011, 23:42 |
| А что происходить при апдейте второй таблицы? |
| Автор: yur1221 8.7.2011, 23:50 | ||||
Должно происходить или происходит? 1)Должна обновлятся так же как и первая, при внесении изменений в датагриде 2) А она ессно не обновляется ,т.к. в датагрид заливается дататейбл из первой таблицы с соотвествущим запросом там о чем я писал чуть выше:
Честно говоря мне это нужно позарез осуществить. Хотя бы куда закинуть удочки.. чтото мыслей уже не осталось. |
| Автор: yur1221 8.7.2011, 23:59 |
| Пример- ехе-шник скомпилировать? |
| Автор: diadiavova 9.7.2011, 00:03 |
Что я с ним буду делать? Проект посмотреть, где у тебя есть эта проблема. Ну маленькую базу там сделай с похожей структурой, грид, и функции программы, которые задействованы в твоей проблеме. Чтобы я имел представление о чем мы говорим. |
| Автор: yur1221 9.7.2011, 00:39 |
| Вот архив с проектом и базой. Пароль от архива в личке. Гляньте, плиз, что можно сделать. |
| Автор: diadiavova 11.7.2011, 21:28 | ||
| Посмотрел я твой проект(непонятно зачем ты его зашифровал, ну да ладно), опять-таки смысла в разделении на две таблицы я не увидел. У тебя там связь один к одному. Это все можно в одну таблицу уместить и не мучиться. Твой проект у меня не захотел запускаться, поскольку там не было подключения к базе(видимо что-то изменилось во время апгрейда проекта). Поскольку апдейт выполняется для одной таблицы, то все, что могу посоветовать в случае, если ты оставишь две таблицы(хотя этого и не стоит делать) - это изменить значение свойства UpdateCommand адаптера этой таблицы. Когда ты его обновляешь выполняется команда записанная именно в этом свойстве. Допиши туда инструкции обновления и второй таблицы тоже. Вот, что выполняется при апдейте сейчас
|
| Автор: yur1221 12.7.2011, 19:22 | ||||
Это таблицы для примера. В реальном проекте таблицы по серьезнее. Жаль что не помог :(
Да там все тоже написано. В проекте же есть. А обновляется одна таблица, потому что
Жаль, но все равно спасибо. |
| Автор: diadiavova 12.7.2011, 20:06 | ||||
если в реальном проекте одной записи первой таблицы соответствует строго одна запись второй, то это не имеет значения. Если нет, то и в этом проекте не надо было так делать, поскольку сбивает с толку. Я здесь привел текст запроса, который выполняется при обновлении. Никаких упоминаний о таблице prop я там не заметил. Возможно что-то просмотрел. Грид обычно привязывают к датасету
|