Одновременный доступ нескольких пользователей

Работа VB и СУБД (Access, MSSQL, MySQL, Oracle и пр.)
Правила форума
При создании новой темы не забывайте указывать используемую СУБД.
Al Prad
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 120
Зарегистрирован: 16.08.2007 (Чт) 12:46
Откуда: Одесса

Одновременный доступ нескольких пользователей

Сообщение Al Prad » 24.09.2009 (Чт) 16:22

Здравствуйте!

На сервере есть БД на дбф, записи добавляются, изменяются и удаляются разными пользователями. Пишу на VB6.

Подскажите, где можно почитать о правильной организации одновременного доступа, а то у меня возникают проблемы - один пользователь делает у себя Refresh, а у другого после этого теряются введенные этим вторым пользователем данные. Конечно, может тут ошибка в коде, но я ничего плохого найти не могу. У меня на такой эффект отсутствует пока я тестирую, а у пользователей - присутствует :(

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: Одновременный доступ нескольких пользователей

Сообщение alibek » 24.09.2009 (Чт) 19:41

На DBF этого делать не следует.
Используй MSSQL.
Lasciate ogni speranza, voi ch'entrate.

Al Prad
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 120
Зарегистрирован: 16.08.2007 (Чт) 12:46
Откуда: Одесса

Re: Одновременный доступ нескольких пользователей

Сообщение Al Prad » 25.09.2009 (Пт) 8:18

alibek писал(а):На DBF этого делать не следует.
Используй MSSQL.


Нельзя. Программа будет работать совместно с программой сторонней компании, а они согласны только на дбф.

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Re: Одновременный доступ нескольких пользователей

Сообщение Денис » 25.09.2009 (Пт) 8:47

Ну тогда используй универсальный метод: сделай таблицу например lock.dbf в которую записывай имена пользователей, которые производят транзакции, при проведении транзакции программа сначала читает эту таблицу, и если там есть запись, сначала ждет (закрывает, открывает, перечитывает), пока запись пропадет (удалит другой пользователь) или поменяет свой статус на требуемый, если запись не удаляется/не меняется в течение некоторого промежутка времени, выдает сообщение, что так мол и так. Это минус способа. При сбоях запись в файле будет оставаться и ее нужно будет принудительно удалять/корректировать.

Вообще, такие таблицы можно организовать с большей функциональностью: каждый залогинившийся клиент добавляет себя в нее, и сообщает свой статус. Административным инструментом в рамках программы ты сможешь вывести красивый список залогиненных пользователей, с их статусом, открытыми окнами и т.п.
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

VVitafresh
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1641
Зарегистрирован: 12.05.2005 (Чт) 14:44
Откуда: Херсон, UA

Re: Одновременный доступ нескольких пользователей

Сообщение VVitafresh » 25.09.2009 (Пт) 9:15

Al Prad писал(а):
alibek писал(а):На DBF этого делать не следует.
Используй MSSQL.

Нельзя. Программа будет работать совместно с программой сторонней компании, а они согласны только на дбф.

DBF для совместной работы -- это изврат, прошлый век. Это постоянные переиндексации баз после некорректного завершения, поиск "залочивших" пользователей и т.п. фигня.
У нас в оргранизации раньше использовался комплекс, написанный на clipper'e, который работал с базами dbf. Когда он окончательно умер, все вздохнули с огромным облегчением (включая пользователей).

По сути вопроса: может быть есть возможность организовать механизм импорта-экспорта, когда пользователи твоей программы будут работать со своей базой (не DBF) а в конце дня "сливать данные" в dbf-файлы cторонней организации?
Никакую проблему невозможно решить на том же уровне, на каком она возникла. Нужно стать выше этой проблемы, поднявшись на следующий уровень.

Al Prad
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 120
Зарегистрирован: 16.08.2007 (Чт) 12:46
Откуда: Одесса

Re: Одновременный доступ нескольких пользователей

Сообщение Al Prad » 25.09.2009 (Пт) 10:48

Ну в принципе со сторонней организацией как-то можно договориться, вплоть до того, чтобы обойтись без них, но они мне уже навязали ДБФ.
Сам я с MSSQL не знаком, так что делал бы связку VB6-mdb. Подозреваю, что проблемы с совместным доступом это бы не убрало. Или я неправ и мне стоит вместо дбф использовать mdb?

SLIM
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1840
Зарегистрирован: 04.04.2008 (Пт) 18:21
Откуда: Краснодар

Re: Одновременный доступ нескольких пользователей

Сообщение SLIM » 25.09.2009 (Пт) 22:25

Прав Alibek, dbf для таких целей не пойдет. Нужна нормальная СУБД. Наверное даже Access не подойдет (хотя на нем таки можно организовать работу нескольких пользователей одновременно и синхронизировано). Но здесь MS SQL лучше конечно. Просто почитай мануалы по администрированию.
А вот Денис на мой взгляд говорит ерунду. Система, которую он предлагает будет тормозить. Я представляю базу на 10-20 миллионов записей и пяток запросов одновременно выполняющихся, да с агригатами...кто тут кого ждать будет? Если и делать то,что подразумевает Денис, так нужна реальная многопоточность. Но тут мне кажется игра не стоит свеч. Легче будет просто юзать готовые СУБД.
Пишите жизнь на чистовик.....переписать не удастся.....

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Одновременный доступ нескольких пользователей

Сообщение iGrok » 26.09.2009 (Сб) 0:12

SLIM писал(а):Я представляю базу на 10-20 миллионов записей и пяток запросов одновременно выполняющихся, да с агригатами...кто тут кого ждать будет?
Блин. Слим. Ну у тебя и примерчики. Ну кто ж такое на DBF делает?

То, что предлагает Денис - это простое решение поставленной задачи. Правда, не избавляющее от множественных геморроев в непредвиденные моменты. Так работает такое безумное кол-во организаций, что и представить трудно. И ничего. Работают лет по 10-20 с такой системой. Матерятся, проклинают, но работают. )

