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

Вниз

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

 
Term   (2003-10-02 11:29) [0]

Вопрос такой как правильно использовать транзакции в IB, так как тут как я понял есть определённые тонкости:
в литературе у меня написанно так:

DataBase1.StartTransaction;
try

append
.....
post

DataBase1.Commit;
except
DataBase1.RollBack;
end;


мастера покажите примерчик как оно должно быть, с правильным использованием компонентов TIBDataBase, TIBTransaction, TIBDataSet.


 
Vlad   (2003-10-02 11:32) [1]

Задача то какая, если не секрет ?


 
Term   (2003-10-02 11:38) [2]

ну в двух словах электронный документооборот, это вообще,
а на данном этапе нужно сохранять данные в несколько связанных таблиц, при этом соотв. чтобы соблюдались условия ссылочной целостности, ну и соотв, нужно использовать транзакции, а в их использование в IB есть определенные тонкости, вот я и спрашиваю как сделать правильно...
Использую компоненты TIBDataBase, TIBTransaction, TIBDataSet


 
Vlad   (2003-10-02 12:00) [3]

Ну для такой задачи особых тонкостей я не вижу.
Все стандартно: Открыл транзакцию, затем провел изменения в таблицах, подтвердил транзакцию. В случае ошибки - откатил транзакцию.
В твоем примере все верно написано, только про BDE по-моему.


 
Term   (2003-10-02 12:00) [4]

ну ктонить.... хелп


 
Term   (2003-10-02 12:02) [5]

ну да вот именно что для БДЕ, а как для IB???
так как если
TIBDataBase1.StartTransaction
вываливается исключение что Transancion Started
и как сделать правильную обработку, я понимаю что задачка тривиальная, но я новичёк в IB


 
Vlad   (2003-10-02 12:07) [6]

if not ibtransaction.active then ibtransaction.StartTransaction
......
ibtransaction.commit
....
ibtransaction.rollback


 
Term   (2003-10-02 12:10) [7]

спасибо буду пробывать


 
MsGuns   (2003-10-02 12:13) [8]

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

1. Транзакция A - все, что отображается
2. Транзакция B - все изменения (TIBSQL) на клиенте как целостная логически завершенная порция (например, при удалении документа сначала удаление из фактуры, затем из таблицы заголовков)
3. Транзакция C - все вспомогательные инф.запросы, не влияющие на отображение (репорты, запросы на неотображаемые таблицы и т.д.)


 
Vlad   (2003-10-02 12:20) [9]

>MsGuns © (02.10.03 12:13) [8]
Из [2] не видно что у него вобще что либо отображается.
Речь шла вроде о записи в таблицы с сохранением ссылочной целостности ?


 
Term   (2003-10-02 12:30) [10]

я просто не знал как прально спросить, у меня есть грид в котором отображаются данные из базы. я щелкаю по speedbutton"у открываю форму, и с неё сохр. данные, у меня одна транзакция, теперь добавлю еще одну, и значит читать через вторую,
значит перед выполнением запросов, менять свойство компонентов
Transaction, на имя нужной транзакции.
Я правильно понял?


 
Vlad   (2003-10-02 12:36) [11]

Нет. Если уж так, то для каждого Query своя транзакция. Для пишущего - одна, для читающего - другая. Никаких свойств менять не надо.


 
Term   (2003-10-02 12:40) [12]

понял. спасибо


 
MsGuns   (2003-10-02 12:48) [13]

>Vlad © (02.10.03 12:36) [11]

Ну если у тебя отображаются три НД через TIBQuery или TIBDataSet, то зачем в общем случае для каждой своя транзакция ? Я бы все три впихнул бы в одну. TIBDataBase-то одна и та же небось


 
Vlad   (2003-10-02 12:55) [14]

MsGuns © (02.10.03 12:48) [13]
Я же говорил в [11]: пишушие -в одну транзакцию, а читающие - в другую.
Кажется так советуют умные люди :)


 
MsGuns   (2003-10-02 13:00) [15]

>Vlad © (02.10.03 12:55) [14]
>>MsGuns © (02.10.03 12:48) [13]
>Я же говорил в [11]: пишушие -в одну транзакцию, а читающие - в другую.

Мальчики налево
Девочки направо
;)


 
Term   (2003-10-02 13:11) [16]

У меня 3 связанных TIBDataSet и во всех трех я определил соответсвующие свойства т.е SelectSQL, RefreshSQL,ModifySQL, InsertSQL и DeleteSQL т.е. у меня и пишутся и читаются через одни и теже компаненты, и как быть в этом случае


 
MsGuns   (2003-10-02 13:42) [17]

Все в одну транзакцию, то подтверждение ее в зависимости от

