![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Stored Proc [D7, IB6.x]
Виктор © (2004-04-14 15:58:00)Подскажите пожалуста :
имеется база, в ней создана StoredProcedure изменяющая таблицы по входящим параметрам;
её выполняю праграммно посредством IBStoredProc;
для неё нужен commit или она должна это делать на автомате?
Johnmen (2004-04-15 12:00:00) [1]>Dimk
Уважаемый, всё-таки не стоит дискутировать, если не владеете предметом дискуссии. О чём вы любезно и сообщили в [34].
Курдль (2004-04-15 11:59:00) [2]
> и чего плохого в конструкции
> Query.SQL.Text := 'begin commit; end;';
> Query.ExecSQL;
Это нонсенс!
Dimk (2004-04-15 11:49:00) [3]Ну если в интербейсе блок не ограничивается
begin end - так свои должны быть конструкции для
создания анонимного блока. А если нет анонимных блоков
так сделать процедуру в которой один коммит и есть
и вызвать ее как еще одну хранимую процедуру для коммита
в конце всех изменений.
Dimk (2004-04-15 11:42:00) [4]Интербейс (если я не ошибаюсь) поддерживает SQL92
а это значит что commit там есть.
и чего плохого в конструкции
Query.SQL.Text := 'begin commit; end;';
Query.ExecSQL;
Курдль (2004-04-15 11:12:00) [5]
> Это по-моему из Оракла ;-)
Оракл чё, дурнее интербэйса? :)
Он тоже все коммиты/роллбэки решает на самом низшем уровне.
Vlad (2004-04-15 11:10:00) [6]
> Dimk (15.04.04 10:41) [37]
Это по-моему из Оракла ;-)
Johnmen (2004-04-15 11:08:00) [7]>Dimk
Уважаемый, не надо дискутировать, если не владеете предметом дискуссии.
Dimk (2004-04-15 10:41:00) [8]2 Курдль © (14.04.04 22:49) [36]
Ну тогда Ваше ApplayUpdates...
или если комуто не верится что лампочка в холодильнике
гаснет когда закрывается дверь -
сделать чтото типа Query.SQL.Text :=
begin
commit;
end (не помню надо ли тут запятую ставить в данном случае)
и Query.ExecSQL;
:o)
Курдль (2004-04-14 22:49:00) [9]
> Dimk (14.04.04 19:50) [34]
> Но я бы сделал коммит в процедуре.
Что, прямо в теле процедуры на сервере?
И что делать, если все-таки понадобится открыть длинную транзакцию для цепочки процедур(инсёртов, апдэйтов ...), в которой эта процедура окажется предпоследней, а последняя вывалит ошибку?
Fay (2004-04-14 19:55:00) [10]Если бы была такая возможность...
Dimk (2004-04-14 19:50:00) [11]Sorry. Честно признаюсь - не писал под Interbase :o)
Но я бы сделал коммит в процедуре.
Vlad (2004-04-14 19:47:00) [12]
> Dimk (14.04.04 19:45) [32]
Если ты внимательно читал, тут речь о компонентах IBX, то есть БДЕ тут как бы вобще не причем.
Dimk (2004-04-14 19:45:00) [13]Почему же ODBC? Сходите в BDEAdministrator...
Drivers->Native->Interbase
Или тут используются компонеты которые работают без BDE?
Vlad (2004-04-14 19:42:00) [14]
> Курдль © (14.04.04 19:31) [30]
> Например при кэшированных изменениях в 3-х связанных ДатаСэтах
> достаточно сделать DataBase.ApplyUpdate([DataSet1, DataSet2,
> DataSet3]); чтобы все само собой разрулилось.
Как выяснилось, оно разрулится и без кэшированных изменений.
Но это сомнительный подход...
Курдль (2004-04-14 19:31:00) [15]Я тут вспылил немного, смешав в кучу столько всякого - и кэшированныеп изменения и транзакции.
Я хотел сказать одно(точнее повторить), что нет нужды открывать, закрывать, откатывать транзакции при простых операциях.
Например при кэшированных изменениях в 3-х связанных ДатаСэтах достаточно сделать DataBase.ApplyUpdate([DataSet1, DataSet2, DataSet3]); чтобы все само собой разрулилось.
А при исполнении одиночнойпроцедуры при помощи ...ExecProc или ...Query вообще достаточно просто вызвать их метод ExecSQL.
Vlad (2004-04-14 19:29:00) [16]
> Dimk (14.04.04 19:26) [28]
Это для ODBC драйвера чтоли? Так о нем тут речи нет.
Dimk (2004-04-14 19:26:00) [17]А вот что я нашел в настройках драйвера Interbase.
SHARED AUTOCOMMIT Passthrough SQL and non-passthrough SQL share the same connection, and passthrough SQL behaves in a similar fashion to non-passthrough. This means that, as long as the user is not in an explicit client transaction or batch mode, passthrough SQL statements are automatically committed.
Vlad (2004-04-14 18:41:00) [18]
> Соловьев © (14.04.04 18:32) [26]
По-моему автору эти кэшированные изменения вобще до лампочки :-)
Ему надо знать - нужен явный коммит или не нужен
Соловьев (2004-04-14 18:32:00) [19]
> Johnmen © (14.04.04 18:30) [25]
Да. Тут автор поста не до конца понял зачем эти кешированные изменения придумали... Я согласен с вами :)
Johnmen (2004-04-14 18:30:00) [20]>Соловьев © (14.04.04 18:22) [22]
Про это не спорю. У самого есть на IBX долгоживущие, в смысле играющие, проекты.
Суть то вот в этом [21] и [23]
:)