Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.05.26;
Скачать: CL | DM;

Вниз

ADOStoreProc и DBGrid   Найти похожие ветки 

 
gizar   (2003-05-05 08:33) [0]

Здравствуйте Уважаемые!

Вопрос в следующем:

Исходные: Таблица А с 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.

С уважением


 
Соловьев ©   (2003-05-05 10:00) [1]


> select A.FieldA, B.FieldB from A, B
> where A.Id_b = B.Id
> т.е. мы пытаемся редактировать таблицу A.
> Все хорошо отражается, но НЕ РЕДАКТИРУЕТСЯ.
> При отображениии результатов ADOStoredProc в DBGrid мы получаем
> подстановку вместо ключа значений из поля FieldB.

ну и за чем тебе SP?
ADODataSet и забудь пока про SP.


 
Соловьев ©   (2003-05-05 10:11) [2]


> Все хорошо отражается, но НЕ РЕДАКТИРУЕТСЯ.

не внимательно я посмотрел, у тебя же соединение 2-х таблиц, так оно редактируется только через ADoQuery или ADOCommand


 
gizar   (2003-05-05 13:15) [3]

нет вроде у меня работает все через ADOStoredProc работает...
А что через ADODataSet..., есть вариант?


 
jocko ©   (2003-05-05 13:57) [4]

я конечно не спесиалист, но
> 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 15:16) [5]


-А какой компонент используется ADoQuery или ADODataSet не
-имеет значения - они суть одно и то же.
-Вывод - использовать для upd и ins хран. процедуру. и лукап
-поля.

А нельзя ли поподробнее ?

А поповоду редактирования: радектировать нужно таблицу A отображая при этом в гриде вместо A.id_b B.FieldB...


 
jocko ©   (2003-05-05 16:19) [6]

Вариантов много, по аглицки это пишется lookup можно посмотреть в хелпе :)
В приведенном варианте кажется можно ничего и не связывать в селекте а просто выполнить отдельно 2 запроса (основной А + справочник В) и потом или в набор А добавить поле lookup, либо вообще можно использовать dbLookupComboBox - еще проще.
а потом выполнять сохранение на сервере с помощью хран процедуры, в которую передавать в кач. параметров значения полей А.


 
gizar   (2003-05-06 08:29) [7]

--и потом или в набор А добавить поле lookup,
в смысле добавить поле lookup, в хелпе написано что lookup осуществляет поиск...?

не совсем понятно ...


 
gizar   (2003-05-06 12:34) [8]

И все же может кто подскажет...



Страницы: 1 вся ветка

Текущий архив: 2003.05.26;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.012 c
1-83538
Valentino
2003-05-13 11:16
2003.05.26
Random...


4-83821
volph
2003-03-29 22:46
2003.05.26
Перетаскивание окна за любою его часть мышкой


14-83733
vopros
2003-05-07 10:19
2003.05.26
Как в dgridEh фокус (подсвеченая строка) менять его цвет?


7-83766
Vick
2003-03-25 17:22
2003.05.26
user32.dll


3-83343
Skalp
2003-05-05 13:49
2003.05.26
При вызове DeleteRecords(arAll) возникает исключение