Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

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.


Наверх

Титульная страница Поиск, карта сайта Написать письмо