Форум: "Начинающим";
Текущий архив: 2006.12.24;
Скачать: [xml.tar.bz2];
Внизобновление данных на Клиенте Найти похожие ветки
← →
*Ray* © (2006-12-04 10:52) [0]Добрый день!
Помогите пожалуйста решить такую проблему:
имеется клиент-серверная база данных. (СУБД MySQL). С программой одновременно могут работать несколько пользователей, они добавляют записи в базу. Как сделать, чтобы при добавлении записей одним пользователем они сразу, отображались на машине другого пользователя? Заранее большое спасибо!
← →
Sergey13 © (2006-12-04 10:56) [1]> Помогите пожалуйста решить такую проблему:
Нет такой проблемы в 99.9% случаев. Кнопка "Обновить" решает эту "проблему". Каждую неделю обсуждается этот вопрос.
← →
Anatoly Podgoretsky © (2006-12-04 11:28) [2]> *Ray* (04.12.2006 10:52:00) [0]
А нафига другому пользователю такие неприятности?
← →
ЮЮ © (2006-12-04 11:31) [3]Для этого пользователи должнв не записи забивать, а вносить документ, поставляющий эти записи. Тогда и проблемы не возникнет, т.к. каждый смотри га записи только своего документа и его мало интересует, кто там ещё какие записи и куда вбил.
З.Ы. Когда через некоторое пользователи перестанут понимать откуда взялись подобные записи, кто их внес и почему так, придется делать так, как сказал выше. Так что сразу начни делать правильно :)
← →
*Ray* © (2006-12-04 11:50) [4]Видимо я не совсем точно описал постановку задачи. Попробую еще раз.
Все пользователи работают с одной базой данных, назовем их операторами. Поступают новые заявки, операторы должны их занести в базу, и эти записи должны так же видеть все операторы, независимо от того кто их занес в базу данных. В Access есть такая опция, обновление данных через какой-то промежуток времени, чтобы пользователи работали с актуальными данными, а не старыми. Мне нужно реализовать аналог этой функции. И сразу уточнение вопроса, с помощью какой процедуры.
← →
Sergey13 © (2006-12-04 11:55) [5]> Поступают новые заявки, операторы должны их занести в базу,
Зачем оператору1 видеть что ввел оператор2 когда он вводит свою НОВУЮ заявку?
> и эти записи должны так же видеть все операторы
Они будут видны после обновления запроса к БД. Не раньше.
← →
Desdechado © (2006-12-04 12:02) [6]1. В нормальных условиях нет необходимости видеть чужие заявки. Если же есть - это плохо организованный бизнес-процесс.
2. Заставлять пользователя что-то видеть - плохо. Пользователь должен сам попросить то, что ему нужно, и тогда, когда ему нужно. Поэтому кнопка "обновить данные" - самое лучшее решение. Иначе тебе голову оторвут, если что-то начнет читаться в момент работы с другой заявкой.
← →
*Ray* © (2006-12-04 12:05) [7]
> Зачем оператору1 видеть что ввел оператор2 когда он вводит
> свою НОВУЮ заявку?
потому что потом операторы начинают работаться с этими заявками, и им не важно кто их внес, им важно чтобы они могли видеть все внесенные заявки на определенный момент.
> > и эти записи должны так же видеть все операторы
> Они будут видны после обновления запроса к БД. Не раньше.
>
Каким образом лучше осуществить запрос к БД? Когда я просто делаюQuery.Close;
Query.Open;
выборка остается такой же какой была на момент открытия программы. Другими словами: если пользователь внес заявку, обновил выборку, то она у него видна. А у других пользователей, сколько бы они не обновляли выборки, не видна та запись которую добавил первый пользователь. Может данные нужно обновлять другим способом?
← →
Desdechado © (2006-12-04 12:11) [8]> выборка остается такой же какой была на момент открытия программы
Это означает, что данные не сохраняли, а просто забили в датасет.
← →
*Ray* © (2006-12-04 12:17) [9]to Desdechado:
попробую объяснить по-другому:
представьте какую-нибудь справочную службу, например 09. Звонит клиент, запрашивает какую-то информацию, оператор (причем ЛЮБОЙ) начинает искать по базе и дает ответ. теперь допустим, что телефон организации, про которую спрашивает клиент, изменился, и я не думаю что операторы таких служб периодически жмут кнопку "Обновить", чтобы не пропустить никаких изменений. Скорее всего у них просто по таймеру обновляются данные. Как это можно сделать?
Если вернутся к моей программе, то в моей БД данные обновляются каждые 2-3 минуты. Разве не логичнее посадить на таймер те действия, которые Вы предлагаете мне сделать по нажатию кнопки "Обновить"?
Буду благодарен если Вы напишите код, который приводит к получению самой последней информации в базе данных, например по нажатию кнопки "Обновить"
← →
Anatoly Podgoretsky © (2006-12-04 12:19) [10]> *Ray* (04.12.2006 12:05:07) [7]
У тебя много ошибок в программе, начиная с постановки задачи.
← →
*Ray* © (2006-12-04 12:19) [11]
> Это означает, что данные не сохраняли, а просто забили в
> датасет.
но если закрыть программу и открыть программу, то отображаются все данные на момент открытия. Проблема в том, что данные устаревают по мере того, как другие операторы вбивают новые заявки или редактируют старые.
← →
Anatoly Podgoretsky © (2006-12-04 12:20) [12]> Desdechado (04.12.2006 12:11:08) [8]
Интересно, почему детей допускают к программированию, серьезных, критических задач?
← →
roottim © (2006-12-04 12:23) [13]Полагаю еслибы нормально велся ФАК по проведенным баталиям кнопочки "Обновить", такие вопросы возникалибы менее раза в неделю ! :)
← →
*Ray* © (2006-12-04 12:25) [14]
> Anatoly Podgoretsky
Я понимаю, что вы знаете больше меня, но ведь вы тоже когда то этому учились. И когда я задаю здесь вопросы, я задаю их не с целю, чтобы дать посмеяться над собой более опытным программистам, а чтобы получить от них совет, получить новые знания...
← →
Anatoly Podgoretsky © (2006-12-04 12:26) [15]> *Ray* (04.12.2006 12:17:09) [9]
> оператор (причем ЛЮБОЙ) начинает искать по базе и дает ответ. теперь допустим, что телефон организации, про которую спрашивает клиент, изменился
После того как он клиенту сообщил номер, то дальнейшие уже не интесно, или ты будешь клиента, днями, месяца держать на проводе, что бы сообщить а вот сейчас уже новый телефон. Очень интересно при плате за пользование телефоном.
Насчет кнопки, конечно логично, что еще можно сделать, чтобы не навредить оператору.
← →
Anatoly Podgoretsky © (2006-12-04 12:28) [16]> *Ray* (04.12.2006 12:19:11) [11]
При закрытии программы данные записываются в базу, чего тут не понятного. Ну раз ты так спроектировал программу, то пусть перезапускают программу раз в 2-3 минуты.
← →
Anatoly Podgoretsky © (2006-12-04 12:29) [17]> *Ray* (04.12.2006 12:17:09) [9]
> Буду благодарен если Вы напишите код, который приводит к получению самой последней информации в базе данных, например по нажатию кнопки "Обновить"
С учетом последнего сообщения, ни кнопки обновить, ни какие оповещения не нужны, требуется только перезапустить программу.
← →
Anatoly Podgoretsky © (2006-12-04 12:30) [18]> roottim (04.12.2006 12:23:13) [13]
> Полагаю еслибы нормально велся ФАК по проведенным баталиям кнопочки "Обновить"
Карты в руки, а то предлагать все мастера, вот и займись FAQ сайта.
Свяжись с администрацией и предложи свои услуги.
← →
*Ray* © (2006-12-04 12:33) [19]В продолжении темы, если уж говорить про опыт и квалификацию, то я не думаю что программисты , разрабатывающие Access (в котором реализовано, то о чем я спрашиваю), испытывают недостаток знаний, а учитываю популярность Access, я думаю они полность доказали правоту своего решения.
По поводу критики: Я вполне адекватно отношусь к критике, пытаюсь делать выводы, но хотелось бы чтобы критика была конструктивной.
И вместо:
> У тебя много ошибок в программе, начиная с постановки задачи.
написали бы в чем ошибка, икак их исправить.
вместо:
> Полагаю еслибы нормально велся ФАК по проведенным баталиям
> кнопочки "Обновить", такие вопросы возникалибы менее раза
> в неделю ! :)
дали бы ссылку на материал.
и наконец было бы здорово, если бы я все-таки получил ответы на свои вопросы, который уже не раз задавал в разных вариантах.
> Разве не логичнее посадить на таймер те действия, которые
> Вы предлагаете мне сделать по нажатию кнопки "Обновить"?
>
>
> Буду благодарен если Вы напишите код, который приводит к
> получению самой последней информации в базе данных, например
> по нажатию кнопки "Обновить"
или хотя бы объяснение моей неправоты.
С уважением.
← →
*Ray* © (2006-12-04 12:42) [20]to Anatoly Podgoretsky:
Я не совсем понимаю ваш сарказм, искрометное чувство юмора. не понимаю, зачем вообще давать советы (вроде:
> Ну раз ты так спроектировал программу, то пусть перезапускают
> программу раз в 2-3 минуты.
), если они изначально неправильны и ненесут никакой пользы. Я думаю Вы понимаете, что у меня не было такой цели, чтобы пользователи мучались и перезапускали, н ок сожалению пока не вижу решение проблемы и обращаюсь за помощью к вам, а в ответ получаю какие-то неуместные шутки.
И честно говоря, я вас не узнаю, потому что лично Вы неоднократно помогали мне своими абсолютно точными и конкретными ответами, и я очень благодарен за это, причем овтеты были иногда проще чем этот.
← →
ЮЮ © (2006-12-04 12:50) [21]
> Все пользователи работают с одной базой данных, назовем
> их операторами. Поступают новые заявки, операторы должны
> их занести в базу,
Поэтому у операьора не должно быть большого НД, а только для одной заявки и кнопка "Записать". Также и искать они должны не по своему НД, а запросом к БД.
Другими словами: если пользователь внес заявку, обновил выборку, то она у него видна. А у других пользователей, сколько бы они не обновляли выборки, не видна та запись которую добавил первый пользователь. Может данные нужно обновлять другим способом?
А вот это странно. Создается впечатление, что первый пользователь ничего не занес в БД. Или делает всё в рамках одной оооооооочень длинной транзакции.
← →
Sergey13 © (2006-12-04 13:09) [22]> [7] *Ray* © (04.12.06 12:05)
> и им не важно кто их внес, им важно чтобы они могли видеть
> все внесенные заявки на определенный момент.
Ты не поверишь, но они это и видят. Причем это действительно МОМЕНТ, т.е. за милисекунду ДО или милисекунду ПОСЛЕ этого момента картина может меняться. Тебе надо разбираться с транзакциями (см. [21] ЮЮ © (04.12.06 12:50)), ибо данные незафиксированной транзакции видны только в сессии, которая вызвала эту транзакцию. Отсюда и "проблема" у тебя.
← →
Anatoly Podgoretsky © (2006-12-04 13:11) [23]
> И честно говоря, я вас не узнаю, потому что лично Вы неоднократно
> помогали мне своими абсолютно точными и конкретными ответами,
> и я очень благодарен за это, причем овтеты были иногда
> проще чем этот.
А они и сейчас точные и конкретные в рамках представленых тобой данных. А вот насчет этого предлагаю задуматься.
← →
Desdechado © (2006-12-04 19:05) [24]> Звонит клиент, запрашивает какую-то информацию, оператор (причем ЛЮБОЙ)
> начинает искать по базе и дает ответ. теперь допустим, что телефон
> организации, про которую спрашивает клиент, изменился, и я не думаю
> что операторы таких служб периодически жмут кнопку "Обновить", чтобы
> не пропустить никаких изменений.
Ключевое слово выделено. Оператор не должен видеть всю простыню заявок и возможных ответов на них. Оператор на запрос клиента запрашивает данные из БД. А на момент запроса они всегда свежие.
А твой подход похож на ксерокопирование энциклопедии для того, чтобы полным визуальным анализом найти одну строку. Ты же так не делаешь? Ты открываешь оглавление или словарную статью и читаешь. Вот и программу так сделай.
← →
*Ray* © (2006-12-05 12:40) [25]Всем большое спасибо за советы! Отдельное спасибо Desdechado за желание помочь объяснить.
← →
Плохиш © (2006-12-05 12:50) [26]
> roottim © (04.12.06 12:23) [13]
> Полагаю еслибы нормально велся ФАК
Наивный, дети факи не читают. Или до сих пор этого не понял?
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2006.12.24;
Скачать: [xml.tar.bz2];
Память: 0.53 MB
Время: 0.04 c