![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Stored Proc [D7, IB6.x]
Виктор © (2004-04-14 15:58:00)Подскажите пожалуста :
имеется база, в ней создана StoredProcedure изменяющая таблицы по входящим параметрам;
её выполняю праграммно посредством IBStoredProc;
для неё нужен commit или она должна это делать на автомате?
Соловьев (2004-04-14 18:30:00) [21]
> Vlad © (14.04.04 18:25) [23]
Я говорил не про кешированные изменения а про то что IBX не такой уже и отстой.
Vlad (2004-04-14 18:25:00) [22]
> Соловьев © (14.04.04 18:22) [22]
А никто не говорил, что от этого пострадает функциональность, или что-то перестанет работать.
Просто обычно в понятие ApplyUpdates вкладывают сброс кэша в базу, но никакой работы с транзакциями
Соловьев (2004-04-14 18:22:00) [23]
> Johnmen © (14.04.04 18:13) [19]
> >Vlad © (14.04.04 17:53) [18]
>
> Ну что тут сказать... Это глупость (?) Джеффа О.
> Поскольку происходит смешение понятий механизма кеширования
> и транзакционного механизма. А это как сравнивать мыльную
> пену с ракеткой для тенниса...:)
> Впрочем, про отца IBX и его детище много написано...
> Отстой, короче. По кр.мере с моей т.з.
У меня есть несколько клиентов под IBX - работает уже более 2-х лет. За это время только функциональность подтягивал(сейчас пишу на плюсах)... Все конечно завистит от решаемых задач, но ИМХО и с IBX можно нормально жить...
Johnmen (2004-04-14 18:19:00) [24]Что интересно, что в FIB+ тоже решили, что метод ApplyUpdates объекта T..Database подразумевает подтверждение тр-ии :)
А это значит, что смысл в этот метод вкладывается не тот, что в случае для НД...
Вот же ...
Vlad (2004-04-14 18:17:00) [25]
> Johnmen © (14.04.04 18:13) [19]
Согласен, тем более что коммит производится независимо от состояния проперти CachedUpdates
Johnmen (2004-04-14 18:13:00) [26]>Vlad © (14.04.04 17:53) [18]
Ну что тут сказать... Это глупость (?) Джеффа О.
Поскольку происходит смешение понятий механизма кеширования и транзакционного механизма. А это как сравнивать мыльную пену с ракеткой для тенниса...:)
Впрочем, про отца IBX и его детище много написано...
Отстой, короче. По кр.мере с моей т.з.
Vlad (2004-04-14 17:53:00) [27]
> Johnmen © (14.04.04 17:47) [16]
Я извиняюсь, но в методе TIBDatabase.ApplyUpdates
стоит TR.CommitRetaining (TR - транзакция )
Курдль (2004-04-14 17:53:00) [28]
> методы ApplyUpdates никогда не приводят к неявному коммиту...
Ну, поразмыслите логически - к чему они приводят? К записи данных в БД (если все Ок) или откату (если что-то не так). А на стороне сервера это никак, иначе чем коммитом не достичь!
Можете для чистоты экскремента запустить на локальном компе какой-нить Iris и отследить траффик клиент-сервер.
Johnmen (2004-04-14 17:47:00) [29]Ну, во-первых, не во всех "своих программах" я пользуюсь кешированием.
Во-вторых, транзакциями я управляю сам, и это абсолютно не зависит от наличия/отсутствия кеширования НД.
И в-третьих, методы ApplyUpdates никогда не приводят к неявному коммиту...
Курдль (2004-04-14 17:42:00) [30]И что, во всех своих программах для "фиксирования кэшированных изменений" ты открываешь транзакции/закрываешь/откатываешь и т.п.?!!
Johnmen (2004-04-14 17:40:00) [31]>А Вы что думали? :)
А я думал, и думаю, то, что ты написал в [13], извини, бред...
Курдль (2004-04-14 17:35:00) [32]
> Причем тут транзакции ??? При фиксировании кешированных
> изменений ???
А что есть по-Вашему "фиксирование этих самых изменений"? Это и есть последовательность операций, вызываемая командой ApplyUpdates на сервере! Здесь и открытие транзакции и передача данных и коммит при удачной записи или роллбэк при неудачной. А Вы что думали? :)
Johnmen (2004-04-14 17:32:00) [33]>Потом фиксируете все изменения IBDatabase.ApplyUpdates(IBSQL)
Причем тут транзакции ??? При фиксировании кешированных изменений ???
Виктор (2004-04-14 17:30:00) [34]Скорее всего надо коммитить процедуру, поскольку после ее выполнения изменения видны только на той станции на которой
она выполнена, а другие этого не видят, хотя другие изменения
проходят сразу.
Курдль (2004-04-14 17:28:00) [35]
> Это про что ?
Прописываете вызов процедуры, например, в IBSQL.
Потом вызываете ее исполнение IBSQL.ExecSQL
Потом фиксируете все изменения IBDatabase.ApplyUpdates(IBSQL)
Что там при этом делается с транзакцияим, коммитами, роллбэками - не Ваша забота!
Johnmen (2004-04-14 17:22:00) [36]>Курдль © (14.04.04 17:21) [8]
>Достаточно сделать Apply датабазе (сессии) - вся цепочка
>выполнится автоматически.
Это про что ?
Курдль (2004-04-14 17:21:00) [37]"Процедура на серваке" не имеет права делать Commit.
Но для хорошей работы Вашей программы вовсе не обязательно перед каждым изменением БД открывать транзакции насильно (как любят делать многие здешние аборигены). Достаточно сделать Apply датабазе (сессии) - вся цепочка выполнится автоматически.
Виктор (2004-04-14 17:18:00) [38]StoredProc_DEL_CONT.ParamByName ('NOTE').AsString
:=EditContDel.Descriptions.Strings[StrToInt(EditContDel.Text)];
StoredProc_DEL_CONT.ParamByName('DELALL').AsString := 'T';
StoredProc_DEL_CONT.ExecProc;
Query_R_Cont.ReQuery(True);
Она не делает ни коммит ни ролбэк.
Вообщем я так понял надо самому делать коммит?
Johnmen (2004-04-14 17:04:00) [39]>но она этого не делает.
Чего не делает ? коммит ? или роллбэк ?
:)
Вообще-то, это твоя прерогатива, а не её...
bushmen (2004-04-14 16:57:00) [40]А ты код программы, которая запускает эту процедуру покажи