|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
DBGrid и сложный запрос
Приветствую братьев программеров!
Уже не один день бьюсь над решением задачи. Нужно стандартным набором (ADOConnection, ADODataSource, ADOTable или ADOQuery и конечно же DBGrid), реализовать некоторую систему. Суть конкретики заключается в том, что есть база MSSQL, в которой, примерно 5 таблиц, и есть одна таблица, которая эти таблицы собирает в одну по индексам. И по вычисляемым критериям. В итоге в BDGrid, выводятся собранная таблица, уже с конкретными значениями вместо ID-шников, я написал для ADOQuery запросище и у меня все отлично работает, но вот теперь главный косяк, у меня должно одно поле из этого выбираться из списка! Не беда! Я сделал как рассказано вот тут http://delphi.about.com/od/usedbvcl/l/aa092703a.htm и у меня все получилось, Проблема только одна, за UPDATить выбранную информацию из списка DBGrid->ADOQuery не может, так как пытается записать не в нужную таблицу (т.е. нужно прописать индекс нужного элемента в связующую таблицу), а в другую. И я его понимаю, весь запрос сосотоит из сплошных JOINов... Сделал попытку разбить все на подстановки, т.е. несколько основную и дополнительные TABLE, в которой поля типа Lookup, но у меня почему-то Unknown Error выпадает, хотя связал вроде правильно, но даже если это и заработает, я всеравно не уверен что все это поможет. Есть варианты как решить эту проблему? |
#2
|
||||
|
||||
Вариант очевиден. Поскольку у вас MSSQL то напишите хранимку с тучей параметров, которая знает куда и какое значение распихать по таблицам.
Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#3
|
|||
|
|||
Спасибо за идею!
Вот только один нюанс, я с ними до этого никогда не работал, если тебе не очень сложно, можешь помочь разобраться как лучше это реализовать (приминимо к моей задаче)... Про саму идиологию хранимых процедур, я конечто же почита. Последний раз редактировалось czuryk, 20.04.2009 в 20:51. |
#4
|
||||
|
||||
Ну вот допустим есть запрос вида:
Код:
select Table1.Field1,Table2.Field1 from Table1 left join Table2 on Table1.ID=Table2.ID Мы тогда вызываем хринимку: Код:
AdoStoredProc1.ProcedureName := 'UpdateTable1Table2;1'; AdoStoredProc1.Parameters.ParamValues['ID'] := 1; AdoStoredProc1.Parameters.ParamValues['Val1'] := 'Новое значение Table1Field1'; AdoStoredProc1.Parameters.ParamValues['Val2'] := 'Новое значение Table2Field1'; AdoStoredProc1.ExecProc; а на сервере у нас есть хранимка: Код:
create procedure UpdateTable1Table2(@ID int, @Val1 as varchar(50),@Val2 as varchar(50)) as begin update table Table1 set Field1=@Val1 where Id = @ID update table Table2 set Field1=@Val2 where Id = @ID end Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#5
|
|||
|
|||
А как мне это увязать с DBGrid и что более того - с DBComboBox?
Дело в том, что обновление вызывается не явно, оно вызывается событием обновления DBGrid и происходит вне поля моего контроля. Я могу только перехватить еще событием BeforeEdit, но грамотно вмешатся уже сложнее. Последний раз редактировалось czuryk, 20.04.2009 в 21:46. |
#6
|
||||
|
||||
Ага, дошло наконец что вы хотите. Вы хотите выводить в грид запрос, и в гриде же править его результат? Тогда конечно то что я вам понаписал, мало вам подходит. Вы выложите сюда свой "запросище", будет понятнее проблема.
Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |