Страница: 1 |
Как править в DataGrid. Очень нужно. Поле Producer править не получается , а на остальных пишет: "Недостаточно сведений ключевого поля для обновления."
DataGrid не может изенять данные в исходных таблицах если он заполняется из нескольких таблиц. Это стандартное правило языка SQL, с точки зрения которого DatagRid всего лишь view(не знаю как это будет по-русски). Сомневаюсь, что Microsoft умудрился обойти этот запрет. Что жекасется запроса - нужно так: select f.ID,f.Name,p.Name as Producer from Firms f inner join Producer p on f.ID=p.ID where p.Goods=2941 Страница: 1 |
Вопрос: Как править в DataGrid. Очень нужно.
Добавлено: 18.06.04 19:50
Автор вопроса: FoxMalder133 | ICQ: 305919394
Не могу разобраться как править данные, если используется вложенный запрос.
Пример: SELECT ID, Name, (SELECT Name FROM Producer) AS Producer FROM Firms
Ответы
Всего ответов: 6
Номер ответа: 1
Автор ответа:
ol2003
Вопросов: 3
Ответов: 122
Профиль | | #1
Добавлено: 19.06.04 19:03
Что за странный SQL?
Номер ответа: 2
Автор ответа:
FoxMalder133
ICQ: 305919394
Вопросов: 8
Ответов: 17
Профиль | | #2
Добавлено: 21.06.04 10:19
Краноречивый ответ, а что странного?
Номер ответа: 3
Автор ответа:
ol2003
Вопросов: 3
Ответов: 122
Профиль | | #3
Добавлено: 23.06.04 06:13
Такой SELECT как у тебя возвращает все. Если уж ты делаешь запрос к 2-м и более таблицам, так надо было бы установить какой-то фильтр соответствия. И между прочим DataGrid заполненный данными из более чем одной таблицы по определению не может обновлять ни одну из них.
Номер ответа: 4
Автор ответа:
FoxMalder133
ICQ: 305919394
Вопросов: 8
Ответов: 17
Профиль | | #4
Добавлено: 23.06.04 10:52
-DataGrid может править хоть несколько таблиц, если они определены в конструкции FROM.
Такой запрос прокатит:
SELECT F.ID, F.Name, P.Name AS Producer FROM Firms, Producer WHERE F.ID=P.ID(+)
-Но что делать если необходимо показать (править) все данные из первой таблицы (Firms), и показать (править) все данные во воторой при дополнительном условии (Goods_ID=2941).
Пример:
SELECT ID, Name, (SELECT Name FROM Producer WHERE F.ID=P.ID AND P.Goods_ID=2941) AS Producer FROM Firms
Я пытался предоставить данный запрос DataGrid'у, но тогда поле Producer в режиме только чтение.
Использовать UNION ALL тоже безполезно.
Номер ответа: 5
Автор ответа:
ol2003
Вопросов: 3
Ответов: 122
Профиль | | #5
Добавлено: 23.06.04 18:11
Номер ответа: 6
Автор ответа:
FoxMalder133
ICQ: 305919394
Вопросов: 8
Ответов: 17
Профиль | | #6
Добавлено: 24.06.04 10:40
-При твоем запросе выбирутся только те значения у которых P.Goods_ID=2941, а я говорил о левом соединении двух таблиц. Если на то пошло тогда:
SELECT F.ID, F.Name, P.Name AS Producer FROM Firms LEFT JOIN Producer ON F.ID=P.ID AND P.Goods_ID=2941
-Я устал говорить, что DATAGRID может править несколько таблиц посему пробуй так на примере Access'а:
1-Создай базу данных;
2-таблицу Firms c полями ID и Name (ID поставь как первичный ключ)
3-таблицу Producer c полями ID и Name (ID поставь как первичный ключ)
4-помести на форму DATAGRID
5-помести на форму Adodc1
6-свяжи ADO c базой и напиши запрос:
SELECT F.ID, P.ID, F.Name, P.Name
FROM Firms F LEFT JOIN Producer P ON F.ID=P.ID
7-измени поле и перейди на другую строку.
8-открой Access и убедись в см. выше "Это стандартное правило языка SQL, с точки зрения которого DatagRid всего лишь view"