Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2004.07.25;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.51 MB
Время: 0.036 c
1-1089546125
Optimizator
2004-07-11 15:42
2004.07.25
Компонент label


14-1089311772
Stilgar
2004-07-08 22:36
2004.07.25
Подскажите хорошую литературу по написанию игр


1-1088886556
3APA3A
2004-07-04 00:29
2004.07.25
Synchronize


3-1088409321
Aln
2004-06-28 11:55
2004.07.25
Изменить значение поля таблицы Access (компонент доступа ADO)


14-1089174057
leonidus
2004-07-07 08:20
2004.07.25
Идея





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский