powered by simpleCommunicator - 2.0.41     © 2025 Programmizd 02
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Проблема с организацией сетевой версией
27 сообщений из 27, показаны все 2 страниц
Проблема с организацией сетевой версией
    #39571905
dima_18
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день, всем!

Проблема у меня следующая. Я к сожалению, ни разу нормально не работал с сетевой версией.
Дело в том, что нужно (сделать) построить сетевую версию.
Есть такой вариант - работа с курсорами - т.е. один человек выхватывает запись и редактирует (выхватывание происходит на уровне) курсора, но как потом происходит возвращение в общую базу данных данной записи.
А если другой способ работы: редактировать запись , а другой человек может параллельно работать с другой записью....но как так лучше сделать - я не пробовал.

Про первый способ - я делал, но мне кажется как -то происходит все кривовато - у меня так по крайней мере получалось.

Быть может дадите какой -нибудь самый простой примерчик, как Вы реализуете данный способ организации данных (орган. сетевой версии).

Большое спасибо. помогите пожалуйста
...
Рейтинг: 0 / 0
Проблема с организацией сетевой версией
    #39571917
dima_18
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В частности, интересует такой момент - хотя бы на покажите пример на такой простой ситуации.
На форме есть грид и с фио, и мы допустим редактируем фио - людей (записи , поля) и вот один человек править человека "А", второй одновременно человека "B" и чтобы они друг другу не мешали.


Конфликтов не было при совместной работе с записями.

Спасибо
...
Рейтинг: 0 / 0
Проблема с организацией сетевой версией
    #39572072
Фотография AngelOKES
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dima_18,

Вы определитесь что значит сетевая версия?

Для начало что есть для вас база данных и где будут храниться данные, как только определитесь, то вот именно под эту платформу и будете писать программу.
Если же вы планипруете использовать DBF и/или DBC, то тут свои правила есть.
У вас пока что как я понял, нет чёткого понимаю, что вы делаете и зачем
...
Рейтинг: 0 / 0
Проблема с организацией сетевой версией
    #39572079
dima_18
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AngelOKES, я буду использовать dbc - т.е. фоксовое субд.
База будет лежать на сетевом диске.
Обращаться все (пользователи) будут по сети
...
Рейтинг: 0 / 0
Проблема с организацией сетевой версией
    #39572081
Фотография AngelOKES
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dima_18,

Ну тогда открываешь все таблице в режиме shared, а там блокировки и протоколирование.
Тут не всё так просто...
...
Рейтинг: 0 / 0
Проблема с организацией сетевой версией
    #39572088
Grin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2dima_18,

Читать:
1. свойство DataSession объекта Form
2. функция CURSORSETPROP
3. функция TABLEUPDATE

статью buffering data в букваре


если коротко, то на форме ставишь приватную сессию данных,
в методе лоад, открываешь нужные таблици и устанавливаешь через CURSORSETPROP тип буферизации для таблиц.
В результате каждая форма будет иметь отдельное независимое окружение данных.
Плюс при обновлении таблиц будет использоваться буферизация.
...
Рейтинг: 0 / 0
Проблема с организацией сетевой версией
    #39572296
dima_18
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Большое спасибо, Grin, AngelOKES!

Подскажите, тогда вот что, пожалуйста. Какие статьи и книги посоветуйте. Последний вопрос касается ответа, Grin!
И еще....быть может есть у кого какие -нибудь простенькие примеры?! или адреса в интернет, где и что посмотреть. Пришлите, пожалуйста что -нибудь по этому вопросу!
Спасибо большое!
...
Рейтинг: 0 / 0
Проблема с организацией сетевой версией
    #39572308
dima_18
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Извините, еще за беспокойство. Можно я пришлю (приложу) проект - я все убрал, очень примитивный, чтобы только прочувствовать как будет выглядеть (работать) блокировка.
Спасибо
...
Рейтинг: 0 / 0
Проблема с организацией сетевой версией
    #39572310
dima_18
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я к сожалению не очень понял по статьям
...
Рейтинг: 0 / 0
Проблема с организацией сетевой версией
    #39572425
Фотография AngelOKES
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dima_18,
Можно использовать фоксовые блокировки или даже транзакции, я лично использую самописные блокировки. Как бы это на пальцах объяснить.

Есть основная таблица, у всех клиентах она открывается в режиме Shared
У каждого есть свой изменяемый курсор, привязанный например к объекту Grid.
При разработке БД добавляй как минимум 3 поля дополнительно, поле блок (код оператора), дату последнего изменения (это как вариант проверки и протоколирования) и универсальный код записи (алгоритмы сам ищи, вариантов масса).
И вот как это примерно можно организовать, встал оператор на любую запись и блокирует её своим кодом (если запись не была заблокирована другим оператором) и меняешь данные, изменил, вышел из строки, передал с таблицу. Встал на новую запись, считал актуальные данные, считал блокировки, ну и так далее.

Тут для тебя самое главное расписать алгоритм работы, вариантов масса, я лишь представил один из возможных. Как лично ты организуешь, решать тебе, но повторюсь, тут уже намного сложнее решать такие задачи (но возможно). И если это возможно переходи на нормальные СУБД (если использовать сеть) такие как MySQL, SQL Server, Oracle. С ними работать намного интереснее и надёжнее.
...
Рейтинг: 0 / 0
Проблема с организацией сетевой версией
    #39572445
dima_18
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброе утро, AngelOKES!

Большое спасибо за ответ последний.
Разрешите, я тогда опишу как я это делаю (начал делать по статье):
в настройках ставлю:

SET MULTILOCKS ON

Есть у меня formset. В нем есть форм1 и форм2. На форме 1 есть грид - в котором только фио.
На load formset я навешиваю (путь я специально для себя руками прописал - конечно - я буду по другому писать - т.е. не привязываясь к пути ):

Public newdata,newdata1,f3,dpath08

OPEN DATABASE 'baza_1.dbc' SHARED


dpath08 = 'p:\Baza\Basedata\'
f3 = 'p:\Baza\Report\'



IF !USED('fio_t2')
USE dpath08+'fio_t' ALIAS fio_t2 IN 0 SHARED
ENDIF
SELECT fio_t2
SET ORDER TO TAG id
GO TOP

CURSORSETPROP('Buffering',4,'fio_t2')

На form1 есть грид:
Операция добавления у меня следующая:
на form1 есть кнопка добавить -> открывается форма два и там след. код добавления:
public f1_1,ot1_1,na1,na1_1,str1


SELECT fio_t2

DO CASE

CASE pnom =1





r_zapros = FLOCK()
IF r_zapros

insert into fio_t2(fio);
values (thisformset.form2.text1.value)


flush
ENDIF
UNLOCK ALL





CASE pnom =2


SELECT fio_t2


Replace fio_t2 WITH thisformset.form2.text1.value

CASE pnom = 3

select fio_t2

name_znach1 = (fio_t2.fio)

podtvergdenie = MESSAGEBOX('Âû óâåðåíû â òîì, ÷òî õîòèòå äàòó ïîñåþåùíèÿ ó "&xf" îò "&name_znach1" !.', 36, "Óäàëåíèå")
*Ñîîáùåíèå âû äåéñòâèòåëüíî õîòèòå óäàëèòü äàííóþ çàïèñü(Âîçâðàùåíèå íà ok)

IF podtvergdenie = 6
DELETE

ENDIF

ENDCASE




ThisFormset.Form1.GridPerson.SetFocus()
ThisFormSet.Form2.AlwaysOnTop = .F.
ThisFormSet.Form1.Enabled = .T.
ThisFormSet.Form2.Enabled = .F.
ThisFormSet.Form2.Visible = .F.

*thisformset.form1.GridObsled.Refresh
*thisformset.form1.GridObsled.SetFocus

*thisformset.form1.GridPerson.Refresh
*thisformset.form1.GridPerson.SetFocus
...
Рейтинг: 0 / 0
Проблема с организацией сетевой версией
    #39572446
dima_18
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Посмотрите, пожалуйста, как я делаю.....может что подправите.
Очень прошу помочь.

По поводу других субд: согласен, это намного лучше. Но тут программа уже была рабочая, но не сетевая и поэтому надо как знаете, всегда, как можно быстрее - т.е. уже вчера и быстро.

Спасибо большое.
...
Рейтинг: 0 / 0
Проблема с организацией сетевой версией
    #39572451
Фотография AngelOKES
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dima_18, Я тебе так скажу быстро в любом случае не получится и то что по сути придётся писать новую программу прими как факт, либо использовать параллельно две программы, старую и новую (в ней как раз делаешь то что нужно делать по сети).
С твоим уровнем я думаю это будет очень сложно сделать:
1) сократи или полностью откажись от использования глобальных переменных.
2) При отображении данных перечитывай данные из оригинальной dbf.
3) При перемещении используй блокировки на уровне записи свои или встроенные

И самое главное распиши алгоритм на бумаге, как ты это видишь, что конретно тебе нужно, если это всего одна маленькая табличка, то всё можно сделать проще, если же это целая база данных, то просто уже не получится и нужно всё сразу делать по уму, чтобы потом не переделывать, для этого надо чтобы в голове у тебя был точный план действий, как это запрограммировать будешь думать потом. Тут тебе никто не даст готовый ответ в 2 строчки, твой проект "псевдосетевой" очень гемморойный и просто так за день-два его не решить. Потом когда будет полный алгоритм раздели его не подзадачи и постепенно решай их
...
Рейтинг: 0 / 0
Проблема с организацией сетевой версией
    #39572453
Фотография AngelOKES
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dima_18,
Да и кстати необязательно писать всегда SHARED, достаточно в начале программы задать установку

SET EXCLUSIVE OFF

И тогда все таблицы будут открываться по умолчанию в режиме SHARED

И вот эту установку SET MULTILOCKS ON тоже один раз задать в самом начале проекта
...
Рейтинг: 0 / 0
Проблема с организацией сетевой версией
    #39572458
dima_18
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AngelOKES, спасибо большое за ответ!

Я сразу вот что спрошу. Про последнюю установку SET MULTILOCKS ON - я сделал сразу и только один раз.
Я вот что не понимаю: Вы видите, как я добавляю запись, используя insert и саму таблицу - alias я прописал.
Я не понимаю следующее: я работаю с таблицей или курсором при сетевой версии?
TableUpdate или TableRevert где в моем случае писать (кусок данный)?!

Спасибо большое
...
Рейтинг: 0 / 0
Проблема с организацией сетевой версией
    #39572460
Фотография AngelOKES
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dima_18, Я таким методом не пользуюсь, поэтому ничего сказать не могу, у меня был проект где всё реализовал сам по своим алгоритмам, у каждого клиента была открыта копии таблицы, но вот перенос в неё я делал сам, как и блокировки и всё остальное. Может быть тут кто-нибудь подскажет по твоему выбранному методу (это не означает что твой метод хуже или лучше, просто лишь один из вариантов реализации)
...
Рейтинг: 0 / 0
Проблема с организацией сетевой версией
    #39572462
dima_18
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AngelOKES, понятно.
Большое спасибо все равно за большую помощь.
Буду далее думать.
...
Рейтинг: 0 / 0
Проблема с организацией сетевой версией
    #39572479
dima_18
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я что-то написал, но выполняется конечно.
Но как-то странно - я одновременно добавляю в открытой программе, запущенной два раза . Одни с сетевого диска, другой со своего диска и в одном месте добавляю, в другом месте в гриде отображается но после перехода на другую запись - т.е. во время не изменяется.

Я правда выбросил строку: cursorsetprop(buffering, 5)

Я ее не понял.
И нет у меня команды: TableUpdate()

Я не понимаю в какое место ее записать
...
Рейтинг: 0 / 0
Проблема с организацией сетевой версией
    #39572573
Ffffffffffffff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
...
Рейтинг: 0 / 0
Проблема с организацией сетевой версией
    #39572701
Grin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dima_18,
Хелп VFP9
Полезніе статьи (обязательно читать Максимова, советы начинающим)

ну и в целом на форуме foxclub громадное количество знаний и решений
...
Рейтинг: 0 / 0
Проблема с организацией сетевой версией
    #39573031