З.Ы. А вообще да. Нормальную СУБД надо.
label:
cli
jmp label

VVitafresh
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1641
Зарегистрирован: 12.05.2005 (Чт) 14:44
Откуда: Херсон, UA

Re: Одновременный доступ нескольких пользователей

Сообщение VVitafresh » 26.09.2009 (Сб) 21:33

Al Prad писал(а):Ну в принципе со сторонней организацией как-то можно договориться, вплоть до того, чтобы обойтись без них, но они мне уже навязали ДБФ.
Сам я с MSSQL не знаком, так что делал бы связку VB6-mdb. Подозреваю, что проблемы с совместным доступом это бы не убрало. Или я неправ и мне стоит вместо дбф использовать mdb?

Если все же можно договорится, то поставь себе бесплатные Microsoft SQL Server 2005 Express Edition + SQL Server Management Studio Express (средство администрирования баз): http://www.microsoft.com/Sqlserver/2005/en/us/express-down.aspx и сам убедишься, что имея базовые знания SQL не такая уж и большая разница куда адресовать запросы из VB6 (при использовании ADO) к dbf-файлу, mdb или SQL-серверу.

P.S. Строку подключения здесь найдешь: http://connectionstrings.com/sql-server-2005
Никакую проблему невозможно решить на том же уровне, на каком она возникла. Нужно стать выше этой проблемы, поднявшись на следующий уровень.

Al Prad
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 120
Зарегистрирован: 16.08.2007 (Чт) 12:46
Откуда: Одесса

Re: Одновременный доступ нескольких пользователей

Сообщение Al Prad » 28.09.2009 (Пн) 9:44

VVitafresh писал(а):
Al Prad писал(а):Ну в принципе со сторонней организацией как-то можно договориться, вплоть до того, чтобы обойтись без них, но они мне уже навязали ДБФ.
Сам я с MSSQL не знаком, так что делал бы связку VB6-mdb. Подозреваю, что проблемы с совместным доступом это бы не убрало. Или я неправ и мне стоит вместо дбф использовать mdb?

