Форум: "Базы";
Текущий архив: 2003.04.21;
Скачать: [xml.tar.bz2];
ВнизCashedUpdates на результат SP Найти похожие ветки
← →
koks (2003-04-01 14:08) [0]Уважаемые мастера !
Подскажите, как грамотно наложить на результат SELECT-а из Suspend-процедуры кэшированные изменения...
SUSPEND - процедура производит объединение 5-ти таблиц. Че-то я совсем запутался - что надо обновлять - то ли пять таблиц через IBUdateSQL для каждой, то ли через вызовы отдельных SP (для обновления, удаления, вставки), которые уже будут разносить данные по таблицам.
← →
koks (2003-04-01 15:45) [1]ПАМАГИТЕ !!!
← →
zacho (2003-04-01 16:46) [2]Кэшированные или нет, здесь роли не играет.
И вообще, для подобных целей советую использовать TIBDataSet.
Теперь конкретнее :)
1. А ты уверен, что тебе надо вносить изменения во все 5 таблиц ? Просто наиболее типичная ситуация, когда объединение нескольких таблиц делается для того, чтобы вытащить данные из "справочников" на которые ссылается "основная" таблица. В этом случае, как правило, редактировать "справочники" не надо, достаточно вносить изменения в "основную" таблицу. Т.е. в SelectSQL пусть будет что-то типа SELECT ID,FILED_1,FIELD_2,..,FIELD_N FROM MY_SP(:PARAM_1,..), в ModifySQL - UPDATE MY_TABLE SET FIELD_1=:FIELD1, ... WHERE ID=:ID и т.п.
2. Действительно, надо вносить изменения во все связанные таблицы. Сделать это можно несколькими способами, один из самых простых - создать SP для вставки и модификации данных. Тогда в ModifySQL - EXECUTE PROCEDURE MY_UPDATE_PROC(:ID,FIELD_1,...) и т.д.
3. Если в SP у тебя только простой SELECT с объединением таблиц без каких-либо вычислений и т.п. то можно сделать аналогичный VIEW с триггерами BEFORE UPDATE, BEFORE INSERT, BEFORE DELETE и из приложения работать с ним как с обычной таблицей.
← →
koks (2003-04-02 09:35) [3]2 zacho . Во-первых, большое спасибо за подробный ответ.
Во-вторых - по порядку:
1. 5 таблиц менять - уверен. Там у меня справочников нет вообще. Все справочники я использую только через lookup-поля ... принципиально.
2. Я так и сделал - создал 3 SP: SP_MODIFY, SP_DELETE, SP_INSERT
(c рефрешем понятно). с соответствующими параметрами. Только в Firebird EXECUTE PROCEDURE MY_SP :param <- запускается без скобок. Так вот в IBUpdateSQL в соответствующем ******SQL вызывал соответствующую SP. - Delphi ругался... В ран-тайме при вызове ApplyUpdates вылетало исключение Update failed. Мне показалось (чисто интуитивно :)) что ошибка идеологическая - т.е. типа свойства IBUpdateSQL.*****SQL не понимают вызов EXECUTE PROCEDURE
3. Интересный вариант кроме одного - читаю этот форум регулярно - многие не советуют использовать Veiews, тем более обновляемые.
← →
zacho (2003-04-02 09:44) [4]
> при вызове ApplyUpdates вылетало исключение Update failed.
Так происходит потому, что ожидается RowsAffected=1, а при вызове SP RowsAffected возвращает 0. Т.ч. тебе просто надо обработать эту ошибку.
> 3. Интересный вариант кроме одного - читаю этот форум регулярно
> - многие не советуют использовать Veiews, тем более обновляемые.
С чего бы это ? Я проблем не замечал.
← →
koks (2003-04-02 11:05) [5]Zacho - так-так, уже теплее... Можно маленькое уточнение - в каком событии мне надо анализировать этот RowsAffected..
Заранее большое спасибо...
← →
Johnmen (2003-04-02 11:27) [6]Не надо тебе ничего анализировать !
см.
>zacho © (01.04.03 16:46)
>>И вообще, для подобных целей советую использовать TIBDataSet.
← →
zacho (2003-04-02 11:27) [7]Проще всего плюнуть на IBQuery и использовать IBDataSet - в нем все нормально работает.
← →
koks (2003-04-02 11:55) [8]Хорошо - если я ВАС правильно понял, то в IBDataSet в свойствах ******SQL можно свободно использовать, например:
EXECUTE PROCEDURE Modify_SP
:param1
:param2
:param3
или как...
← →
zacho (2003-04-02 12:00) [9]
> koks © (02.04.03 11:55)
Можно, можно ...
А не быстрее ли попробовать, чем ждать ответа ?
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2003.04.21;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.009 c