| imho.ws |
![]() |
|
|
|
# 1 |
|
Guest
Сообщения: n/a
|
Не могу понять в чем проблема
В форме находятся элемент DataGrid, источником данных для которого является ADO Data. ADO Data в свою очередь объединяет данные из допустим двух аксессовских таблиц - таблица1 (главная) и таблица2 (подчиненная), с помощью SQL запроса: SELECT таблица1.*, таблица2.* FROM таблица1 INNER JOIN таблица2 ON таблица1.номер=таблица2.номер Все объединяется и отображается отлично, но мне нужна возможность изменения данных и последующего их сохранения. Если изменять данные в полях из главной таблицы (таблица1) - никаких проблем. После выхода из программы в аксессовских таблицах находятся измененные данные. НО если изменять данные в полях подчиненной таблицы (таблица2), то при закрытии формы выскакивает ошибка - заголовок: DataGrid ActiveX Control (по-моему так), текст ошибки: "Недостаточно сведений ключевого поля для обновления"... Подскажите, пожалста, как сделать так, чтоб заработало...может действительно что-то не дописала или недоопределила в свойствах важное
|
|
|
# 2 |
|
::VIP::
Регистрация: 19.03.2004
Сообщения: 1 329
![]() ![]() ![]() ![]() |
Как я понимаю, суть проблемы в том, что при таком запросе получается одна единая выборка данных из двух таблиц, и ключем этой выборки становится ключ (номер) первой таблицы. А поле-номер второй таблицы перестает в этой выборке считаться ключевым. Поэтому все изменения полей первой таблицы идут нормально, а на поля второй таблицы идет ошибка.
Все изменения данных таблиц в БД так или иначе сводятся к команде типа UPDATE таблица SET поле = значение WHERE номер = <ключ> Для полей первой таблицы эта, видимо сформированная автоматически, команда проходит нормально, для полей второй таблицы - неизвестно откуда брать ключ. Обычно такие сджойненые выборки используют только для отображения пользователю справочной информации, а их редактирование производят через дополнительную форму со всеми необходимыми полями. Тогда при нажатии некой кнопки OK/Сохранить можно взять информацию из заполненых пользователем полей и сформировать транзакцию из необходимого количества команд UPDATE, каждая с полями и ключем соответствующей таблицы. |
|
|
|
|
# 3 |
|
Guest
Сообщения: n/a
|
огромное человеческое спасибо за ответ
у меня изменение данных этих происходит по нажатию на один из переключателей(полю присваивается надпись соответствующая переключателю)...если я правильно поняла, то в моем случае это будет выглядеть примерно так: в процедуре обработки этого нажатия не менять значения конкретного столбца DataGrid, а обновлять запись в таблице2... UPDATE таблица2 SET поле = надпись WHERE номер = <ключ> сейчас буду пробовать!
|