- 1 вариант "Интерактивный"
После каждого изменения подтверждение/откат для того, чтоб каждое изменение тут же откладывалось на сервере и, как следствие, могло быть отображено на других клиентах
недостаток - загрузка сетки большим кол-вом мелких пакетов

- 2 вариант "По требованию"
Подтвержение по кнопке. Т.е. сосед не увидит изменений, пока ты не щелкнешь по ней.

Как надо в данной ситуации - тебе виднее. С точки зрения эффективности системы второй вариант предпочтительнее.

Кроме того, могут быть ситуации с требованием "комплексности" изменений. Т.е. изменения в таблице 1 не должны быть сделаны без соотв. изменений в табл.2. Это, конечно, в том случае, когда эти изменения не включены в серверную логику (в этом случае оптимальнее использование ХП и триггеров)


 
Val   (2003-10-02 14:21) [18]

MsGuns © (02.10.03 13:42) [17]
про таймер забыли.


 
Term   (2003-10-02 14:31) [19]


> про таймер забыли

а в таймере update делать? или рефрешить?


 
Zhouck   (2003-10-02 14:35) [20]

Как писал автор BCB Unleashed, обязательно отдельные транзакции на каждую таблицу,запрос etc нужно делать только в MIDAS приложениях


 
Val   (2003-10-02 14:37) [21]

Term (02.10.03 14:31) [19]
вообще-то, что хотите :) обычно рефреш.
я добавлял к пунктам из поста MsGuns.


 
Vlad   (2003-10-02 14:47) [22]

>Val © (02.10.03 14:37) [21]
Не понимаю, как это связано с постом MsGuns ©.
Он вроде объяснял про способы подтверждения транзакций? Что-то я не понимаю куда тут можно влепить таймер.


 
Zhouck   (2003-10-02 14:48) [23]

Какой еще таймер? На хрена? А асинхронные события нельзя что-ли обрабатывать? Много чего лучше переносить на сервер - он быстрее справится, чем клиентская программа


 
Val   (2003-10-02 14:59) [24]

>Vlad © (02.10.03 14:47) [22]
куда тут можно влепить таймер.
туда же, куда и кнопку.


 
Term   (2003-10-02 15:10) [25]


> Какой еще таймер? На хрена? А асинхронные события нельзя
> что-ли обрабатывать? Много чего лучше переносить на сервер
> - он быстрее справится, чем клиентская программа

можно немного подробнее про асинхронные события, чтото я в литературе не видел описания.....


 
Zhouck   (2003-10-02 15:23) [26]

POST_EVENT("name_event")
В триггерах on delete, on update, on insert
IBEVENTs


 
MsGuns   (2003-10-02 16:02) [27]

>Term (02.10.03 15:10) [25]
>можно немного подробнее про асинхронные события, чтото я в литературе не видел описания.....

Как я понял, речь идет о регистрации событий на сервере. Т.е. приложение может дать серверу знать о том, чтобы ее (прогу) он (сервер) информировал о возникновении какого-то события (например, изменения в какой-то таблице). Тогда по получении такого сообщения от сервера прога может безо всякого таймера отрефрешить соотв. НД. Подход сам по себе интересен, но злоупотребление им приведет к тому, что юзер будет не столько работать, сколько смотреть на часики на экране при достаточно активной работе с таблицей других узеров. При этом не исключено, что в данный момент он будет вводить данные в контролы, никак не связанные с рефрешируемым НД. Или, к примеру, просматривать некоторый отчет в этой же проге.
Все-таки наиболее опытные мастера (по моему мнению, ессно) рекомендуют рефреш по кнопке или по истечению заданного узером интервала (использование таймера). Но опять же все зависит от "местных" факторов: кол-ва одновременно работающих клиентов, скорости сети, объемов данных, частоты их изменяемости и т.д.


 
Zhouck   (2003-10-02 16:13) [28]

Ну-ну. А рефреш при получении сообщения от сервера нельзя ли засунуть в отдельный поток, если юзер не работает с конкретной таблицей? А если с текущей, то запрос на обновление (как делает делфи при одновременной работе с файлами проекта в среде и вне ее). И часиков видно не будет. Или накапливать сообщения, а после какого-то их числа предлагать обновить данные? IMHO, таймер применять не стоит - если есть обработка событий



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

Форум: "Базы";
Текущий архив: 2003.10.23;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.51 MB
Время: 0.011 c
7-74514
RSN
2003-08-11 22:52
2003.10.23
Закрытие окна


3-74028
alex25
2003-10-03 13:18
2003.10.23
множественное like


3-74025
ExE
2003-10-03 15:29
2003.10.23
Помогите ПОЖАЛУЙСТА с DBGRIDом


14-74402
totkto
2003-10-06 08:44
2003.10.23
давайте объединимся


1-74291
Qwerr
2003-10-08 10:44
2003.10.23
Rave Reports





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский