Форум: "Базы";
Текущий архив: 2002.09.09;
Скачать: [xml.tar.bz2];
ВнизБлокировка таблиц и записей Найти похожие ветки
← →
Slava_BAZ (2002-08-19 13:52) [0]Господа, подскажите что я сделал не так!
Есть таблица, которую открываю посредством TTable, делаю изменения данных и при попытке выполнить Table.Post (если в это время эта таблица открыта другим пользователем) процедура ждёт пока таблица не будет освобождена тем другим пользователем. Такое ощущение, что таблица блокирована. Поставил кэширование изменений в свойствах TTable, но при выполнении Table.ApplyUpdates происходит та же история. Где и что поставить, чтобы не блокировать таблицу, а блокировка записей происходила только в момент записи изменений в БД.
Работаю по старинке через BDE.
← →
Mike Kouzmine (2002-08-19 13:57) [1]Странно. Не должно так быть. Надо поподробнее.
← →
TSV (2002-08-19 14:03) [2]Используй TQuery...
← →
Slava_BAZ (2002-08-19 14:03) [3]Всё довольно примитивно. Выполняю:
Table.Edit;
....
Table.Post;
и всё.
Если ни кто не открыл таблицу, всё O"key, но если она открыта прога ждёт пока не закроют. Куда посмотреть?
← →
Mike Kouzmine (2002-08-19 14:24) [4]Может кто открывает в эксклюзиве?
← →
Slava_BAZ (2002-08-19 14:34) [5]Mike Kouzmine
Нет, специально проэксперемнтировал на двух рядом стоящих машинах. Вообще как устанавливаются блокировки. Я думал, что сервак сам должен разгребать всё что ему Дельфа присылает, а он (SQL сервер) оставляет кучу каких-то блокировок.
А эксклюзив можно поставить только как свойство TTable.Exclusive У меня стоит в False
Что-то я в полной ..... прострации
← →
Mike Kouzmine (2002-08-19 14:51) [6]Извини, не заметил, что SQL
← →
Александр Спелицин (2002-08-19 14:54) [7]
> Всё довольно примитивно. Выполняю:
> Table.Edit; ...
Ну на самом деле начало такое:
Table.Open;
Table.MoveBy(0..3..~5);
А в таблице несколько тысяч записей.
Так вот, TTable не прочитывает всю выборку целиком, а забирает их только до той, которую Вы редактируете (ну может еще + 10..20 чтобы отобразить их в DBGrid). И именно в этот момент происходит блокировка таблицы, причем не всегда. Данные можно читать, даже иногда добавлять, но измение (Update) и удаление будут ждать окончания блокировок.
Так что вариантов здесь два: либо сразу послеTable.Open
делатьTable.Last
, либо переходить на TQuery. Там такого не будет, т.к. при Query.Open на клиента сразу будет закачан весь набор из выборки, что однозначно снимет блокировку.
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2002.09.09;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.01 c