Если все же можно договорится, то поставь себе бесплатные Microsoft SQL Server 2005 Express Edition + SQL Server Management Studio Express (средство администрирования баз): http://www.microsoft.com/Sqlserver/2005/en/us/express-down.aspx и сам убедишься, что имея базовые знания SQL не такая уж и большая разница куда адресовать запросы из VB6 (при использовании ADO) к dbf-файлу, mdb или SQL-серверу.

P.S. Строку подключения здесь найдешь: http://connectionstrings.com/sql-server-2005


Спасибо, посмотрю, что это такое.
Все осложняется тем, что программа запущена в работу неделю назад и остановка планируется только следующим летом. Я могу только отключать пользователей минут на 5-10 для обновления программы ...

Al Prad
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 120
Зарегистрирован: 16.08.2007 (Чт) 12:46
Откуда: Одесса

Re: Одновременный доступ нескольких пользователей

Сообщение Al Prad » 28.09.2009 (Пн) 12:38

Да, а подскажите , пжалуйста, как определять, что текущая запись дбф занята другим пользователем? Для этого есть какое-то свойство рекордсета, или надо самому исхитряться?

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: Одновременный доступ нескольких пользователей

Сообщение alibek » 28.09.2009 (Пн) 12:56

Al Prad писал(а):Да, а подскажите , пжалуйста, как определять, что текущая запись дбф занята другим пользователем?

А зачем?
Lasciate ogni speranza, voi ch'entrate.

Al Prad
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 120
Зарегистрирован: 16.08.2007 (Чт) 12:46
Откуда: Одесса

Re: Одновременный доступ нескольких пользователей

Сообщение Al Prad » 28.09.2009 (Пн) 13:23

alibek писал(а):
Al Prad писал(а):Да, а подскажите , пжалуйста, как определять, что текущая запись дбф занята другим пользователем?

А зачем?


У меня запись сначала копируется в архивный дбф,а затем удаляется из текущего дбф-а. Время от времени возникает ситуация , когда из текущего запись не удаляется. Я предполагаю, что это связано с тем, что эта удаляемая запись в это время занята другим пользователем и хочу перед удалением это проверять.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: Одновременный доступ нескольких пользователей

Сообщение alibek » 28.09.2009 (Пн) 13:38

Al Prad писал(а):У меня запись сначала копируется в архивный дбф,а затем удаляется из текущего дбф-а. Время от времени возникает ситуация , когда из текущего запись не удаляется. Я предполагаю, что это связано с тем, что эта удаляемая запись в это время занята другим пользователем и хочу перед удалением это проверять.

Не удаляется без каких-либо ошибок? Тогда ты никак не проверишь.
Если же у тебя используется On Error Resume Next, то замени на обработчик ошибок.
Lasciate ogni speranza, voi ch'entrate.

Al Prad
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 120
Зарегистрирован: 16.08.2007 (Чт) 12:46
Откуда: Одесса

Re: Одновременный доступ нескольких пользователей

Сообщение Al Prad » 28.09.2009 (Пн) 13:51

alibek писал(а):
Al Prad писал(а):У меня запись сначала копируется в архивный дбф,а затем удаляется из текущего дбф-а. Время от времени возникает ситуация , когда из текущего запись не удаляется. Я предполагаю, что это связано с тем, что эта удаляемая запись в это время занята другим пользователем и хочу перед удалением это проверять.

Не удаляется без каких-либо ошибок? Тогда ты никак не проверишь.
Если же у тебя используется On Error Resume Next, то замени на обработчик ошибок.



