![]() |
Visual Basic - элемент DataGrid
Не могу понять в чем проблема :idontnow:
В форме находятся элемент DataGrid, источником данных для которого является ADO Data. ADO Data в свою очередь объединяет данные из допустим двух аксессовских таблиц - таблица1 (главная) и таблица2 (подчиненная), с помощью SQL запроса: SELECT таблица1.*, таблица2.* FROM таблица1 INNER JOIN таблица2 ON таблица1.номер=таблица2.номер Все объединяется и отображается отлично, но мне нужна возможность изменения данных и последующего их сохранения. Если изменять данные в полях из главной таблицы (таблица1) - никаких проблем. После выхода из программы в аксессовских таблицах находятся измененные данные. НО если изменять данные в полях подчиненной таблицы (таблица2), то при закрытии формы выскакивает ошибка - заголовок: DataGrid ActiveX Control (по-моему так), текст ошибки: "Недостаточно сведений ключевого поля для обновления"... Подскажите, пожалста, как сделать так, чтоб заработало...может действительно что-то не дописала или недоопределила в свойствах важное :confused: |
Как я понимаю, суть проблемы в том, что при таком запросе получается одна единая выборка данных из двух таблиц, и ключем этой выборки становится ключ (номер) первой таблицы. А поле-номер второй таблицы перестает в этой выборке считаться ключевым. Поэтому все изменения полей первой таблицы идут нормально, а на поля второй таблицы идет ошибка.
Все изменения данных таблиц в БД так или иначе сводятся к команде типа UPDATE таблица SET поле = значение WHERE номер = <ключ> Для полей первой таблицы эта, видимо сформированная автоматически, команда проходит нормально, для полей второй таблицы - неизвестно откуда брать ключ. Обычно такие сджойненые выборки используют только для отображения пользователю справочной информации, а их редактирование производят через дополнительную форму со всеми необходимыми полями. Тогда при нажатии некой кнопки OK/Сохранить можно взять информацию из заполненых пользователем полей и сформировать транзакцию из необходимого количества команд UPDATE, каждая с полями и ключем соответствующей таблицы. |
огромное человеческое спасибо за ответ :)
у меня изменение данных этих происходит по нажатию на один из переключателей(полю присваивается надпись соответствующая переключателю)...если я правильно поняла, то в моем случае это будет выглядеть примерно так: в процедуре обработки этого нажатия не менять значения конкретного столбца DataGrid, а обновлять запись в таблице2... UPDATE таблица2 SET поле = надпись WHERE номер = <ключ> сейчас буду пробовать! :cool: |
| Часовой пояс GMT +4, время: 00:32. |
Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.