Форум: "Начинающим";
Текущий архив: 2013.11.17;
Скачать: [xml.tar.bz2];
ВнизБлокировка записей Access многопользовательский режим Найти похожие ветки
← →
jjda (2013-02-09 18:12) [0]Здравствуйте!
Мне необходимо организовать многопользовательский режим работы с данными. Файл БД Access лежит в общей папке на сервере. Доступ через Delphi и ADO. Узнал о свойствах ADOQuerty:
LockType – (ltPessimistic, ltOptimistic) – который должен по идее блокировать запись;
CursorType – (ctStatic, ctDynamic) – который должен следить за обновлением курсора.
Подключился через AdoConnection к БД MS Access и данные загнал в DbGrid. Загрузил две копии программы (многопользовательский режим).Не понимаю как работает хотя бы одно из этих свойств: какой-бы не ставил CursorType – данные после изменений в другой копии программы не обновляются (т.е. в первой копии изменил запись, переключился на вторую копию – чтобы не делал данные в DBGrid старые)
Аналогичные проблемы и с LockType – ставил и ltPessimistic, ltOptimistic – в первой копии программы захожу в запись и начинаю редактирование, не завершая редактирования, перехожу во вторую копию и пытаюсь выполнить редактирование той же записи. Дает ошибку, что данные были уже изменены и не дает редактировать (при этом не дает редактировать даже после его завершения в первой копии программы) или редактирует без каких-либо сообщений, при этом в каждой копии начинают отражаться свои данные, а БД вообще не понятно что.
Не могу разобраться, помогите!
1) Мне необходимо как-то обновлять данные в одной копии, в режиме реального времени, когда они были изменены во второй.
2) Блокировать редактируемую в первой копии запись от изменений во всех других копиях программы. При этом другие записи должны иметь возможность редактирования.
← →
sniknik © (2013-02-09 20:00) [1]> Файл БД Access лежит в общей папке на сервере.
не правильный подход. если есть сервер то почему не поставить и sql сервер?
> Не могу разобраться, помогите!
на "королевстве дельфи" ( http://www.delphikingdom.ru/ ) есть статьи по ADO, серия.
> 1) Мне необходимо как-то обновлять данные в одной копии, в режиме реального времени, когда они были изменены во второй.
обрати внимание при чтении на "изменение по ключу"
> 2) Блокировать редактируемую в первой копии запись от изменений во всех других копиях программы. При этом другие записи должны иметь возможность редактирования
не получится, если только сам поле "флаг" не введешь и не будешь им "рулить", блокировки до записей вне ядра не доступны. (ну во всяком случае нормальной такую работу не назовешь, даже если получится)
← →
sniknik © (2013-02-09 20:01) [2]> в режиме реального времени
это из области фантастики.
← →
jjda (2013-02-09 21:32) [3]sniknik
Спасибо!
По поводу последнего: может есть другой способ ну пусть даже он не блокурует а перезаписывает. Неважно! USer-у можно обосновать. Но только чтобы не орал что данные изменились
← →
hghhhJ (2013-02-09 21:42) [4]Единственное что нашел по клучам так это описание свойств:
> Dynamic Динамический курсор (как правило, на стороне сервера).
> Данные, измененные другими пользователями, обновляются
> в курсоре автоматически. Потребляет максимум ресурсов. Поддерживается
> не всеми поставщиками данных. Позволяет прокручивать данные
> как вперед, так и назад.
Так я так и выставлял его на "динамик" - ничего не обновляет....
И не очень понятно, если блокировать записи не получается, то зачем тогда нужен LockType Он то вроде на этот вопрос и отвечает?
← →
Писатель (2013-02-09 22:55) [5]Почему Access? MySql, MsSql light как вариант кажись получше для сетки будет?
← →
Плохиш © (2013-02-09 23:24) [6]
> БД Access
Это не серверная бд.
← →
jjda (2013-02-09 23:30) [7]Спасибо всем кто ответил! Буду разбираться!
← →
sniknik © (2013-02-10 00:26) [8]> Единственное что нашел по клучам так это описание свойств:
>> Dynamic Динамический курсор (как правило, на стороне сервера).
не клуч, а ключ, и уж точно не курсор, динамический он или нет... ищи еще.
← →
jjda (2013-02-10 16:20) [9]Вопрос:
Использую Delphi: ADOConnection+ AdoQuerty + Datasource для доступа к БД Access. Данные отображаются в DBGRid. Есть три операции для работы с записями: правка, добавить, удалить.
Реализуется многопользовательский режим. Т.е. несколько пользователей могут подключаться к БД и выполнять эти операции.
При добавлении или правке – проблем нет я все решаю.
Вопрос с удалением данных: что делать, если в момент, когда один из пользователей правит какую-либо запись другой ее удаляет???? У меня после завершения правки прога начинает орать, что запись была удалена и не выпускает с записи пока не нажму “OK”. Хотелось бы как то поцивилизованее эту ситуацию обрабатывать?
Например:
а) закрывать запись от одновременного редактирования двумя пользователями (т.е. если один встал на эту запись, то другой не может)
б) выводить сообщение о недоступности редактирования записи только один раз
в) ваш вариант???
Что порекомендуете?
← →
sniknik © (2013-02-10 17:26) [10]> Что порекомендуете?
https://www.google.ru/search?q=введение+в+базы+данных
← →
Сергей М. © (2013-02-11 16:54) [11]
> Хотелось бы как то поцивилизованее эту ситуацию обрабатывать
Фильтруй нативный код ошибки и обрабатывай ошибку как считаешь нужным.
Пример обработки ошибок:// коды ошибок MS JET
JET_errKeyDuplicate = -1605; // попытка дублирования значения в уникальном поле
JET_errRefIntegrityViolation = -1612; // попытка нарушения правил ссылочной целостности
JET_errBadReference = -1613; // попытка внести неверную ссылку в поле вторичного ключа
JET_errKeyNull = -3701; // попытка внести NULL в поле вторичного ключа
JET_errEmptyString = -3702; // попытка записи пустой строки в поле
..
procedure TdmDataBase.SomeDataset_PostError(DataSet: TDataSet;
E: EDatabaseError; var Action: TDataAction);
begin
case Conn.Errors[0].Number of
DB_E_ERRORSOCCURRED:
case Smallint(Conn.Errors[0].NativeError) of
JET_errKeyDuplicate:
begin
Action := daAbort;
ShowMessage("Такое наименование уже существует !");
end;
JET_errKeyNull, JET_errEmptyString:
begin
Action := daAbort;
ShowMessage("Не указано или недопустимое наименование !");
end;
JET_errBadReference:
begin
Action := daAbort;
ShowMessage("Не указан или недопустимый элемент справочника !");
end;
end;
end;
end;
← →
Savek (2013-02-12 10:51) [12]jjda
Только трёхзвенка спасёт, всё остальное пляски с бубном
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2013.11.17;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.003 c