IMHO.WS

IMHO.WS (https://www.imho.ws/index.php)
-   Программирование (https://www.imho.ws/forumdisplay.php?f=40)
-   -   Visual Basic - элемент DataGrid (https://www.imho.ws/showthread.php?t=104164)

ёшкина кошка 27.05.2006 19:46

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:

ЕЖ 27.05.2006 20:48

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

Все изменения данных таблиц в БД так или иначе сводятся к команде типа

UPDATE таблица SET поле = значение WHERE номер = <ключ>

Для полей первой таблицы эта, видимо сформированная автоматически, команда проходит нормально, для полей второй таблицы - неизвестно откуда брать ключ.

Обычно такие сджойненые выборки используют только для отображения пользователю справочной информации, а их редактирование производят через дополнительную форму со всеми необходимыми полями. Тогда при нажатии некой кнопки OK/Сохранить можно взять информацию из заполненых пользователем полей и сформировать транзакцию из необходимого количества команд UPDATE, каждая с полями и ключем соответствующей таблицы.

ёшкина кошка 27.05.2006 21:13

огромное человеческое спасибо за ответ :)

у меня изменение данных этих происходит по нажатию на один из переключателей(полю присваивается надпись соответствующая переключателю)...если я правильно поняла, то в моем случае это будет выглядеть примерно так:

в процедуре обработки этого нажатия не менять значения конкретного столбца DataGrid, а обновлять запись в таблице2...

UPDATE таблица2 SET поле = надпись WHERE номер = <ключ>

сейчас буду пробовать! :cool:


Часовой пояс GMT +4, время: 00:32.

Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.