C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Доступ к таблице из нескольких потоков, Как грамотнее организовать
Jojobets
Отправлено: 23.06.2005, 19:17


Ученик-кочегар

Группа: Участник
Сообщений: 16



База: MS Access
Несколько потоков программы выполняют одну и ту же операцию-добавляют новую запись в одну таблицу, присваивают полям значения, потом обновляют таблицу (Post). По сути, имеем многопользовательский доступ к таблице. С переменным успехом появляется ошибка "Обновление невозможно. Блокировка установлена пользователем admin на машине ... ". Каждый поток использует свой объект TADOConnection и TADOTable. Вопрос в том, как грамотнее реализовать описанную задачу. Редактирование записей не требуется, только добавление.
Gedeon
Отправлено: 23.06.2005, 20:21


Ветеран

Группа: Модератор
Сообщений: 1742



MS Access и несколько подключений вообще не очень хорошая идея.
olegenty
Отправлено: 24.06.2005, 07:15


Ветеран

Группа: Модератор
Сообщений: 2412



за пару дней такой работы *.mdb файл так распухнет, что аж жуть...
Jojobets
Отправлено: 24.06.2005, 08:25


Ученик-кочегар

Группа: Участник
Сообщений: 16



В случае с MS SQL Server наблюдается та же картина, хоть и пореже. Видно, что-то неправильно делаю.
AVC
Отправлено: 24.06.2005, 08:27


Ветеран

Группа: Модератор
Сообщений: 1583



Если очень хочется, то можно сделать "сервер приложений", который будет выстраивать запросы на добавление в очередь. В вашей постановке это просто еще один поток.
Jojobets
Отправлено: 28.06.2005, 21:51


Ученик-кочегар

Группа: Участник
Сообщений: 16



Предлагаю вниманию следующее решение (см. файл). Используется одно подключение (TADOConnection) и число таблиц (TADOTable), равное количеству потоков. Получается однопользовательский доступ (одно подключение), да и ладно. Поэтому и ошибка с блокировкой больше не появится. biggrin.gif

User Attached Image Скачать файл
threads_DB.zip



Вернуться в Работа с базами данных в C++Builder