Да, использую On Error Resume Next. Программа находится в круглосуточном использовании, обработчик надо как-то так сделать, чтобы мне ночью не звонили с вопросами :(

VVitafresh
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1641
Зарегистрирован: 12.05.2005 (Чт) 14:44
Откуда: Херсон, UA

Re: Одновременный доступ нескольких пользователей

Сообщение VVitafresh » 28.09.2009 (Пн) 14:27

Al Prad писал(а):Да, использую On Error Resume Next. Программа находится в круглосуточном использовании, обработчик надо как-то так сделать, чтобы мне ночью не звонили с вопросами :(

viewtopic.php?f=1&t=34154&p=6673167&hilit=hunterr#p6672824
Никакую проблему невозможно решить на том же уровне, на каком она возникла. Нужно стать выше этой проблемы, поднявшись на следующий уровень.

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Одновременный доступ нескольких пользователей

Сообщение iGrok » 28.09.2009 (Пн) 16:25

Al Prad писал(а):Да, использую On Error Resume Next. Программа находится в круглосуточном использовании, обработчик надо как-то так сделать, чтобы мне ночью не звонили с вопросами :(

Я же тебе советовал уже сделать ЛОГ ошибок.
Не вывод на экран и демонстрацию пользователю, а ЛОГ!
А после того, как ты ошибку скинул в лог, можешь её хоть проигноирировать, сказав в обработчике "Resume Next". Поведение программы не изменится. Зато ты сможешь узнать, почему не копируется, не удаляется и т.п.
label:
cli
jmp label

Al Prad
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 120
Зарегистрирован: 16.08.2007 (Чт) 12:46
Откуда: Одесса

Re: Одновременный доступ нескольких пользователей

Сообщение Al Prad » 28.09.2009 (Пн) 19:07

iGrok писал(а):
Al Prad писал(а):Да, использую On Error Resume Next. Программа находится в круглосуточном использовании, обработчик надо как-то так сделать, чтобы мне ночью не звонили с вопросами :(

Я же тебе советовал уже сделать ЛОГ ошибок.
Не вывод на экран и демонстрацию пользователю, а ЛОГ!
А после того, как ты ошибку скинул в лог, можешь её хоть проигноирировать, сказав в обработчике "Resume Next". Поведение программы не изменится. Зато ты сможешь узнать, почему не копируется, не удаляется и т.п.


Да, советовал. Но я из-за своего малого опыта думал , что ошибку обрабатывают только перейдя из процедуры по метке. Почитав ссылку, которую дал VVitafresh , понял, что ошибался. Завтра попробую писать ошибки в файл не прерывая процедуры.

SLIM
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1840
Зарегистрирован: 04.04.2008 (Пт) 18:21
Откуда: Краснодар

Re: Одновременный доступ нескольких пользователей

Сообщение SLIM » 28.09.2009 (Пн) 22:00

iGrok писал(а):Блин. Слим. Ну у тебя и примерчики. Ну кто ж такое на DBF делает?

Ну ))) На что фантазии хватило.
Просто тут реально нужна СУБД, а не хранилище данных. А То DBF,это что-то по типу текстовиков с табуляциями. ADO-шники просто под них дрова понаписали.
Ну вообще тут по теме дают достаточно советов. Делай не хочу как говорится ))
Пишите жизнь на чистовик.....переписать не удастся.....

Al Prad
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 120
Зарегистрирован: 16.08.2007 (Чт) 12:46
Откуда: Одесса

Re: Одновременный доступ нескольких пользователей

Сообщение Al Prad » 29.09.2009 (Вт) 13:33

Сделал запись ошибок в файл; посмотрим , что будет.
И все-таки, можно ли определить, что текущая запись дбф занята другим пользователем?

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Re: Одновременный доступ нескольких пользователей

Сообщение Andrey Fedorov » 29.09.2009 (Вт) 23:07

Al Prad писал(а):Сделал запись ошибок в файл; посмотрим , что будет.
И все-таки, можно ли определить, что текущая запись дбф занята другим пользователем?


Зачем? С одной DBF-кой могут одновременно работать несколько пользователей.

Тебе скорей всего надо прочитать про виды блокировок записей/страниц...

Ну и в идеале - начать работать с SQL-сервером. Оно в итоге намного проще чем с DBF. Хотя, возможно, есть груз старых DBF-ок завязанных на другие программы... Тогда и их переписать под SQL :lol:
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...


Вернуться в Базы данных

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 22

    TopList