Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Многопользовательское приложение...
|
|||
|---|---|---|---|
|
#18+
Почти уже сделан проэкт...Хотелось бы знать, что нужно сделать чтобы приложение было многопользовательским, тоесть одновременно работающим на разных компьютерах. Тоесть база у меня будет лежать в папочке на сервере... Какие есть ньюансы... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2005, 15:34 |
|
||
|
Многопользовательское приложение...
|
|||
|---|---|---|---|
|
#18+
Ну если проЭкт уже сделан, а вопрос о многопользовательской работе встал сейчас, то боюсь, что его придется переделывать. Про ньюансы, надо создать ЕХЕ, создать дистрибутив и поставить его на клиентские машины на кот он должен работать, если не будет работать то задавать вопросы в таком виде - делаю то-то, получается то-то. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2005, 16:01 |
|
||
|
Многопользовательское приложение...
|
|||
|---|---|---|---|
|
#18+
Если все таблицы у меня находятся в контейнере базы данных, и эта база данных будет находится на сервере... смогут ли люди с клиентской частью одновременно получить доступ до этой базы данных... Тоесть ее на каждом клиенте нужно открывать базу данных не эксклюзивно??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2005, 16:59 |
|
||
|
Многопользовательское приложение...
|
|||
|---|---|---|---|
|
#18+
авторТоесть ее на каждом клиенте нужно открывать базу данных не эксклюзивно??? Правильно понимаешь, но ещё и таблички надо открыть в разделяемом режиме. Нужно использовать транзакции, можно использовать буферизацию итд, вообщем пробуй. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2005, 17:12 |
|
||
|
Многопользовательское приложение...
|
|||
|---|---|---|---|
|
#18+
PaulWist но ещё и таблички надо открыть в разделяемом режиме. Нужно использовать транзакции, можно использовать буферизацию итд, вообщем пробуй. Транзакции и буферизацию я то использую по полной программе... А что Вы имели ввиду под: "открытием табличек в раздельном режиме"?? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2005, 17:20 |
|
||
|
Многопользовательское приложение...
|
|||
|---|---|---|---|
|
#18+
Код: plaintext или для форм использовать SET EXCLU OFF ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2005, 17:29 |
|
||
|
Многопользовательское приложение...
|
|||
|---|---|---|---|
|
#18+
Проблема в том, что недостаточно просто дать возможность работать с одной таблитцей нескольким пользователям одновременно. Это-то решается элементарными настройками в главной программе: SET EXCLUSIVE OFF И проверкой опции Exclusive для всех курсоров в DataEnvironemnt форм и отчетов. Основная проблема заключается в разрешении конфликтов совестного доступа: два пользователя "одновременно" решили модифицировать запись. Если ты писал программу в расчете на одного пользователя, то будут постоянные претензии со стороны пользователей о невозможности работать. Будут идти постоянные сообщения об ошибках. Вряд ли, при создании однопользовательского приложения, ты заботился о сокращении времени блокировки записей и таблиц. Кроме того, при работе в режиме EXCLUSIVE OFF невозможно использовать ряд команд и функций. Тех, которые требуют единоличного доступа к таблице. ALTER TABLE INDEX when creating, adding, or deleting a compound index tag. INSERT [BLANK] - Оставлена для совместимости с FPD. Не путать с INSERT-SQL MODIFY STRUCTURE To use this command to change a table structure, you must open the table exclusively. You can, however, use this command in read-only mode when you open the table for shared use. PACK REINDEX ZAP Вобщем, Павел правильно сказал. Придется переписывать программу. "Косметикой" здесь не отделаешся. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2005, 00:38 |
|
||
|
Многопользовательское приложение...
|
|||
|---|---|---|---|
|
#18+
Hi help123! C твоим ником пора бы и знать где искать ответы на такие вопросы :) Там целый раздел есть "Programming for Shared Access" - почитай его для начала. Posted via ActualForum NNTP Server 1.1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2005, 04:24 |
|
||
|
Многопользовательское приложение...
|
|||
|---|---|---|---|
|
#18+
ВладимирМВряд ли, при создании однопользовательского приложения, ты заботился о сокращении времени блокировки записей и таблиц. А как это. Я перед изменением данных в таблице использовал оптимистическую буфферизацию, и в сами таблицы изменения подтверждал TableUpdatе-ом, окруженным транзакцией. Правильно все ли делал??? ВладимирМневозможно использовать ряд команд и функций. Тех, которые требуют единоличного доступа к таблице: INDEX, INSERT [BLANK], MODIFY STRUCTURE INDEX - индекси по таблицам все построены в контейнере базы данных, тоесть во время исполнения программы я их нигде не создаю по таблицам. А только использую для связывания временных курсоров для формирования отчетов... а ведь они выполняются на стороне клиента... верно??? А вот INSERT [BLANK] использую конечно, а что-же тогда делать... как добавлять записи в таблицы??? Диченконе заниматься глупостями а засесть за изучение MSSQL и клиент-серверных технологий полностью с Вами согласен, MSSQL это круто, но зачем он мне, если в моей базе буду работать: я, мой менеджер, да еще 2 начальника будут один раз в день отчеты смотреть... Да и сложновато для начала... я ведь только почти VFP не до конца освоил... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2005, 09:15 |
|
||
|
Многопользовательское приложение...
|
|||
|---|---|---|---|
|
#18+
авторЯ перед изменением данных в таблице использовал оптимистическую буфферизацию, и в сами таблицы изменения подтверждал TableUpdatе-ом, окруженным транзакцией. Правильно все ли делал??? Правильно, есть несколько тонких моментов, TableUpdate() - возвращает результат выполнения операции обновления, вот его НЕОБХОДИМО разбирать, для того, что бы разрешать конфликты обновления, наряду с этим: - Buffering = 3 - производит косвенный TableUpdate(), те сбрасывает изменения в записи на диск при переходе на др запись, вот здесь есть потенциальная опасность обновить данные вне транзакции. - Buffering = 5 - требует явного TableUpdate() авторА вот INSERT [BLANK] использую конечно, а что-же тогда делать... как добавлять записи в таблицы??? просто использовать INSERT-SQL (INSERT INTO TABLE(....) VALUES(.....)), на это кстати указал Владимир. авторMSSQL это круто Молодец, правильно понимаешь, что к чему, а то они тебе ещё предложат "тонкого клиента" нарисовать. Всему своё время, дерзай. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2005, 10:30 |
|
||
|
Многопользовательское приложение...
|
|||
|---|---|---|---|
|
#18+
help123 ВладимирМВряд ли, при создании однопользовательского приложения, ты заботился о сокращении времени блокировки записей и таблиц. А как это. Я перед изменением данных в таблице использовал оптимистическую буфферизацию, и в сами таблицы изменения подтверждал TableUpdatе-ом, окруженным транзакцией. Правильно все ли делал??? Рад за Вас. Большинство разработчиков однопользовательских приложений так не делают, поскольку для одного пользователя это не нужно. help123 ВладимирМневозможно использовать ряд команд и функций. Тех, которые требуют единоличного доступа к таблице: INDEX, INSERT [BLANK], MODIFY STRUCTURE INDEX - индекси по таблицам все построены в контейнере базы данных, тоесть во время исполнения программы я их нигде не создаю по таблицам. А только использую для связывания временных курсоров для формирования отчетов... а ведь они выполняются на стороне клиента... верно??? Опять же, рад за Вас. Грамотное решение. help123А вот INSERT [BLANK] использую конечно, а что-же тогда делать... как добавлять записи в таблицы??? Мда. Не надо было включать INSERT [BLANK] в список. Вы ее спутали с дургой командой (INSERT-SQL) несмотря на явное предупреждение. В FoxPro есть 2 команды, внешне похожие: INSERT [BLANK] INSERT-SQL INSERT-SQL - это то, что Вы пишите примерно в таком синтаксисе INSERT INTO MyTable (Field1, Field2) VALUES (m.Var1, m.Var2) Эту команду можно использовать в многопользовательском режиме. Никаких препятствий и ограничений нет. INSERT [BLANK] - это наследие FPD. Что это такое я описывать не буду, чтобы не вводить в искушение. Использовать ее вообще не рекомендуется даже в однопользовательском приложении. Оставлена исключительно для обратной совместимости с FPD. help123 Диченконе заниматься глупостями а засесть за изучение MSSQL и клиент-серверных технологий полностью с Вами согласен, MSSQL это круто, но зачем он мне, если в моей базе буду работать: я, мой менеджер, да еще 2 начальника будут один раз в день отчеты смотреть... Да и сложновато для начала... я ведь только почти VFP не до конца освоил... Диченко слишком привык флеймить, а стиль общения во флеймовых форумах сильно отличается от стиля общения в тематических форумах. Большинство людей в таких форумах не расположены шутить вообще, а на таком уровне, на котором шутит Диченко воспринимают это как неприкрытое хамство. (2 Диченко : это не наезд. Я то Вас понимаю, но шутка, как и ложка, хороша к месту и ко времени.) PS: Зачем Вы выделяете свои сообщения жирным шрифтом? Не думаю, что в этом есть необходимость. Вам ответят и в том случае, если текст будет написан обычным шрифтом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2005, 10:34 |
|
||
|
Многопользовательское приложение...
|
|||
|---|---|---|---|
|
#18+
ВладимирМ Мда. Не надо было включать INSERT [BLANK] в список. Вы ее спутали с другой командой (INSERT-SQL) несмотря на явное предупреждение. А вот спутал я ее как раз.... никогда не угадаете... APPEND BLANK так стыдно..... Чтобы добавлять записи в таблицы я использую: Код: plaintext 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2005, 11:31 |
|
||
|
Многопользовательское приложение...
|
|||
|---|---|---|---|
|
#18+
авторЧтобы добавлять записи в таблицы я использую: SELECT xxx APPEND BLANK IN xxx REPLACE xxx.fieldX WITH zzz Такую конструкцию хоть можно использовать в многопользовательской среде??? Такую можно. Несколько замечаний - SELECT xxx можно и не делать если используешь APPEND BLANK IN xxx, и ес-но такой же синтаксис использовать для REPLACE .... WITH ... IN xxx - конструкцию APPEND&REPLACE для красоты (и по идеологии) надо бы заменить на INSERT - SQL, сам понимаешь 2-е операции или одна (скорость однако) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2005, 11:39 |
|
||
|
Многопользовательское приложение...
|
|||
|---|---|---|---|
|
#18+
PaulWist конструкцию APPEND&REPLACE для красоты (и по идеологии) надо бы заменить на INSERT - SQL, сам понимаешь 2-е операции или одна (скорость однако)Вот доделаю базу чтобы заработала, поввожу данные, а потом буду подчищать ее, оптимизировать... большое спасибо за советы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2005, 11:44 |
|
||
|
Многопользовательское приложение...
|
|||
|---|---|---|---|
|
#18+
авторВот доделаю базу чтобы заработала, поввожу данные, а потом буду подчищать ее, оптимизировать Если это первая разработка, тогда простительно. На самом деле оптимизировать уже поздно - этим необходимо заниматься на стадии проектирования данных, что бы потом не было мучительно больно развивать проект или вообще переделывать с нуля, хотя как говаривал один мой знакомый "Что бы понять надо сделать, что бы сделать надо понять", такой вот замкнутый круг. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2005, 11:50 |
|
||
|
Многопользовательское приложение...
|
|||
|---|---|---|---|
|
#18+
PaulWist - SELECT xxx можно и не делать если используешь APPEND BLANK IN xxx, и ес-но такой же синтаксис использовать для REPLACE .... WITH ... IN xxx Лично я наоброт, посоветовал бы по возможности всегда использовать SELECT xxx перед командами модификации. В ранних версиях FoxPro было много глюков, связанных с модификацией данных не в текущей рабочей области через опцию IN. PaulWist - конструкцию APPEND&REPLACE для красоты (и по идеологии) надо бы заменить на INSERT - SQL, сам понимаешь 2-е операции или одна (скорость однако) Логика работы комады INSERT-SQL и APPEND+REPLACE достаточно отличны. Особенно это касается тех, полей, которые не указываются в списке полей для внесения значений (NULL или EMPTY). Все зависит от конкретной задачи. Кроме того, опять же в ранних версиях были ряд глюков с командой INSERT-SQL, а вот со связкой APPEND+REPLACE никаких глюков не наблюдалось. Поскольку автор не указал версию, то лучше перестраховаться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2005, 12:37 |
|
||
|
Многопользовательское приложение...
|
|||
|---|---|---|---|
|
#18+
ВладимирМЛогика работы комады INSERT-SQL и APPEND+REPLACE достаточно отличны. Особенно это касается тех, полей, которые не указываются в списке полей для внесения значений (NULL или EMPTY). Все зависит от конкретной задачи Владимир, вот поэтому INSERT лучше, во всяком случае нельзя будет запихнуть "пустое" значение в поле с NOT NULL, хотя иногда бывает надо. ВладимирМВ ранних версиях FoxPro было много глюков, связанных с модификацией данных не в текущей рабочей области через опцию IN ....... Кроме того, опять же в ранних версиях были ряд глюков с командой INSERT-SQL С тройкой не помню, а в 5а всё работало замечательно. ВладимирМПоскольку автор не указал версию, то лучше перестраховаться. Принято. Согласен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2005, 13:00 |
|
||
|
Многопользовательское приложение...
|
|||
|---|---|---|---|
|
#18+
ВладимирМПроверка опции Exclusive для всех курсоров в DataEnvironemnt форм и отчетов. А если у меня в контейнере базы данных есть LocalView's и в DataEnvironment форм включены такие LV. Так вот, у них свойство Exclusive установлено .Т. и изменению не поддается. Будет ли это проблемой в многопользовательском приложении.??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2005, 19:29 |
|
||
|
Многопользовательское приложение...
|
|||
|---|---|---|---|
|
#18+
help123 ВладимирМПроверка опции Exclusive для всех курсоров в DataEnvironemnt форм и отчетов. А если у меня в контейнере базы данных есть LocalView's и в DataEnvironment форм включены такие LV. Так вот, у них свойство Exclusive установлено .Т. и изменению не поддается. Будет ли это проблемой в многопользовательском приложении.??? Нет. Проблем не будет. Local View - это по сути результат выполнения команды Select-SQL. Т.е. некая таблица, которая физически находится на машине клиента. Поэтому другой пользователь о ней вообще ничего не знает. Даже если другой пользователь откроет то же самое Local View на его машине будет сформирована другая таблица, как результат команды Select-SQL. Вообще-то, настройка по-умолчанию в DataEnvironment как форм, так и отчетов как раз и сделана в расчете на многопользовательское приложение. Т.е. если ты не менял для курсоров в DataEnvironment опцию Exclusive, то о ней можешь и не вспоминать. Там все настроено "как надо". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2005, 19:36 |
|
||
|
Многопользовательское приложение...
|
|||
|---|---|---|---|
|
#18+
Используй тогда полный SQL Истина где-то там... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2005, 09:20 |
|
||
|
Многопользовательское приложение...
|
|||
|---|---|---|---|
|
#18+
Еще вопрос: обязательно ли компилировать проэкт в *.exe, не можно ли поставить на каждую машину по Фоксу и запускать проэкт. Просто пока будет работать только на 2-х компьютерах, и необходимо будет в процессе работы что-то корректировать в программе.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2005, 21:27 |
|
||
|
Многопользовательское приложение...
|
|||
|---|---|---|---|
|
#18+
help123Еще вопрос: обязательно ли компилировать проэкт в *.exe, не можно ли поставить на каждую машину по Фоксу и запускать проэкт. Просто пока будет работать только на 2-х компьютерах, и необходимо будет в процессе работы что-то корректировать в программе.... Здрасте! Конечно нужно компилировать, и лучше всего написать "запускалку", отдельный экзешник, которая будет запускаться в первую очередь, перед запуском основного экзешника. "Запускалка" будет проверять версию программы и если появилась более новая версия, то "запускалка" должна сперва копировать новую версию на компьютер пользователя и потом только выполнить запуск экзешника. Новую версию программы целесообразно выкладывать на компьютер, который будет играть роль файл-сервера (где будут лежать общие таблицы). Таким образом тебе не нужно будет бегать по каждому компьютеру и обновлять экзешник. Достаточно будет выложить новый экзешник на файл-сервер, а "запускалка" сделает все сама на каждом компе юзера. Насчет установки фокса на каждом компе - лучше так не делай. Ведь ты когда например 1С покупаешь, ты же не ставишь на каждый комп С++, на котором она написана ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2005, 22:34 |
|
||
|
Многопользовательское приложение...
|
|||
|---|---|---|---|
|
#18+
help123Еще вопрос: обязательно ли компилировать проэкт в *.exe, не можно ли поставить на каждую машину по Фоксу и запускать проэкт. Просто пока будет работать только на 2-х компьютерах, и необходимо будет в процессе работы что-то корректировать в программе.... В принципе, такое сделать можно. Но! Такое ведение проекта требует слишком большой бдительности от программиста. Ведь по сути, у тебя будет даже не 2, а 6 копий: -) 3 копии исходников (2 рабочих и 1 отладочная на твоем компе) -) Для кажой копии исходника свои откомпилированные файлы (выполняется ведь не исходные файлы PRG, а их откомпилированная версия FXP) А ведь возможны еще дубли файлов, как резервная копия или тестовые варианты. Т.е. ты получаешь страшную головную боль, когда на одном компе все работает, а на другом нет. Вот и ищи, где именно расхождение! То, что описал Диченко -это самая лучшая стратегия модификации проекта "на лету". Отладочная копия - одна. Место для взятия нового релиза - одно. Взятие нового релиза происходит автоматически в момент запуска программы у клиента. От тебя требуется только скомпилить новый релиз и положить в нужное место. При этом количество клиентов не имеет никакого значения. Сразу хочу предупредить еще об одной опасности такой корпоративной разработки. Скорее всего, какой-нибудь начальник захочет чтобы в его приложении была орагнизована какая-то особенная обработка. Не такая как у "простых смертных". Тут возможны 2 принципиальных решения задачи: -) Написать отдельную версию программы -) Сделать ветвление в одной общей версии для всех Так вот, я бы не советовал делать отдельную версию программы. Будет большая головная боль с модификацией: сделал модификацию в одной, но забыл в другой. Лучше делать ветвление в одной общей версии для всех. Но еще лучше стоять до последнего на том, что такое выделение сделать очень сложно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2005, 15:35 |
|
||
|
Многопользовательское приложение...
|
|||
|---|---|---|---|
|
#18+
Hi Владимир! > Лучше делать ветвление в одной общей версии для всех. Но еще лучше > стоять до последнего на том, что такое выделение сделать очень сложно. Если за работу денег не платят, то лучше вообще ничего не делать :) А так делается в ТЗ пунктик типа "разграничение доступа к режимам работы программы (по паролю например)" и исходя из этого и реализуется. Posted via ActualForum NNTP Server 1.1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2005, 02:49 |
|
||
|
|

start [/forum/topic.php?fid=41&msg=32876606&tid=1595008]: |
0ms |
get settings: |
9ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
46ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
64ms |
get tp. blocked users: |
2ms |
| others: | 245ms |
| total: | 397ms |

| 0 / 0 |
