Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.95/19: Рейтинг темы: голосов - 19, средняя оценка - 4.95
0 / 0 / 0
Регистрация: 09.05.2010
Сообщений: 233
1

ADO Recordset блокирует всю таблицу, нужно блокировать только редактируемую запись

27.05.2010, 13:06. Показов 3614. Ответов 15
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Как?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.05.2010, 13:06
Ответы с готовыми решениями:

Запись ADO recordset в прилинкованную таблицу
Подскажите, пожалуйста, имеются ли методы записи ADO recordset в прилинкованную таблицу методом...

ADO.Recordset - Как узнать, что запись уже редактируется
Если многопользовательский вариант при доступе ADO.Recordset как узнать что запись кем то...

Запись в таблицу ADO
Привет всем. Столнкулся с непонятной фигней) Вобщем, заношу в запись новую информацию, и когда...

Вывести не всю таблицу умножения, а только заданный столбец
Нужно вставить в программу ввод строки (например, 3 на 2) и чтобы программа выводила не всю...

15
2 / 2 / 1
Регистрация: 19.07.2007
Сообщений: 737
27.05.2010, 15:30 2
код в студию, тогда и разберемся
0
0 / 0 / 0
Регистрация: 09.05.2010
Сообщений: 233
27.05.2010, 16:08  [ТС] 3
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
    Dim rst As New ADODB.Recordset
    Dim sql As String
 
    sql = 'SELECT * FROM Products Where Id_Product = 1'
    
    rst.Open sql, cnnAccess, adOpenDynamic, adLockOptimistic
    
    With rst
        .AddNew
            !Id_Customer = Id_Customer
        .Update
    End With
    
    rst.Close
    Set rst = Nothing
После .Update таблица становится недоступна для изменений другим пользоателем, даже после rst.close и Set rst = Nothing
Только когда из программый выйдешь то все ок.

Конекшн используется такой:
Visual Basic
1
2
3
cnnAccess.CursorLocation = adUseClient
cnnAccess.Open 'Provider=Microsoft.Jet.OLEDB.4.0;' & _
           'Data Source=\DomDDatalab.mdb;'
Все добавления делаются в транзакции, так что не понятно зачем блокируется таблица целиком? Ведь добавляемую в транзакции запись не видно, ее никто не изменит. Как отключить блокировку?
0
2 / 2 / 1
Регистрация: 19.07.2007
Сообщений: 737
27.05.2010, 17:08 4
используй курсор: adOpenKeyset
Visual Basic
1
rst.Open sql, cnnAccess, adOpenKeyset, adLockOptimistic,adCmdText
никаких проблем нет, все работает нормально.
0
0 / 0 / 0
Регистрация: 09.05.2010
Сообщений: 233
27.05.2010, 17:20  [ТС] 5
А разве не в типе блокировки дело?
0
2 / 2 / 1
Регистрация: 19.07.2007
Сообщений: 737
27.05.2010, 18:45 6
проверь сначала
0
0 / 0 / 0
Регистрация: 09.05.2010
Сообщений: 233
30.05.2010, 14:40  [ТС] 7
adopenKeyset работает, как это можно объяснить на словах? Почему, за счет чего?
0
0 / 0 / 0
Регистрация: 09.05.2010
Сообщений: 233
31.05.2010, 12:05  [ТС] 8
Как выяснилось adopenKeyset работает не блокирую таблицу если работа идет всего с одной таблицей, однако же в проге у меня все равно после открытия рекордсета adopenKeyset и вызова Update вся таблица блокируется от изменений, сам Access при этом выдает: <Обновление невозможно; установлена блокировка>
Значит дело не в курсоре а в блокировке? Или транзакцию я не так открыл?
0
0 / 0 / 0
Регистрация: 09.05.2010
Сообщений: 233
01.06.2010, 11:29  [ТС] 9
Ребят, обнаружилось что все же блокируется не вся таблица, а некоторая ее часть (называется страница?). Уже лучше. Как бы добиться блокировки только одной записи.
0
Lenivec
01.06.2010, 12:09 10
Jet такового не могёт. Максимум что от него можно добится, это строниячная блокировка.
0 / 0 / 0
Регистрация: 09.05.2010
Сообщений: 233
01.06.2010, 12:22  [ТС] 11
Но я же добавляю записи, а не изменяю, нахрена он блокирует??? Все равно добавляемые в транзакции записи пока никто не видит.
0
2 / 2 / 1
Регистрация: 19.07.2007
Сообщений: 737
01.06.2010, 13:25 12
Код
rs.CacheSize=1
и выбирай отдельную запись в запросе, только ту, что хочешь изменить
0
0 / 0 / 0
Регистрация: 09.05.2010
Сообщений: 233
01.06.2010, 13:55  [ТС] 13
Нет, не помогло, значит нужно что-то другое.
0
Malyarr
04.06.2010, 02:51 14
Не много не в тему, но думаю это полезно учитывать. Изменяйте записи, используя SQL запросы, а не рекордсеты. Это работает в разы быстрее и с блокировкой нет проблем.
0 / 0 / 0
Регистрация: 09.05.2010
Сообщений: 233
04.06.2010, 15:32  [ТС] 15
Я не соглашусь с тобой, SQL-запросы вызывают точно такие же блокировки. AddNew как ты думаешь выполняется? Да это же и есть самый что ни на есть Insert, после его вызова - ADO внутри себя как раз Insert и запускает, так что от блокировок это не спасет.
0
Malyarr
05.06.2010, 00:16 16
Не буду спорить по поводу блокировок. Просто в практической работе не имел с ними проблем) Для справки - сеть примерно 500 машин. Конечно не все они одновременно с моими программами работают, но какие то работают) За то что метод AddNew рекордсета и SQL запрос выполняемый сервером не одно и то же свидетельствует скорость, особенно в циклах заметно - она в разы отличается. Попробуй, может это то что тебе надо. Я во всяком случае рекордсеты только для просмотра применяю. Всё редактирование через SQL. Причем не важно с чем работаю MSSQL, Access или .dbf - технология в принципе одна.
05.06.2010, 00:16
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.06.2010, 00:16
Помогаю со студенческими работами здесь

Нужно всю таблицу из Xml импортировать в ListView1
есть фаил xml со структурой &lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt; &lt;Report...

Создать редактируемую таблицу в Delphi
Необходимо создать таблицу,чтобы её строки можно было редактировать,добавлять и удалять в Grid....

Как сделать редактируемую таблицу?
Стоит задача создать таблицу из 5 колонок и 2 строк с редактируемыми ячейками. Создавать при помощи...

Как создать редактируемую таблицу прямо на странице?
Привет! Есть задача - организовать сотрудникам таблицы, причем чтобы они не видели только свое...

QTableView - добавить новую редактируемую строку в таблицу
Здравствуйте, дорогие форумчане. Опять я и опять с вопросом:-Добавлено через 1 час 1 минуту Вот...

Нужно закрасить всю область, оставив только треуголник внутри окружности
Добрый вечер. Подскажите, пожалуйста, как можно закрасить область? Я нарисовала линии и окружность...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru