![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
ADOStoreProc и DBGrid [D6, MSSQL]
gizar © (2003-05-05 08:33:00)Здравствуйте Уважаемые!
Вопрос в следующем:
Исходные: Таблица А с primary key Id и foreigan key Id_B, и скажем полем FieldA; таблица B c primary key Id и полем FieldB. Обе таблице реализованы в SQL 7.0.
Вопрос:
Я пытаюсь организовать вывод и редактирование данных в DBGrid через ADO компоненты (ADO connection, ADO stored procedure). Сохраненная процедура имеет следующий вид:
select A.FieldA, B.FieldB from A, B
where A.Id_b = B.Id
т.е. мы пытаемся редактировать таблицу A.
Все хорошо отражается, но НЕ РЕДАКТИРУЕТСЯ.
При отображениии результатов ADOStoredProc в DBGrid мы получаем подстановку вместо ключа значений из поля FieldB. Соответственно при редактировании в данном изложении Таблицы A таблица B соответсвенно тоже редактируется.
Как с этим бороться? Т.е. как отображать с подстановкой значений из таблицы B, а редактировать только таблицу A соответсвенно подставляя в поле Id_B значение ключа , а не поля FieldB.
С уважением
gizar (2003-05-06 12:34:00) [1]И все же может кто подскажет...
gizar (2003-05-06 08:29:00) [2]--и потом или в набор А добавить поле lookup,
в смысле добавить поле lookup, в хелпе написано что lookup осуществляет поиск...?
не совсем понятно ...
jocko (2003-05-05 16:19:00) [3]Вариантов много, по аглицки это пишется lookup можно посмотреть в хелпе :)
В приведенном варианте кажется можно ничего и не связывать в селекте а просто выполнить отдельно 2 запроса (основной А + справочник В) и потом или в набор А добавить поле lookup, либо вообще можно использовать dbLookupComboBox - еще проще.
а потом выполнять сохранение на сервере с помощью хран процедуры, в которую передавать в кач. параметров значения полей А.
gizar (2003-05-05 15:16:00) [4]
-А какой компонент используется ADoQuery или ADODataSet не
-имеет значения - они суть одно и то же.
-Вывод - использовать для upd и ins хран. процедуру. и лукап
-поля.
А нельзя ли поподробнее ?
А поповоду редактирования: радектировать нужно таблицу A отображая при этом в гриде вместо A.id_b B.FieldB...
jocko (2003-05-05 13:57:00) [5]я конечно не спесиалист, но
> select A.FieldA, B.FieldB from A, B
кажется называется декартовым произведением, интересно и что же тут вообще можно редактировать?
select A.FieldA, B.FieldB from A inner join B on A.Id_b = B.Id
кажется более осмысленным, однако, редактирование опять таки будет возможным только если связи таблиц одна к одной, иначе будет ругаться, типа что запись была изменена и т.д.
А какой компонент используется ADoQuery или ADODataSet не имеет значения - они суть одно и то же.
Вывод - использовать для upd и ins хран. процедуру. и лукап поля.
gizar (2003-05-05 13:15:00) [6]нет вроде у меня работает все через ADOStoredProc работает...
А что через ADODataSet..., есть вариант?
Соловьев (2003-05-05 10:11:00) [7]
> Все хорошо отражается, но НЕ РЕДАКТИРУЕТСЯ.
не внимательно я посмотрел, у тебя же соединение 2-х таблиц, так оно редактируется только через ADoQuery или ADOCommand
Соловьев (2003-05-05 10:00:00) [8]
> select A.FieldA, B.FieldB from A, B
> where A.Id_b = B.Id
> т.е. мы пытаемся редактировать таблицу A.
> Все хорошо отражается, но НЕ РЕДАКТИРУЕТСЯ.
> При отображениии результатов ADOStoredProc в DBGrid мы получаем
> подстановку вместо ключа значений из поля FieldB.
ну и за чем тебе SP?
ADODataSet и забудь пока про SP.