Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
ADO + Delphi - глюки
|
|||
|---|---|---|---|
|
#18+
Такая проблема. В транзакции выполняются изменения в таблице. Если попробовать открыть эту таблицу в другой транзакции (второй экземпляр этой же программы), то прога виснет, а через время "Timeout". Как только транзакция подтверждается (откатывается) - все работает нормально. Как будто-бы эта транзакция блокирует данные (причем не только те, которые меняются, а и всю таблицу). Пробовал уже все параметры изоляции транзакций, курсоры, блокировки - ничего не помогает, что это за глюк? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2004, 15:08 |
|
||
|
ADO + Delphi - глюки
|
|||
|---|---|---|---|
|
#18+
трансакция блокирует таблу... если принудительно не запускать - все будет ок. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2004, 15:12 |
|
||
|
ADO + Delphi - глюки
|
|||
|---|---|---|---|
|
#18+
Так мне нужно, чтобы не блокировала. Мне нужна возможность отказа изменений, почему другие пользователи в этот момент не могут читать остальные данные - полностью заблокирована таблица. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2004, 15:34 |
|
||
|
ADO + Delphi - глюки
|
|||
|---|---|---|---|
|
#18+
В смысле, никаких вариантов? А как же тогда уровни изоляции транзакций, уровни блокировки записей. Это что – просто чтобы развести всех? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2004, 16:09 |
|
||
|
ADO + Delphi - глюки
|
|||
|---|---|---|---|
|
#18+
А сервер какой? Делай через ХП. При апдэйте указывай with(rowlock) Индексы на таблице сделай -- Tygra's -- ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2004, 10:28 |
|
||
|
ADO + Delphi - глюки
|
|||
|---|---|---|---|
|
#18+
У меня работает так. Открывается акладная -открывается транзакция - в ней делаются различные изменения, а потом спрашивается - сохранить или нет? В общем собираюсь это обойти так - использовать TClientDataSet, работать с ним, а потом при закрытии перекидывать в основную базу. Но все же странно ставлю для TADOConnection Isolation в UncommitedRead - по идее должен читать неподтвержденные данные, а он просто устанавливает блокировку - и не пускает читать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2004, 14:12 |
|
||
|
ADO + Delphi - глюки
|
|||
|---|---|---|---|
|
#18+
Так делать - не есть гуд. Зайдет юзер изменять накладную и пойдет на обед. И транзакция будет висеть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2004, 10:49 |
|
||
|
ADO + Delphi - глюки
|
|||
|---|---|---|---|
|
#18+
Во-первых всетаки укажите вашу БД Затем перестать использовать TADOTable Далее выбрать один из двух подходов к работе с БД Клиентские транзакции cached updates/отсоединенные recordsets ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2004, 12:59 |
|
||
|
ADO + Delphi - глюки
|
|||
|---|---|---|---|
|
#18+
БД - SQL Server 2000. А компонентами типа Table - ни в жизни не пользовался. Предложите выход!!!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2004, 10:24 |
|
||
|
ADO + Delphi - глюки
|
|||
|---|---|---|---|
|
#18+
криво апдейтишь... кастрируй все и начинай с начала. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2004, 10:38 |
|
||
|
ADO + Delphi - глюки
|
|||
|---|---|---|---|
|
#18+
ova Я так понимаю, вы выбрали вариант с клиентскими транзакциями? Если да то сценарий должен быть чем-то вроде Клиент читает данные Далее если клиент решает зафиксировать на сервере изменения то клиент открывает транзакцию Изменяет данные закрывает транзакцию При этом во-первых должны накладываться блокировки только на те данные которые прочитал клиент - т.е. если он прочитал "Платежное поручение №1" - то и блокировать он должен только его а не все что есть в базовых таблицах - физически это означает что необходимо следить за тем что делает код в транзакции и за ее уровень изоляции. Во-вторых желательно добиться чтобы ваша транзакция не блокировала читателей - т.е. те транзакции которые не производят изменения данных. Это означает что необходимо минимизировать количество и время эксклюзивных блокировок - что вообще говоря при таком подходе да на блокировщике MS SQL2000 возможно наверное только при Transaction Isolation Level = Read Commited но не выше так как иначе рескуете скатиться до Read Uncommited в читателях - что вообще говоря ничего хорошего о проектировщике не скажет Далее - главное правило при написании транзакций - разработчик должен сделать все чтобы минимизировать ее время - чем короче транзакция тем лучше - поэтому я бы советовал открывать транзакции только в момент физического изменения данных в таблице, а не при ее чтении. К сожалению часто имеют место попытки использовать транзакции не по назначению - для блокирования документов от других пользователей и т.д. - этого делать нельзя Теперь насчет непосредственно вашей проблемы -если транзакция блокирует всю таблицу - то это либо неправильно написанный код либо TIL=serializable либо раного рода хинты типа (tablelock)/(rowlock) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2004, 11:30 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=32372463&tid=2115144]: |
0ms |
get settings: |
10ms |
get forum list: |
21ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
50ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
76ms |
get tp. blocked users: |
2ms |
| others: | 261ms |
| total: | 441ms |

| 0 / 0 |
