Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> обработка блокировок 
:(
    Опции темы
Hypertonyc
Дата 17.11.2008, 23:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 68
Регистрация: 19.10.2008

Репутация: нет
Всего: нет



Здраствуйте...
Помогите...у меня вопрос. я использую MySQL 5.1...пишу на C++ в MS Visual studio на WinAPI+MYSQL.H...
Есть необходимость заблокировать строку в таблице на время редактирования пользователем...для других пользователей....То есть когда один пользователь редактирует запись...другие при обращении к ней получают сообщение о том што запись редактируется и продолжают работу...
Как это реализовать? Мы пробовали использовать такой алгоритм:

Код

SETAUTOCOMMIT=0; 
SET TRANSACTION ISOLATION LEVEL использовали все возможные
START TRANSACTION;    
SELECT * FROM RED WHERE NEW=2 FOR UPDATE;


при этом когда один пользователь выполняет данные комманды все проходит успешно...
а второй пользователь виснет...до завершения транзакции первого...

мы поменяли в файле my.ini 

innodb_lock_wait_timeout=1 (было 120)

теперь приложение второго пользователя виснет на секунду и завершается с ошибкой...
возможно нужно отлавливать исключение try'ем??если да то объясните как?
пробывали воттак...неполучилось:

Код

try {
    if(myData==NULL)return 0;
    
    if(res!=NULL)
    {
    mysql_free_result(res);
    res = NULL;
    row=NULL; count_rows=0;count_fields=0;
    }
    int count_letters=strlen(query);

    
    if(    mysql_real_query( myData, query ,count_letters))return 0;
    
    res = mysql_store_result( myData ) ;
    
    count_rows = (int) mysql_num_rows( res ) ;
    
    count_rows = (int) mysql_num_rows( res ) ;
    count_fields= (int) mysql_num_fields(res ) ;    
}
catch(...)
{
MessageBox(NULL,"","",MB_OK); /////////////////////////////
}


Месчбокса не появляется и приложение также закрывается с ошибкой...

Это сообщение отредактировал(а) skyboy - 18.11.2008, 09:58
PM MAIL   Вверх
igorold
Дата 18.11.2008, 13:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 557
Регистрация: 22.12.2005
Где: Россия->Урал-& gt;Миасс

Репутация: 5
Всего: 17



Я сделал так - в таблице добавил поле EditorID и при открытии окна на редктирование, тут же делаю Update записи, где EditorID присваиваю индекс пользователя.
При попытке открытия записи на редактирование, я проверяю этот параметр, если он отличен от 0, то выдаю сообщение - запись заблокирована тем-то тем-то на редактирование.
При завершении редактирования, при обновлении записи, я соответственно обнуляю EditorID.

Работает нормально и давно ... такой простой вариант ... 


--------------------
... у семи нянек 14 сисек ...  
Putin here, Putin there, Putin almost everywhere!
PM MAIL   Вверх
Hypertonyc
Дата 19.11.2008, 11:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 68
Регистрация: 19.10.2008

Репутация: нет
Всего: нет



Мы отказались от такого варианта! причина:может быть такое, что записав свой номер в дополнительное поле программа некорректно завершится...произойдёт сбой...моргнёт свет...да мало ли чего...и запись заблокируется навсегда...у нас нет времени потом ездить ко всем и обнулять данные поля...
вобщем просьба ответить на поставленный в первом посте вопрос...ну или предлажить другую альтернативу...
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MySQL | Следующая тема »


 




[ Время генерации скрипта: 0.0631 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.