powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Блокировки в SQL Server
13 сообщений из 13, страница 1 из 1
Блокировки в SQL Server
    #32123358
minva74
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не раз читал, что функция RecordCount очень не надёжная и лучше выполнить select count(*) from...
оцените ,правильно ли построена такая конструкция, а то я с блокировками ещё плаваю :-)
--делаем выборку и блокируем её на запись
begin trans
select M.*
from OB_MODEL M WITH (TABLOCK HOLDLOCK)

select count(*)
from ob_model
commit trans

И ещё попутно вопрос: впорядке эксперимента сделал следущее
При запуске приложения
ADOConnection.BeginTran
Перед выходом
ADOConnection.CommitTrans
Т.е. запущена одна длительная транзакция с уровнем изоляции Serializable
Запускаю вторую копию приложения, делаю там Update записи и приложение подвисает секунд на 40
а потом вылетает по таймауту. Где устанавливается это время? Сначала я думал, что CommandTimeOut,
но что-то совершенно не влияет изменение этого параметра.
...
Рейтинг: 0 / 0
Блокировки в SQL Server
    #32123368
lvv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
lvv
Гость
На самом деле 30 сек таймаут. В делфи вродеб не реализовали ту property которая за таймаут отвечает. А вот делаем выборку и блокируем всю таблицу на клиенте, это для клиент-серверных приложений очень плохая практика. Это называется один работает, а другие отдыхают
...
Рейтинг: 0 / 0
Блокировки в SQL Server
    #32123373
Sem H
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
у.. еб..
а в чем проблема с RecordCount ?.. (а то я довольно часто ею пользуюсь..)..
...
Рейтинг: 0 / 0
Блокировки в SQL Server
    #32123403
StarWind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Предположу, что проблема с тем, чтобы корректно отработала эта функция, необходим полный fetch что не есть хорошо и самостоятельно компоненты этого не делают
...
Рейтинг: 0 / 0
Блокировки в SQL Server
    #32123452
Фотография tygra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А зачем тебе тут вообще транзакции?
А почитать про них вообще?
...
Рейтинг: 0 / 0
Блокировки в SQL Server
    #32123532
minva74
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
>А зачем тебе тут вообще транзакции?
>А почитать про них вообще?

Прочитал. Но не всё же сразу понятно. Вот я и спрашиваю, как правильно.
Ещё раз суть проблемы: в одном ADOQuery получаем набор данных.
Следующей командой получаем количество. Между этими командами теоритически в таблице можно что-то поменять, например запись добавить.
ыудусе * from OB_MODEL M WITH (TABLOCK HOLDLOCK) блокирует таблицу на время транзакции. Если без HOLDLOCK то только на время выполнения команды. Это я так понял?
Короче, как правильно обеспечить идентичность двух выборок?
...
Рейтинг: 0 / 0
Блокировки в SQL Server
    #32123544
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Не раз читал, что функция RecordCount очень не надёжная

Где читал, что значит ненадежная . Какой тип курсора используешь.
...
Рейтинг: 0 / 0
Блокировки в SQL Server
    #32124221
minva74
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Так подскажет кто-нибудь, или это очень сложно? :-)
...
Рейтинг: 0 / 0
Блокировки в SQL Server
    #32124300
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что тебе подсказать.

1. Не объявляй транзакцию.
2. Убери запрос с подсчетом колва строк.
3. Курсор должен быть клиентским.
4. Используй TADODataSet.RecordCount.

Или напиши, где у тебя конкретно были с ним проблемы.
...
Рейтинг: 0 / 0
Блокировки в SQL Server
    #32124443
Minva74
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Неправильное количество записей возвращает. Были проблемы с Paradox и IB.
Необходимо делать либо LAST либо FETCHALL. Может с SQL Server это не так, пока не нарывался, в чём я сильно сомневаюсь.
И всё таки мой вопрос (отойдём от RecordCount), как правильно обеспечить выполнение двух запросов из одной таблицы, что бы в промежуток между первым и вторым запросом ничего там не изменилось, или как вариант, второй запрос не видел изменения. Хелп я читал, если бы всё до конца понял ,зедсь бы не спрашивал
...
Рейтинг: 0 / 0
Блокировки в SQL Server
    #32124450
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну так и сделай FETCHALL.

Ну уж если очень приспичило, напиши процедуру:

Код: plaintext
1.
2.
3.
4.
5.
6.
CREATE PROCEDURE ResultWithRecordCount
AS
  SELECT
  ...
  FROM
  ...
RETURN(@@ROWCOUNT)


Открывай TADOStoredProc и читай параметр.
...
Рейтинг: 0 / 0
Блокировки в SQL Server
    #32124455
Minva74
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
да не про RecordCount уже вопрос. Читай внимательно предыдущее сообщение.
...
Рейтинг: 0 / 0
Блокировки в SQL Server
    #32124471
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>как правильно обеспечить выполнение двух запросов из одной таблицы

Ты про это, что-ли.

Если в голой теории то

BEGIN TRAN

SELECT 1

SELECT 2

COMMIT TRAN

Вот тока объясни, зачем? И убери из запросов хинты

Уровень изоляции выставь READ COMMITED.
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Блокировки в SQL Server
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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