Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

И снова транзакции! [D7, IB6.x]


Страницы:   1 2

maximus_ ©   (2004-07-02 12:16:00) 

Я дико извиняюсь, но опять вопрос про транзакции!

Если делать так:

IBDataSet1.Insert;
IBDataSet1.FieldByName('NUMBERING').AsInteger:=1;
IBDataSet1.FieldByName('TEXT1').AsString:='TEST1';
IBDataSet1.FieldByName('TEXT2').AsString:='TEST2';
IBDataSet1.Post;

Естественно при повторном открытии запроса данных уже нет!

при добавлении:
IBTransaction1.Commit;

и при повторном открытии запроса опять ничего не записывается!

В установках IBTransaction1 стоит: READ COMMITED;
IBDataSet все запросы (modify, insert...) сформированны автоматом!

Вопрос:
1)
Для подтверждении транзакции достаточно ли строки
IBTransaction1.Commit; ?

2)
IBTransaction1.StartTransaction;
--
--
IBTransaction1.Commit;
Расценивается как операторные скобки?

перечитал уже 5 раз главу управление транзакциями, сделал все как написано, но остановился на подтверждении...


jack128   (2004-07-02 18:39:00) [1]


> А чё там учиться? Если на Паскале ты умеешь:
>
> if a = 1 then
> begin
>  b := 2;
> end;то бОльшую часть понятия о транзакциях имеешь
Да?

а вот все это - это так.. Мелочи..?
http://www.ibase.ru/devinfo/ibtrans.htm
А потом появляются вопросы, типа "а почему я делал коммит, а данных не видно?"


Курдль   (2004-07-02 13:15:00) [2]


> Соловьев ©   (02.07.04 12:58) [21]
> думаю, если конечно в БД пару таблиц, и простенький отчет с одним пользователем, то транзакции можно отдать компонентам.

А я так не думаю! Даже при весьма сложненьких отчетах и множеством таблиц, нормально отрабатывает конструкция
Database.ApplyUpdates([DataSet1, DataSet1, ...DataSetN]);

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


Курдль   (2004-07-02 13:00:00) [3]


> Научиться надо!

А чё там учиться? Если на Паскале ты умеешь:

if a = 1 then
begin
 b := 2;
end;
то бОльшую часть понятия о транзакциях имеешь!

Так что дальше можешь спокойно писать

if a = 1 then  b := 2;


Соловьев   (2004-07-02 12:58:00) [4]


> Для бОльшей части типовых задач стандартная обработка транзакций
> вполне приемлемое решение.

не спорю. но автор хочет я так понял разобраться с ними или как? примеры вот по книге делает. думаю, если конечно в БД пару таблиц, и простенький отчет с одним пользователем, то транзакции можно отдать компонентам.


Sergey_Masloff   (2004-07-02 12:56:00) [5]

Соловьев ©   (02.07.04 12:40) [14]
>2 maximus_ ©   - не слушай. Управляй сам транзакциями.
Совет сомнительный. Для бОльшей части типовых задач стандартная обработка транзакций вполне приемлемое решение.


maximus_   (2004-07-02 12:55:00) [6]

2Курдль ©>

Вот хрень блин!!! Уже 2 часа парился с этим!
Действительно надо "CachedUpdates := False"

А это я на будущее возьму на вооружение:
IBDatabase1.ApplyUpdates([IBDataSet1]);

>> Так не подскажешь, зачем в данном конкретном случае автору самому управлять транзакциями?

Научиться надо!


Соловьев   (2004-07-02 12:54:00) [7]


> я то имел ввиду как это делать программно!

Мы говорили про эксперт. У тебя было свойство CachedUpdates включено. Выключи его. И будет тебе счастье.


> Так не подскажешь, зачем в данном конкретном случае автору
> самому управлять транзакциями?

Это нормально. можно конечно и как Вы предлагаете, но имхо для начинающих сразу понять, что транзакции в СУБД не 5-я нога.


Курдль   (2004-07-02 12:51:00) [8]


> Соловьев ©   (02.07.04 12:40) [14]
> 2 maximus_ ©   - не слушай. Управляй сам транзакциями.

Возможно я и не прав. Большое достоинство участия на форуме - процесс обучения, самообучения и приема чужого опыта.

Так не подскажешь, зачем в данном конкретном случае автору самому управлять транзакциями?


> Курдль ©   (02.07.04 12:30) [8]
> CachedUpdates := ?
> maximus_ ©   (02.07.04 12:31) [9]
> true

Так ты что с этим решил? Тебе надо либо CachedUpdates := False, либо [12]


maximus_   (2004-07-02 12:49:00) [9]

2Соловьев ©>
это я понял что там тоже надо коммит нажать!

я то имел ввиду как это делать программно!

2Курдль ©>
Попробовал работает!!!
Но я думаю что Соловьев прав!


Соловьев   (2004-07-02 12:41:00) [10]


> изменений не вижу в самой таблице!

там тоже надо коммит нажать.


Соловьев   (2004-07-02 12:40:00) [11]


> это я как дохтур рекомендую

действительно - дохтур. сорри если обдел.
2 maximus_ ©   - не слушай. Управляй сам транзакциями.


maximus_   (2004-07-02 12:39:00) [12]

Открываю SQL редактор:
1) выполняю запрос!
2) пишет: 1 record(s) was(were) inserted into TEST
3) нажимаю в редакторе коммит!!! изменений не вижу в самой таблице!
4) в окне таблицы нажимаю еще раз коммит, и она занесена!!!


Курдль   (2004-07-02 12:36:00) [13]

А!!!!!!!! Ну тарды забей на транзакции (это я как дохтур рекомендую) Т.е. вообще забудь - ты на правильном пути.
И делай так TIBDatabase.ApplyUpdates([IBDataSet]);
Я считаю, что это лучший вариант, хоть можно и поспорить.
В данном случае транзакция откроется автоматически, при успешной операции автоматически подтвердится, а при ошибке - автоматически откатит изменения.


Соловьев   (2004-07-02 12:34:00) [14]


> [10] maximus_ ©   (02.07.04 12:33)

выполни запрос в эксперте - меняет?


maximus_   (2004-07-02 12:33:00) [15]

Сейчас попробовал так:

insert into TEST
 (NUMBERING, TEXT1, TEXT2)
values
 (:OLD_NUMBERING,
  :OLD_TEXT1,
  :OLD_TEXT2)

Все равно ничего не меняет!


maximus_   (2004-07-02 12:31:00) [16]

true


Курдль   (2004-07-02 12:30:00) [17]

CachedUpdates := ?


Johnmen   (2004-07-02 12:30:00) [18]

>Естественно при повторном открытии запроса данных уже нет!

Э-э-э... Откуда естественность ?


maximus_   (2004-07-02 12:25:00) [19]

Sorry,

insert into TEST
 (NUMBERING, TEXT1, TEXT2)
values
 (:NUMBERING, :TEXT1, :TEXT2)


Курдль   (2004-07-02 12:22:00) [20]


> maximus_ ©   (02.07.04 12:20) [3]
> >А уточнить, что в запросах на добавление, модификацию,
> удаление?
>
> на добавление!!!


Я хотел посмотреть содержимое, а не факт наличия :)


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо