![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Одна база Access - несколько клиентов [D7, access]
DVM © (2006-05-19 15:28:00)Вопрос, наверное глупый, но все же.
Требуется создать базу на основе Access (ну надо так!) с которой одновременно могли работать 2-5 клиентских приложения на Delphi (через ADO).
Вопрос: Как сделать так, чтобы измения, вносимые в базу одним клиентом сразу виделись другим?
Anatoly Podgoretsky (2006-05-20 16:10:00) [1]И даже в секунду.
Anatoly Podgoretsky (2006-05-20 16:10:00) [2]Вообще то речь про базу, а не таблицу, или ты про глобальную таблицу, одну на всю базу. В нормальной системе могут идти сотни запросов в минуту.
Рустем (2006-05-20 15:41:00) [3]
> Вопрос: Как сделать так, чтобы измения, вносимые в базу
> одним клиентом сразу виделись другим?
1. Создать поле (в какой таблице - сам определись), скажем Integer, куда будет записываться клиентом значение текущего Дата/время, например, используя функцию DateTimeToFileDate, после добавления/редактирования/удаления записей в таблицу(ы).
2. Создать глобальную переменную и при запуске приложения присваивать ей значение поля [1].
3. По таймеру проверять равенство значения переменной [1] со значением поля [2] и в случае расхождения - обновление таблиц(ы).
Естественно, что нужно будет предусмотреть отключение таймера во время изменения записей таблиц(ы)...
Возможно это извращение, как посчитают многие, но лично я бы, с удовольствием, посмотрел бы на другие варианты...
Anatoly Podgoretsky (2006-05-20 14:42:00) [4]Только сервер приложений и вся работа через него. Остальное будут изращения разной степени тяжести.
YurikGL (2006-05-19 22:02:00) [5]Можно использовать более серьезную СУБД, чем Access и на триггер вешать посылку сообщения всем клиентам о том, что произведено изменение....
Однако, ИМХО такой подход не является правильным. Правильным является обновление данных по требованию пользователя.
Desdechado (2006-05-19 17:46:00) [6]> Начни длительную транзакцию
я ж не о длительности, а о том, что изменения, произошедшие после старта транзакции, остаются за кадром, как и должно быть
и не будет никаких "ой" при расчетах, кроме, конечно, недовольных ожидающих пользователей
Виталий Панасенко (2006-05-19 17:28:00) [7]
> Desdechado © (19.05.06 16:13) [10]
> Виталий Панасенко (19.05.06 16:10) [9]
> про транзакции не забыл?
Не забыл. Начни длительную транзакцию в блокировочнике - посмотрим что тебе пользоваетели скажут.:-)
Desdechado (2006-05-19 16:58:00) [8]MsGuns © (19.05.06 16:53) [14]
а прочитать внимательно?
"видеть" означает "знать об изменениях"
MsGuns (2006-05-19 16:53:00) [9]>Desdechado © (19.05.06 16:47) [13]
>почему?
А подумать ?
Desdechado (2006-05-19 16:47:00) [10]MsGuns © (19.05.06 16:42) [12]
почему?
ведь речь о том, что изменение должен видеть этот самый на третьем звене
MsGuns (2006-05-19 16:42:00) [11]>DVM © (19.05.06 16:16) [11]
>Да, вроде бы сервер приложений есть лучшее решение проблемы в данном случае.
"Третье звено" не поможет отцам русской демократии, желающим видеть "все и сразу".
DVM (2006-05-19 16:16:00) [12]
> Desdechado © (19.05.06 16:04) [8]
Да, вроде бы сервер приложений есть лучшее решение проблемы в данном случае.
Desdechado (2006-05-19 16:13:00) [13]Виталий Панасенко (19.05.06 16:10) [9]
про транзакции не забыл?
Виталий Панасенко (2006-05-19 16:10:00) [14]
> Тут несколько иная ситуация:
> Имеется программа-сервер, которая выполняет некоторые действия,
> в зависимости от данных в базе. Программы-клиенты (люди)
> меняют базу, программа-сервер должна реагировать на изменения.
>
Но, если я что-то начал делать в соответсвии с данными в БД, то по прошестивии некоторого времени юзера уже поменяют данные. я хочу сказать, что начал ты СЕРВЕРОМ какую-то обработку, ты что, должен проверить "а не поменлись ли за это время условия" и, если да, откатить все, что ты сервером наворотил и начать сначала 7 так можно, при интенсивнйо работе добиться того, что сервре будет отрабатывать ТОЛЬКО после окончания рабочего дня, когда никого нету уже.:-)))
Desdechado (2006-05-19 16:04:00) [15]если эта такая монитористая программа, так может сделать из нее сервер приложений, и все изменения пропускать через него
тогда уж точно ничего не прозевает, кроме прямого редактирования БД
DVM (2006-05-19 16:01:00) [16]
> Т.е. эта программа по сути монитор в реальном времени?
Ну да, только еще этот монитор тоже вносит иногда изменения в базу, но их сразу видеть другим клиентам необязательно.
Johnmen (2006-05-19 15:59:00) [17]>DVM © (19.05.06 15:56) [5]
>программа-сервер должна реагировать на изменения.
Т.е. эта программа по сути монитор в реальном времени?
DVM (2006-05-19 15:56:00) [18]
> Виталий Панасенко (19.05.06 15:53) [4]
Тут несколько иная ситуация:
Имеется программа-сервер, которая выполняет некоторые действия, в зависимости от данных в базе. Программы-клиенты (люди) меняют базу, программа-сервер должна реагировать на изменения.
Может уведомлять сервер через сокеты?
Виталий Панасенко (2006-05-19 15:53:00) [19]
> Вопрос: Как сделать так, чтобы измения, вносимые в базу
> одним клиентом сразу виделись другим?
Скажи, на кой мне, пользователю, которго интересует мясо СРАЗУ же видеть, что продали 10 л молока ? Вот когда мне будет интересно молоко...то тогда больше шансов, что другие продают мясо..:-)
DVM (2006-05-19 15:53:00) [20]
> А разве не видятся?
Видятся, но после обновления, разумеется. Хотелось бы сразу.
> Плохое вступление.
:)