dima_18Но как-то странно - я одновременно добавляю в открытой программе, запущенной два раза . Одни с сетевого диска, другой со своего диска и в одном месте добавляю, в другом месте в гриде отображается но после перехода на другую запись - т.е. во время не изменяется.А ожидали что-то другое? На каком основании? Вы собрались редактировать данные в таблице или на всех экранах, показывающих эту таблицу? И все должны видеть весть процесс редактирования?
Я правда выбросил строку: cursorsetprop(buffering, 5)Ну и зря.
Я ее не понял.Оно и видно.И нет у меня команды: TableUpdate()Ибо она бессмысленна при выкидывании непонятой команды.
Я не понимаю в какое место ее записатьВ то, в котором таки надо сохранить данные в таблицу.
...
Рейтинг: 0 / 0
Проблема с организацией сетевой версией
    #39573465
dima_18
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо большое, всем за помощь и подсказки!
...
Рейтинг: 0 / 0
Проблема с организацией сетевой версией
    #39573546
Grin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2dima_18,

Есть разные подходы при работе в сети

cursorsetprop(buffering, ...) - нужен, для того чтобы определить как изменения будут попадать в таблицу

почитай в букваре статьи по optimistic buffering \ pessimistic data buffering
С помощью буферизации, вы можете легко находить и разрешать конфликты в операциях обновления данных: текущая запись копируется в память или на диск, обслуживаемые Visual FoxPro. Другие пользователи могут одновременно с вами обращаться к оригинальной, неизменной еще записи. Когда вы уходите с записи или пытаетесь обновить данные программно, Visual FoxPro попытается заблокировать запись, проверяет: нет лит изменений, сделанных другим пользователем во время вашего редактирования этой записи и затем записывает ее на диск. После того, как вы попытаетесь обновить данные, вы должны быть готовы разрешать возможные конфликты, что предовратит запись некорректных изменений в оригинальную запись таблцы

TableUpdate() - сбрасывает данные из буфера в таблицу + возвращает статус выполнения сброса
анализируя результат TableUpdate - определяете успех операции сохранения

что-то типа
Код: sql
1.
2.
3.
		IF TABLEUPDATE(.t.,.t.,m.source)<>.t.
			MESSAGEBOX('Ошибка сохранения данных!',16,'Ошибка!')
		ENDIF 
...
Рейтинг: 0 / 0
Проблема с организацией сетевой версией
    #39573595
dima_18
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Grin, большое спасибо за ответ!

Остается следующий вопрос у меня по
cursorsetprop(buffering, ...)
я поставил установку:
SET MULTILOCKS ON
и у меня
cursorsetprop(buffering, ...) - выдает ошибку - ругается на это

и еще:
я, как понимаю, могу использовать операцию сброса:
FLUSH
- это не эквивалент операции:
TABLEUPDATE

?
...
Рейтинг: 0 / 0
Проблема с организацией сетевой версией
    #39573614
dima_18
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Когда я выставляю однозначно в настройках:

SET MULTILOCKS ON

и выставляю
cursorsetprop(buffering, 5,'fio_t2')

у меня выдается ошибка:
Table or row buffering requires that set multilocks is set to on

что я не так делаю......
подскажите пожалуйста
...
Рейтинг: 0 / 0
Проблема с организацией сетевой версией
    #39573833
Grin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2dima_18,

ошибка однозначно говорит, что SET MULTILOCKS не установлен

SET MULTILOCKS ON должен ставиться в каждой сессии данных
тоесть если у тебя несколько форм с приватной сессией, то в каждой форме должна быть установка MULTILOCKS
...
Рейтинг: 0 / 0
Проблема с организацией сетевой версией
    #39574164
Фотография AngelOKES
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dima_18Grin, большое спасибо за ответ!

Остается следующий вопрос у меня по
cursorsetprop(buffering, ...)
я поставил установку:
SET MULTILOCKS ON
и у меня
cursorsetprop(buffering, ...) - выдает ошибку - ругается на это

и еще:
я, как понимаю, могу использовать операцию сброса:
FLUSH
- это не эквивалент операции:
TABLEUPDATE

?

FLUSH - команда принудительно записывает данные на жёсткий диск и вам в данном проекте маловероятно, что понадобиться.
TABLEUPDATE - передаёт данные в вашу базу данных из буфера и как бы должна их записать, она вам как раз и нужна, но необходимо почитать более внимательно как ей пользоваться
...
Рейтинг: 0 / 0
27 сообщений из 27, показаны все 2 страниц
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Проблема с организацией сетевой версией
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]