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

Вниз

И снова транзакции!   Найти похожие ветки 

 
maximus_ ©   (2004-07-02 12:16) [0]

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

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

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 раз главу управление транзакциями, сделал все как написано, но остановился на подтверждении...


 
Соловьев ©   (2004-07-02 12:18) [1]


> IBTransaction1.Commit; ?

достаточно

2 - не понятно


 
Курдль ©   (2004-07-02 12:18) [2]

А уточнить, что в запросах на добавление, модификацию, удаление?


 
maximus_ ©   (2004-07-02 12:20) [3]

>А уточнить, что в запросах на добавление, модификацию, удаление?

на добавление!!!

>2 - не понятно
Хорошо, вопрос будет так: в каких случаях используется IBTransaction1.StartTransaction;


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


> на добавление!!!

:)))
тебя просят показать их


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


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


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


 
maximus_ ©   (2004-07-02 12:25) [6]

Sorry,

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


 
Johnmen ©   (2004-07-02 12:30) [7]

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

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


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

CachedUpdates := ?


 
maximus_ ©   (2004-07-02 12:31) [9]

true


 
maximus_ ©   (2004-07-02 12:33) [10]

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

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

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


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


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

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


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

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


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

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


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


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

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


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


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

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


 
maximus_ ©   (2004-07-02 12:49) [16]

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

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

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


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


> Соловьев ©   (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]


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


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

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


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

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


 
maximus_ ©   (2004-07-02 12:55) [19]

2Курдль ©>

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

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

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

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


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

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


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


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

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


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


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

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

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

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

if a = 1 then  b := 2;


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


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

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

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


 
jack128 ©   (2004-07-02 18:39) [24]


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

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



Страницы: 1 вся ветка

Текущий архив: 2004.07.25;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.054 c
14-1088763429
Igorek
2004-07-02 14:17
2004.07.25
Грусно - до чего же ламерство окрепло...


6-1085381014
Werewolf
2004-05-24 10:43
2004.07.25
Как работать через прокси?


14-1088993145
Паниковский
2004-07-05 06:05
2004.07.25
Как вы начинали программировать?


1-1089557666
hammster
2004-07-11 18:54
2004.07.25
Байты из файла


3-1088971224
Max Zyuzin
2004-07-05 00:00
2004.07.25
BDE и Referential Integrity