![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
HELP Проблема при многопользовательском доступе [D5, dBase, FoxPro]
Alexey K © (2004-01-08 15:17:00)
РАзрабатывалось приложение как локальное DBF (Halcyon). Нужно сделать теперь из него многопользовательское (срок позавчера).
Запустив ее вдвоем с коллегой из сети при вводе данных получили задвоение номеров, и вообче в базе полный мусор при одновременной записи туда. Помогите кто что посоветует как грамотнее блокировать записи или может еще чего нибудь???
С Уважением Алексей К.
unreger (2004-01-13 11:27:00) [1]
это все хорошо для нормальной клиент-серверной с нуля базы,
а моя идея, что создаем полную локальную копию базы на каждом клиенте и он работает _как и прежде с локальной базой_, время от времени сохраняя свои изменения в эталонной базе,
а локальные дбфки обновляет некий менеджер ... пожалуй для каждой записи в каждой таблице надо добавить поле "было изменено в эталонной базе"...
и как-то перехватывать попытку записи в поле с установленным признаком ...
к автору ветки: а где-нибудь рядом с DBF (Halcyon) триггеры есть?
конечно надо будет разрешать коллизии - несколько клиентов желают отослать все свои изменения в эталонную (ну нельзя это сервером называть) базу - вот есть неплохая идея утроить им чат для этого, с показом конфликтующих данных
Academic (2004-01-13 11:10:00) [2]
На ссылке приведен пример в котором сервер отсылает сообщение что "данные изменились". Не совсем ясно что должен делать в это время клиент. Можно хранить лог изменений на сервере, либо временную таблицу, либо делать рефреш данных. В любом случае, моя идея подразумевает что сервер сам обновляет пользовательские наборы данных. Причем, если это критичные данные (изменения справочников, глобальных настроек) немедленно, а изменения в данных с некоторым интервалом времени (при наличии соединения). Это обеспечит минимальную загрузку сети и независимость работы клиентов от соединения.
unreger (2004-01-13 06:28:00) [3]
если запись, которой клиент хочет воспользоваться, есть в таблице изменений, то идет обновление (всей базы или одной таблицы - по желанию :) и из таблицы изменений удаляется
только не соображу как проверку делать ... что-то вроде селекта по имеющимся локальным данным, потом пересечение с таблицей изменений ... обновление локальных данных при непустом ... примерно так?
Academic (2004-01-12 15:06:00) [4]
to Romkin
И что клиент делает по этому извещению?
Рефрешит все локальные данные?
venoel (2004-01-12 14:22:00) [5]
А кто-нибудь про Advantage Database Server слыхыл?
Romkin (2004-01-12 14:16:00) [6]
http://www.rsdn.ru/article/db/callback.xmlусе уже сделано :) Можно всем, можно выборочно... Посылаешь не обновление, а извещение, о том, что пора бы обновиться. И клиент, в свободное от основных обязанностей время, обращается к серверу за обновлением сам, явочным порядком.
Academic (2004-01-12 13:54:00) [7]
to Romkin
И как сервер будет слать обновления клиенту?
Romkin (2004-01-12 13:23:00) [8]
2Academic дурно это. Зачем именно модуль на клиенте? Северу- серверово... ТЕбе всего лишь извещения от сервера нужны, о том, что данные изменились. А клиент должен сам эти данные обновлять, кода это удобно именно ему.
unreger (2004-01-12 13:12:00) [9]
Хорошее слово - оповещения, на каждом клиенте создается таблица изменений (ссылки), а физически клиент обновляет у себя _только_ при необходимости. По-моему - гениально!
Academic (2004-01-12 12:55:00) [10]
to unreger
Я пробоват сделать подобное на файлах CDS от TClientDataSet,
Использовал для связи с общей базой MS SQL RemoteDataModule и
TSocketConnection.
Главная беда автоматическое обновление локальных данных.
Есть идея, создавать на клиенте тоже RemoteDataModule, и использовать двунаправленный обмен данными. Т.е. Один пользователь изменил свои локальные данные. Посылаются изменения на сервак. Сервак, используя список доступных RDM клиентов, рассылает обновления. Как? Не слишком мудрено?
Anatoly Podgoretsky (2004-01-12 09:14:00) [11]
Alexey K (08.01.04 15:17)
Откажись от хальсиона, поставь БДЕ и уровень таблиц 7, после этого можешь пользоваться автоинкриментными полями, без головной боли с сообственной автонумерацией и блокировками таблицы (от которой столько сможешь получить по голове, что рад не будешь.)
Другой более оптимальный вариант, легкий SQL сервер ИБ и его потомки.
Sergey13 (2004-01-12 09:01:00) [12]
2Alexey K (09.01.04 12:15) [13]
>Я тоже мечтаю о движке БД с поддержкой DBF или другого простого формата, чтобы везде работала, со встроенным, SQL , поддержкой транзакций, и.т.д
Мечтать не вредно, особенно про транзакции в контексте DBF. Кстати это вроде уже реализовано. Есть какой то сервер (забыл название) который хранит данные в DBF.
>MySQL и InterB конечно хорошо но не всегда.
Зато DBF рулит всегда? 8-) Назови хотя бы пару примеров.
unreger (2004-01-12 06:49:00) [13]
>Academic
идея хороша когда данные операторов слабо связаны между собой и достаточно обновления основной (эталонной) базы, скажем, раз в день
а вообще, надеюсь, что самому мне не придется такое делать :)
но порассуждать - интересно
может подробнее расскажешь о проблемах?
Academic (2004-01-09 12:18:00) [14]
unreger (09.01.04 07:37) [5]
Оценил. Кое что уже делал. но проблем много
Alexey K (2004-01-09 12:18:00) [15]
P.S ЗАбыл совсем без БДЕ только, и без установки всяких прочих сервисов , дровов, и.т.д ,,,,а может есть где то что то а?
Alexey K (2004-01-09 12:15:00) [16]
ДА нет идею оценили, просто сложно и долго это все. Я тоже мечтаю о движке БД с поддержкой DBF или другого простого формата, чтобы везде работала, со встроенным, SQL , поддержкой транзакций, и.т.д MySQL и InterB конечно хорошо но не всегда.
Alexey K (2004-01-09 12:10:00) [17]
<kfujlfh. пробовать пора хватит спрашивать.
Должно, млин, получиться.
С благодарностью к Мастерам и создателям сайта . Алексей К.
unreger (2004-01-09 12:08:00) [18]
ну вот опять не оценили идею :)
chudaks (2004-01-09 12:03:00) [19]
можно поступить так:
первоначально хранить все в кэше, затем при записи брать последний номер ID и вписывать туда данные блокируя при этом для остальных базу.
Alexey K (2004-01-09 11:59:00) [20]
БДЕ никак нельзя, а насчет остального спасибо, меня вот какой вопрос еще интересует, при добавлении несколькими пользователями записей в базу (одновременно) не будет ли ошибок. А вообче спасибо всем ответившим большое! ВзаимоHelp программеров это очень хорошо.