imho.ws
IMHO.WS  

Вернуться   IMHO.WS > Компьютеры > Программирование
Опции темы
Старый 27.05.2006, 19:46     # 1
ёшкина кошка
Guest
 
Сообщения: n/a

Question Visual Basic - элемент DataGrid

Не могу понять в чем проблема

В форме находятся элемент DataGrid, источником данных для которого является ADO Data.
ADO Data в свою очередь объединяет данные из допустим двух аксессовских таблиц - таблица1 (главная) и таблица2 (подчиненная), с помощью SQL запроса:

SELECT таблица1.*, таблица2.* FROM таблица1 INNER JOIN таблица2 ON таблица1.номер=таблица2.номер

Все объединяется и отображается отлично, но мне нужна возможность изменения данных и последующего их сохранения.
Если изменять данные в полях из главной таблицы (таблица1) - никаких проблем. После выхода из программы в аксессовских таблицах находятся измененные данные.
НО если изменять данные в полях подчиненной таблицы (таблица2), то при закрытии формы выскакивает ошибка - заголовок: DataGrid ActiveX Control (по-моему так), текст ошибки: "Недостаточно сведений ключевого поля для обновления"...

Подскажите, пожалста, как сделать так, чтоб заработало...может действительно что-то не дописала или недоопределила в свойствах важное
 
Старый 27.05.2006, 20:48     # 2
ЕЖ
::VIP::
 
Регистрация: 19.03.2004
Сообщения: 1 329

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

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

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

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

Обычно такие сджойненые выборки используют только для отображения пользователю справочной информации, а их редактирование производят через дополнительную форму со всеми необходимыми полями. Тогда при нажатии некой кнопки OK/Сохранить можно взять информацию из заполненых пользователем полей и сформировать транзакцию из необходимого количества команд UPDATE, каждая с полями и ключем соответствующей таблицы.
ЕЖ вне форума  
Старый 27.05.2006, 21:13     # 3
ёшкина кошка
Guest
 
Сообщения: n/a

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

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

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

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

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


Ваши права в разделе
Вы НЕ можете создавать новые темы
Вы не можете отвечать в темах.
Вы НЕ можете прикреплять вложения
Вы НЕ можете редактировать свои сообщения

BB код Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.

Быстрый переход


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




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