Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Вопрос о технологии "клиент-сервер" (+)
|
|||
|---|---|---|---|
|
#18+
Всем доброе время суток. Что-то ничего не нашел в сети по разработке приложений типа "клиент-сервер", если дадите ссылок, буду очень признателен. А вопрос такой: есть некий документ, который реализуется в базе на нескольких таблицах (шапка документа, состав, дополнительные данные и т.д.) Пользователь хочет в приложении либо открыть существующий документ для редактирования, либо создать новый. Как это реализовать в приложении: 1. Создавать похожую структуру таблиц, связей и т.д., но в памяти клиента-компьютера, т.е. структура документа будет реализована средставми языка программирования - массивы в памяти, структуры и т.д. Для того чтобы сохранить новый или отредактированный документ в базе - из памяти переносится в таблицы базы. Неудобство - чем сложнее документ, тем сложнее его реализовать в памяти: структуры, массивы, проверки и т.д. Но из плюсов - меньше нагрузка на сеть и сервер БД. Выше скорость работы, т.к. обрабатывать данные в памяти компьютера в любом случае быстрее, нежели в базе. 2. Открывать транзакцию в базе, пользователь будет работать с документом (редактировать содержимое, дополнять или удалять что-то). Все изменения фиксируются сразу же в базе. По завершению редактирования - или COMMIT, или ROLLBACK (смотря что выберет пользователь) Наверное, правильнее все же второй вариант с точки зрения технологии. Но в реальности все так же? Подскажите, пожалуйста, или дайте ссылок :) Заранее большое спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2005, 19:46 |
|
||
|
Вопрос о технологии "клиент-сервер" (+)
|
|||
|---|---|---|---|
|
#18+
Вариант #1 - может быть, но больго геморойно. Вариант #2 - никогда! Вариант #3. Пользователь все делает на отвязаных рекордсетах, а после окончания редактирования быстренько все сохраняет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2005, 20:46 |
|
||
|
Вопрос о технологии "клиент-сервер" (+)
|
|||
|---|---|---|---|
|
#18+
У меня сейчас именно вариант1. Т.е. структура документа в базе реализуется в памяти локального компьютера. Вся работа с документом - в памяти, т.е. все связи, зависимости, целостность данных. Но действительно, уж больно геморройно. Вопрос возник из-за того, что понадобилось очередное "усложнение" документа в памяти компьютера. А почему вариант2 - никогда? Не зная все тонкостей (не хватает опыта разработки БД), удобнее было бы. Есть куча вопросов о поддержании целостности в данном случае. Что Вы подразумеваете на отвязанных рекордсетах? Т.е. получить данные, хранить в рекордсетах, а потом - UpdateBatch всех рекордсетов? Если так, то идея неплоха!!! Надо обдумать. Или я неправильно понял? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2005, 21:06 |
|
||
|
Вопрос о технологии "клиент-сервер" (+)
|
|||
|---|---|---|---|
|
#18+
Клиент на VC++. Сейчас все сделано не на рекордсетах, а, скажем так, на массивах, списках и т.д. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2005, 21:10 |
|
||
|
Вопрос о технологии "клиент-сервер" (+)
|
|||
|---|---|---|---|
|
#18+
Нет никакой разницы. Даже лучше. Свобода. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2005, 22:03 |
|
||
|
Вопрос о технологии "клиент-сервер" (+)
|
|||
|---|---|---|---|
|
#18+
Сахават ЮсифовНет никакой разницы. Даже лучше. Свобода. Между чем и чем Вы имеете в виду "нет разницы"? Между этими двумя вариантами? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2005, 22:10 |
|
||
|
Вопрос о технологии "клиент-сервер" (+)
|
|||
|---|---|---|---|
|
#18+
Под "отвязаным рекордсетом" обычно понимается рекордсет, изменения в котором никак не отражаются на данных из которых он получен. Так как данные в базе хранятся в виде таблиц, то разумно хранить подготовленые к занесению в базу данные в двумерных массивах, однако зачем городить огород с объявлениями всяких массивов, механизмами их заполнения и пр., в то время как нужная структрура может быть получена автоматически. Пишется что-то вроде select * from table where что-то=невозможное значение. Еще один плюс такого метода - если в таблице сделаны какие-то изменения, то не надо много переделывать код клиента. Можно и UpdateBatch. Если это одна таблица. Если много, то лучше все собрать в одном месте и сделать в единой транзакции, открытой на сервере . Это ключевые слова. Именно поэтому не катит вариант №2. Никогда нельзя открывать транзакции на клиенте! Пользователь открыл транзакцию. Попил чаю. Пошел домой. Сломал ногу. Попал в больницу. А кто будет транзакцию закрывать и блокировки снимать? Админ? А он в это время в командировке в пивной. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2005, 22:22 |
|
||
|
Вопрос о технологии "клиент-сервер" (+)
|
|||
|---|---|---|---|
|
#18+
Понятно, я примерно так и понял про рекордсеты. Буду получать нужные данные в рекордсет, менять уже в нем, но с отложенным обновлением. Если пользователь выберет - "сохранить документ", тогда UpdateBatch для рекордсета. Мне удобнее будет часть документа в приложении сделать на рекордсете, а часть все же на массивах и структурах. Ну да ладно, это уже все понятно. Насчет транзакций, я и писал, что открывать в базе, а не на клиенте: Kezya2. Открывать транзакцию в базе , пользователь будет работать с Самое первое сообщение. Cat2 - большое Вам спасибо, подсказали вариант, о котором я не знал !!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2005, 22:28 |
|
||
|
Вопрос о технологии "клиент-сервер" (+)
|
|||
|---|---|---|---|
|
#18+
UpdateBatch - плохое решение. Если надо занести данные в несколько таблиц, то этот метод будет окрывать транзакции для каждой таблицы, что чревато противоречивость данных если одна из них не завершится. Этого можно избежать, открыв перед UpdateBatch транзакцию на клиенте. Однако это опять грабли с ее возможным незавершением. Ну упадет клиентская машина между обновлением 17 и 18 таблицы! Лучше использовать хранимую процедуру в которой в единой транзакции выполняются все обновления всех таблиц или собирать на клиенте запрос примерно такого вида: begin transaction update table1 ... update table2 ... ... commit transaction ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2005, 23:34 |
|
||
|
Вопрос о технологии "клиент-сервер" (+)
|
|||
|---|---|---|---|
|
#18+
Если в рекордсете будут данные из нескольких таблиц, то для полного обновления одного рекордсета с использованием ХП - придется в цикле вызывать ХП для каждой записи в рекордсете. Что тоже не очень хорошо в плане производительности. А иначе - я что-то не понимаю с обновлением :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2005, 00:19 |
|
||
|
Вопрос о технологии "клиент-сервер" (+)
|
|||
|---|---|---|---|
|
#18+
KezyaЕсли в рекордсете будут данные из нескольких таблиц, то для полного обновления одного рекордсета с использованием ХП - придется в цикле вызывать ХП для каждой записи в рекордсете. Что тоже не очень хорошо в плане производительности. А иначе - я что-то не понимаю с обновлением :( Если ты обтетишь одну таблицу, то делаешь изменние и сразу коммит (или автокоммит в свойствах рекордсетов). Если обнавляешь сразу несколько таблиц, то это лучше делать в ХП. И старайся построить логику преложения так, чтобы ФИЗИЧЕСКИ не блокировать таблицу на долго. Cat2 begin transaction update table1 ... update table2 ... ... commit transaction Это не самый лучший способ обнавления нескольких таблиц, так лучше на клиенте не делать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2005, 09:01 |
|
||
|
Вопрос о технологии "клиент-сервер" (+)
|
|||
|---|---|---|---|
|
#18+
Cat2 2. Никогда C> нельзя открывать транзакции на клиенте! Пользователь открыл транзакцию. C> Попил чаю. Пошел домой. Сломал ногу. Попал в больницу. А кто будет C> транзакцию закрывать и блокировки снимать? Админ? А он в это время в C> командировке в пивной. Вы какой сервер имели ввиду? Например, в ib/fb (версионник) транзакция может быть открыта только на клиенте. Читающая транзакция блокировок не выставляет, а пишущую открывают лишь для сохранения. В общем то я понял, что вы хотели сказать... просто утверждение не распространяется на все сервера. -- Dik76 Posted via ActualForum NNTP Server 1.2 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2005, 10:10 |
|
||
|
Вопрос о технологии "клиент-сервер" (+)
|
|||
|---|---|---|---|
|
#18+
bas Cat2 begin transaction update table1 ... update table2 ... ... commit transaction Это не самый лучший способ обнавления нескольких таблиц, так лучше на клиенте не делать. Именно так и правильно делать, независимо идет ли прямой UPDATE или через ХП. Сохранение документа с перечнем это одна транзакция, либо сохранился весь либо откатилось все. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2005, 11:49 |
|
||
|
Вопрос о технологии "клиент-сервер" (+)
|
|||
|---|---|---|---|
|
#18+
EstetsИменно так и правильно делать, независимо идет ли прямой UPDATE или через ХП. Сохранение документа с перечнем это одна транзакция, либо сохранился весь либо откатилось все. Во-первых, я роллбека не увидел там, а, во-вторых, я имел ввиду, что на клиенте лучше не делать обнавление сразу в нескольких таблицах, это лучше делать в ХП. Я же не сказал, что это совсем не правильно, я сказал, что по возможности обнавление нескольких таблиц должно быть завернуто в ХП. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2005, 12:58 |
|
||
|
Вопрос о технологии "клиент-сервер" (+)
|
|||
|---|---|---|---|
|
#18+
Афтару Мазохизм - неизлечимая болезнь ИТ-отрасли. Массивы, списки, транзакции, отвязанные рекодсеты...УЖАС ! Зачем ? Ради чего ? Что было основанием для такого решения ? Этож надо так усложнять себе жизнь. Эту тему тут сто раз перетёрли. С таким подходом Вам не поможет НИОДИН совет. Вы утонете в сложностях и глюках раньше, чем соберёте хотя бы альфа-версию. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2005, 13:10 |
|
||
|
Вопрос о технологии "клиент-сервер" (+)
|
|||
|---|---|---|---|
|
#18+
Вам надо взять заточенный для работы с БД инструмент типа Powerbuilder/Delphi/C++Builder/FoxPro/Access и поскорее (я бы добавил, бегОм) упростить программку, пока не поздно. Не нужно тратить время и силы для создания механизмов, которые были оформлены стандартом "де-факто" еще 10 лет назад. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2005, 13:21 |
|
||
|
Вопрос о технологии "клиент-сервер" (+)
|
|||
|---|---|---|---|
|
#18+
LSVАфтару Мазохизм - неизлечимая болезнь ИТ-отрасли. Массивы, списки, транзакции, отвязанные рекодсеты...УЖАС ! Зачем ? Ради чего ? Что было основанием для такого решения ? Этож надо так усложнять себе жизнь. Эту тему тут сто раз перетёрли. С таким подходом Вам не поможет НИОДИН совет. Вы утонете в сложностях и глюках раньше, чем соберёте хотя бы альфа-версию. Спорить не буду, знаний маловато. Я же попросил вначале - если есть ссылки, ткните носом. Если Вы подскажите варианты (решение, понятное дело, не надо), буду лично Вам очень признателен :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2005, 13:38 |
|
||
|
Вопрос о технологии "клиент-сервер" (+)
|
|||
|---|---|---|---|
|
#18+
TemplarВам надо взять заточенный для работы с БД инструмент типа Powerbuilder/Delphi/C++Builder/FoxPro/Access и поскорее (я бы добавил, бегОм) упростить программку, пока не поздно. Не нужно тратить время и силы для создания механизмов, которые были оформлены стандартом "де-факто" еще 10 лет назад. Клиент у меня на VC++, база MS SQL Server, доступ через ADO. Какие инструменты именно Вы имеете в виду? :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2005, 13:41 |
|
||
|
Вопрос о технологии "клиент-сервер" (+)
|
|||
|---|---|---|---|
|
#18+
Kezya TemplarВам надо взять заточенный для работы с БД инструмент типа Powerbuilder/Delphi/C++Builder/FoxPro/Access и поскорее (я бы добавил, бегОм) упростить программку, пока не поздно. Не нужно тратить время и силы для создания механизмов, которые были оформлены стандартом "де-факто" еще 10 лет назад. Клиент у меня на VC++, база MS SQL Server, доступ через ADO. Какие инструменты именно Вы имеете в виду? :( Так и спрашивайте в форуме по VC++ про доступ к БД как и что там, кто-что использует, да и почитать книжечку типа работа с БД из VC++, тут нет темы связанной с проектированием БД ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2005, 14:50 |
|
||
|
Вопрос о технологии "клиент-сервер" (+)
|
|||
|---|---|---|---|
|
#18+
Если сервер будет строго MSSQL, то рекомендую: Delphi (с компонентами SDAC, EhLib, FastReport). Сможете сотворить чудеса за очень короткое время. По теме: Используйте свой пункт 2, но без транзакций. Вааще без транзакций. Если нужно отказаться от документа, то просто удаляйте его. И всего делов. Боитесь неизбежных пропусков в нумерации ? Если это очень критично, то помечайте документ как "для удаления" и его можно будет потом заюзать повторно. ХРАНИТЕ ВСЁ СРАЗУ В БАЗЕ. Никаких отложенных коммитов. Вы наверно интербазы на MSSQL перешли ? Не правда ли ? Ща наверно услышу: "Вах...Ты знал !" (с) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2005, 15:24 |
|
||
|
Вопрос о технологии "клиент-сервер" (+)
|
|||
|---|---|---|---|
|
#18+
basТак и спрашивайте в форуме по VC++ про доступ к БД как и что там, кто-что использует, да и почитать книжечку типа работа с БД из VC++, тут нет темы связанной с проектированием БД Тема была про технологию клиент-сервер, согласен, раздел не самый подходящий, но куда бы поместили такую тему Вы? У меня уже есть и доступ и база. Мне не нужны советы про то, как это работает. Нужен был совет относительно реализации документа и всего лишь. Templar сказал, что есть специализированные инструменты, но пока ничего про них не написал. Но очень хотелось бы почитать. Т.к. написал он в этой теме, то и спросил про инструмент я здесь же. LSV же предложил другой вариант - без транзакций, но это все же другой вариант, а не другой инструмент!!! Так что Ваш последний пост вобщем-то не понял к чему вообще относится. LSVЕсли сервер будет строго MSSQL, то рекомендую: Delphi (с компонентами SDAC, EhLib, FastReport). Сможете сотворить чудеса за очень короткое время. По теме: Используйте свой пункт 2, но без транзакций. Вааще без транзакций. Если нужно отказаться от документа, то просто удаляйте его. И всего делов. Боитесь неизбежных пропусков в нумерации ? Если это очень критично, то помечайте документ как "для удаления" и его можно будет потом заюзать повторно. ХРАНИТЕ ВСЁ СРАЗУ В БАЗЕ. Никаких отложенных коммитов. Вы наверно интербазы на MSSQL перешли ? Не правда ли ? Ща наверно услышу: "Вах...Ты знал !" (с) У меня VC++, учить Delphi нет желания. Вот насчет отсутствия коммитов и отложенных обновлений стоит подумать. Только мазохизма в моих действиях особого не вижу. Два разных подхода, ну и что. В Вашем - тоже есть минусы, можем обсудить :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2005, 17:16 |
|
||
|
Вопрос о технологии "клиент-сервер" (+)
|
|||
|---|---|---|---|
|
#18+
авторТолько мазохизма в моих действиях особого не вижу. Два разных подхода, ну и что.Вот это и плохо, что не видите. :) Переусложнение чревато ужасными последствиями. Чем больше ненужных наворотов, тем меньше шансов проге стать нормальным продуктом. Это и есть самый главный минус, который может перечеркнуть ВСЁ. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2005, 18:34 |
|
||
|
Вопрос о технологии "клиент-сервер" (+)
|
|||
|---|---|---|---|
|
#18+
KezyaTemplar сказал, что есть специализированные инструменты, но пока ничего про них не написал. Но очень хотелось бы почитать. Т.к. написал он в этой теме, то и спросил про инструмент я здесь же. ... У меня VC++, учить Delphi нет желания. Вот насчет отсутствия коммитов и отложенных обновлений стоит подумать. Если есть желание изучать VC++ то конечно Delphi не более заточено под работу с БД чем VC++. А вот если есть желание написать программу работающую с БД, то я бы воспользовался советом Templar и искал языки изначально расчитанные на работу с БД. А спросить возможности можно на соседних форумах. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2005, 18:37 |
|
||
|
Вопрос о технологии "клиент-сервер" (+)
|
|||
|---|---|---|---|
|
#18+
LSV авторТолько мазохизма в моих действиях особого не вижу. Два разных подхода, ну и что.Вот это и плохо, что не видите. :) Переусложнение чревато ужасными последствиями. Чем больше ненужных наворотов, тем меньше шансов проге стать нормальным продуктом. Это и есть самый главный минус, который может перечеркнуть ВСЁ. Насчет переусложнения - полностью согласен. Надо найти баланс между излишним переусложнением и обеспечением нормальной работоспособности ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2005, 18:48 |
|
||
|
Вопрос о технологии "клиент-сервер" (+)
|
|||
|---|---|---|---|
|
#18+
KezyaВот насчет отсутствия коммитов и отложенных обновлений стоит подумать. Вот мое мнение, прямая работа с таблицами допустима только если создается телефонный справочник работающий в однопользовательском режиме. Любая более менее сложная задача включает в себя отношения мастер-детейл, кучу расчетных ХП, и в этом случае транзакционная целостность жизненно необходима. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2005, 18:50 |
|
||
|
|

start [/forum/topic.php?fid=32&fpage=149&tid=1545699]: |
0ms |
get settings: |
8ms |
get forum list: |
20ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
50ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
89ms |
get tp. blocked users: |
2ms |
| others: | 226ms |
| total: | 418ms |

| 0 / 0 |
