Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

HELP Проблема при многопользовательском доступе [D5, dBase, FoxPro]


Страницы:   1 2

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 программеров это очень хорошо.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо