Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Базы данных
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 20.04.2009, 17:54
czuryk czuryk вне форума
Прохожий
 
Регистрация: 23.01.2009
Сообщения: 12
Репутация: 10
По умолчанию 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  
Старый 20.04.2009, 19:46
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

Вариант очевиден. Поскольку у вас MSSQL то напишите хранимку с тучей параметров, которая знает куда и какое значение распихать по таблицам.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #3  
Старый 20.04.2009, 20:40
czuryk czuryk вне форума
Прохожий
 
Регистрация: 23.01.2009
Сообщения: 12
Репутация: 10
По умолчанию

Спасибо за идею!

Вот только один нюанс, я с ними до этого никогда не работал, если тебе не очень сложно, можешь помочь разобраться как лучше это реализовать (приминимо к моей задаче)...
Про саму идиологию хранимых процедур, я конечто же почита.

Последний раз редактировалось czuryk, 20.04.2009 в 20:51.
Ответить с цитированием
  #4  
Старый 20.04.2009, 21:25
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

Ну вот допустим есть запрос вида:
Код:
select Table1.Field1,Table2.Field1 from Table1 left join Table2 on Table1.ID=Table2.ID
Очевидно наш запрос необновляемый т.к. нет возможности однозначно определить скока и куда положить, а нам позарез надо в Table1 и Table2 положить значения.
Мы тогда вызываем хринимку:
Код:
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  
Старый 20.04.2009, 21:43
czuryk czuryk вне форума
Прохожий
 
Регистрация: 23.01.2009
Сообщения: 12
Репутация: 10
По умолчанию

А как мне это увязать с DBGrid и что более того - с DBComboBox?
Дело в том, что обновление вызывается не явно, оно вызывается событием обновления DBGrid и происходит вне поля моего контроля. Я могу только перехватить еще событием BeforeEdit, но грамотно вмешатся уже сложнее.

Последний раз редактировалось czuryk, 20.04.2009 в 21:46.
Ответить с цитированием
  #6  
Старый 21.04.2009, 11:00
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

Ага, дошло наконец что вы хотите. Вы хотите выводить в грид запрос, и в гриде же править его результат? Тогда конечно то что я вам понаписал, мало вам подходит. Вы выложите сюда свой "запросище", будет понятнее проблема.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 01:05.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter