powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / ADO + Delphi - глюки
12 сообщений из 12, страница 1 из 1
ADO + Delphi - глюки
    #32372230
ova
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Такая проблема. В транзакции выполняются изменения в таблице. Если попробовать открыть эту таблицу в другой транзакции (второй экземпляр этой же программы), то прога виснет, а через время "Timeout". Как только транзакция подтверждается (откатывается) - все работает нормально. Как будто-бы эта транзакция блокирует данные (причем не только те, которые меняются, а и всю таблицу). Пробовал уже все параметры изоляции транзакций, курсоры, блокировки - ничего не помогает, что это за глюк?
...
Рейтинг: 0 / 0
ADO + Delphi - глюки
    #32372232
Фотография KirillovA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
трансакция блокирует таблу...
если принудительно не запускать - все будет ок.
...
Рейтинг: 0 / 0
ADO + Delphi - глюки
    #32372239
ova
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так мне нужно, чтобы не блокировала. Мне нужна возможность отказа изменений, почему другие пользователи в этот момент не могут читать остальные данные - полностью заблокирована таблица.
...
Рейтинг: 0 / 0
ADO + Delphi - глюки
    #32372247
Фотография KirillovA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
потому
...
Рейтинг: 0 / 0
ADO + Delphi - глюки
    #32372259
ova
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В смысле, никаких вариантов?

А как же тогда уровни изоляции транзакций, уровни блокировки записей. Это что – просто чтобы развести всех?
...
Рейтинг: 0 / 0
ADO + Delphi - глюки
    #32372463
Фотография tygra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А сервер какой?
Делай через ХП.
При апдэйте указывай with(rowlock)
Индексы на таблице сделай

-- Tygra's --
...
Рейтинг: 0 / 0
ADO + Delphi - глюки
    #32372495
ova
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня работает так. Открывается акладная -открывается транзакция - в ней делаются различные изменения, а потом спрашивается - сохранить или нет? В общем собираюсь это обойти так - использовать TClientDataSet, работать с ним, а потом при закрытии перекидывать в основную базу. Но все же странно ставлю для TADOConnection Isolation в UncommitedRead - по идее должен читать неподтвержденные данные, а он просто устанавливает блокировку - и не пускает читать.
...
Рейтинг: 0 / 0
ADO + Delphi - глюки
    #32372771
Papka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так делать - не есть гуд. Зайдет юзер изменять накладную и пойдет на обед. И транзакция будет висеть.
...
Рейтинг: 0 / 0
ADO + Delphi - глюки
    #32372955
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Во-первых всетаки укажите вашу БД

Затем перестать использовать TADOTable

Далее выбрать один из двух подходов к работе с БД

Клиентские транзакции

cached updates/отсоединенные recordsets
...
Рейтинг: 0 / 0
ADO + Delphi - глюки
    #32373949
ova
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
БД - SQL Server 2000.

А компонентами типа Table - ни в жизни не пользовался.

Предложите выход!!!!!
...
Рейтинг: 0 / 0
ADO + Delphi - глюки
    #32373971
Фотография KirillovA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
криво апдейтишь...
кастрируй все и начинай с начала.
...
Рейтинг: 0 / 0
ADO + Delphi - глюки
    #32374048
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ova

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

Клиент читает данные

Далее если клиент решает зафиксировать на сервере изменения то
клиент открывает транзакцию

Изменяет данные

закрывает транзакцию


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

Во-вторых желательно добиться чтобы ваша транзакция не блокировала читателей - т.е. те транзакции которые не производят изменения данных. Это означает что необходимо минимизировать количество и время эксклюзивных блокировок - что вообще говоря при таком подходе да на блокировщике MS SQL2000 возможно наверное только при Transaction Isolation Level = Read Commited но не выше так как иначе рескуете скатиться до Read Uncommited в читателях - что вообще говоря ничего хорошего о проектировщике не скажет

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


Теперь насчет непосредственно вашей проблемы -если транзакция блокирует всю таблицу - то это либо неправильно написанный код либо TIL=serializable либо раного рода хинты типа (tablelock)/(rowlock)
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / ADO + Delphi - глюки
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]