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

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.016 c
3-67164
Andrio
2003-04-03 12:24
2003.04.21
Как лучше построить таблицу?


7-67589
romychk
2003-03-04 11:16
2003.04.21
Запуск приложения на перле из Д под FreeBSD


14-67470
race1
2003-04-06 13:42
2003.04.21
stretch wallpaper


1-67281
unknown
2003-04-11 11:35
2003.04.21
Таскание окна за любое место


14-67524
Irina
2003-04-04 09:09
2003.04.21
Программирование в Delphi