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

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

свойства tIbTransaction [D7, fb2]


Страницы:   1 2

Евгений Р. ©   (2008-08-21 15:09:00) 

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


MsGuns   (2008-08-23 14:46:00) [1]

>Игорь Шевченко ©   (22.08.08 18:39) [31]
>Просто не стоит свои приемы работы выдавать за непререкаемые истины >для всех случаев

Вот и я о том же ;)


Игорь Шевченко   (2008-08-22 18:39:00) [2]

MsGuns ©   (22.08.08 17:06) [30]

Да нет, мы не странные. Просто не стоит свои приемы работы выдавать за непререкаемые истины для всех случаев.


MsGuns   (2008-08-22 17:06:00) [3]

>Игорь Шевченко ©   (22.08.08 16:57) [29]
>А кому нужен в базе документ с 50-ю строками из 100 ?

А кому нужен документ, который за раз сможет ввести только Анка-пулеметчица, и то за сутки непрерывной работы ?

Экие вы странные оба однако. Такое ощущение, что с живыми людьми только на улице общаетесь ;)


Игорь Шевченко   (2008-08-22 16:57:00) [4]

MsGuns ©   (22.08.08 16:46) [27]

А кому нужен в базе документ с 50-ю строками из 100 ?


Sergey13   (2008-08-22 16:56:00) [5]

> [27] MsGuns ©   (22.08.08 16:46)

А кто как сделал струтуру БД и приложение - так и делать. Ты же вот делаешь у себя поле "проведено". Это решение для твоего частного случая. Кому то оно не подойдет - ему надо сразу все или ничего. А кому то вообще пофиг - хоть неделю заводи и БД все равно согласованная. Транзакции позволяют работать с любой бизнеслогикой.


MsGuns   (2008-08-22 16:46:00) [6]

>Sergey13 ©   (22.08.08 09:16) [22]
>НЕ любая, а только переводящая документ из одного согласованного состояния в другое согласованное.

Интересно девки пляшут. Это если в документе 100 строк, то записывать его в базу нужно только тогда, когда все 100 строк будут введены, а если не успел к закрытию конторы, то с утряка по новой, эге ж ?


Sergey13   (2008-08-22 12:16:00) [7]

> [25] Евгений Р.   (22.08.08 11:26)

Если мне память не изменяет в ФБ реализовано выражение FOR UPDATE в запросе SELECT. Но злоупотреблять им не стоит и использовать следует с осторожностью.


Евгений Р.   (2008-08-22 11:26:00) [8]

И еще:
наверное параллельно Вы блокируете открытие (или редактирование) документа, открытого одним из пользователей?
Если да, то каким образом:
1.у самого документа есть признак "открыт"
2.есть отдельная таблица с идентификаторами открытых документов
3.отслеживать блокировки документа (не представляю как)


Евгений Р.   (2008-08-22 11:18:00) [9]

состояние, как я понял  -  проведен/не проведен?


Игорь Шевченко   (2008-08-22 11:02:00) [10]


> "Коммитить" надо любой пост, что автоматически и делается,
>  если асякой фигни не панавыставлять ручками шаловливыми.
>  А вот сам документ должен иметь статус "проведено", который
> выставлять по команде пользователя когда он введет весь
> документ. А до того остатки по карточкам не менять.


SQL-сервер - эт вам не парадокс. Это вы в файловой базе могете такие приемы использовать. А для большинства SQL-серверов придуманы транзакции, чтобы нужда в изобретении велосипедов отпала


Sergey13   (2008-08-22 09:16:00) [11]

> [21] MsGuns ©   (22.08.08 09:05)
> [14] прочитай, а ?

Именно поэтому и написал свои возражения.
> [14] MsGuns ©   (21.08.08 22:51)
> Пункт 7.
> Не противоречит сказанному в [10] ибо любая модификация
> - добавление - удаление записи в режиме ручной работы с
> документом должна фиксироваться в БД, иначе возникнет эффект
> "Я вводила - куда она подевалась ?"

НЕ любая, а только переводящая документ из одного согласованного состояния в другое согласованное.


MsGuns   (2008-08-22 09:05:00) [12]

>Sergey13 ©   (22.08.08 08:56) [20]

[14] прочитай, а ?

"Коммитить" относится к посту или транзакции ? Не надо "вводить в заблуждение неопытных пользователей" ;)


Sergey13   (2008-08-22 08:56:00) [13]

> [10] MsGuns ©   (21.08.08 20:31)

Не надо выдавать свои наработанные приемы работы за всеобщее обязательное правило и вводить неопытных пользователей в заблуждение.
Коммитить надо НЕ "любой пост", а транзакцию. Транзакция - это модификация БД переводящая эту самую БД из одного СОГЛАСОВАННОГО СОСТОЯНИЯ в другое. Эта модификация может быть как изменением одной записи так переписыванием половины базы.


kaif   (2008-08-21 23:04:00) [14]

Я обычно делаю проще.

В DataSource на событие DataChange при условии параметра Field <> nil делаю SaveAction.Enabled := True; То же делаю и на событие AfterDelete детальных датасетов.

На Form1.OnCloseQuery документа делаю проверку SaveAction.Enabled и если True прошу юзера все сохранить (проведение и CommitRetaining)  или нет (RollBack) или отмена Form1.CanClose := False.

Еще есть кнопка Save со значком дискеты, которую он всегда нажать может. Там и проведение и CommitRetaining.

А транзакцию я сую в каждую форму. По умолчанию она RollBack.
Благо InterBase не боится множества транзакций. И еще у меня есть одна общая транзакция ReadOnly (read nowait)  в глобальном модуле данных. Это для чтения всяких справочников и прочей фигни, не требующей изменений данных.


Loginov Dmitry   (2008-08-21 23:01:00) [15]

> В некоторых случаях без него трудно обойтись


В каких например?


MsGuns   (2008-08-21 22:55:00) [16]

Не согласен только с п.20 о вето на Float. В некоторых случаях без него трудно обойтись, а работать с ним вполне можно, соблюдая некоторые простые правила.


Loginov Dmitry   (2008-08-21 22:52:00) [17]

хотя нет, там уже не поймешь, кто у кого :)


Loginov Dmitry   (2008-08-21 22:51:00) [18]

> Это излишне нагружает сервер."  п.7 http://www.cyberguru.ru/database/inte
> rbase/interbase-hints.html
>
> уж не знаю кому верить.


вообще-то оригинальный текст статьи находится здесь:
http://ibase.ru/devinfo/dontdoit.htm


MsGuns   (2008-08-21 22:51:00) [19]

Пункт 7.
Не противоречит сказанному в [10] ибо любая модификация - добавление - удаление записи в режиме ручной работы с документомдолжна фиксироваться в БД, иначе возникнет эффект "Я вводила - куда она подевалась ?"
В ручном режиме человек физически не сможет загружать сервер обновлениями чаще нескольких раз в минуту и только по одной записи зп раз - для сервера это вообще ничто.

Пункт 8.
Не противоречит ибо за один раз вы изменяете, добавляете, удаляете только однузапись. В этом пункте говорится о том, что если идет "массовое" удаление/добавление/изменение, например в цикле, то следует по возможности весь "пакет" заворачивать в одну транзакцию. При подтверждении каждого изменения в режиме "пулемета" сервер явно может "перегреться"

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


Евгений Р.   (2008-08-21 22:47:00) [20]

я понял, что редактировангие через dbGrid - не популярно здесь.
но если есть такая необходимость, то commit рекомендуете делать автоматом по AfterPost, AfterDelete?


Страницы:   1 2

Наверх

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