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

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

обновление данных на Клиенте [D7, MySQL]


Страницы:   1 2

*Ray* ©   (2006-12-04 10:52:00) 

Добрый день!
Помогите пожалуйста решить такую проблему:
имеется клиент-серверная база данных. (СУБД MySQL). С программой одновременно могут работать несколько пользователей, они добавляют записи в базу. Как сделать, чтобы при добавлении записей одним пользователем они сразу, отображались на машине другого пользователя? Заранее большое спасибо!


Плохиш   (2006-12-05 12:50:00) [1]


> roottim ©   (04.12.06 12:23) [13]
> Полагаю еслибы нормально велся ФАК

Наивный, дети факи не читают. Или до сих пор этого не понял?


*Ray*   (2006-12-05 12:40:00) [2]

Всем большое спасибо за советы! Отдельное спасибо Desdechado за желание помочь объяснить.


Desdechado   (2006-12-04 19:05:00) [3]

> Звонит клиент, запрашиваеткакую-то информацию, оператор (причем ЛЮБОЙ)
> начинает искать по базе и дает ответ. теперь допустим, что телефон
> организации, про которую спрашивает клиент, изменился, и я не думаю
> что операторы таких служб периодически жмут кнопку "Обновить", чтобы
> не пропустить никаких изменений.
Ключевое слово выделено. Оператор не должен видеть всю простыню заявок и возможных ответов на них. Оператор на запрос клиента запрашивает данные из БД. А на момент запроса они всегда свежие.
А твой подход похож на ксерокопирование энциклопедии для того, чтобы полным визуальным анализом найти одну строку. Ты же так не делаешь? Ты открываешь оглавление или словарную статью и читаешь. Вот и программу так сделай.


Anatoly Podgoretsky   (2006-12-04 13:11:00) [4]


> И честно говоря, я вас не узнаю, потому что лично Вы неоднократно
> помогали мне своими абсолютно точными и конкретными ответами,
>   и я очень благодарен за это, причем овтеты были иногда
> проще чем этот.

А они и сейчас точные и конкретные в рамках представленых тобой данных. А вот насчет этого предлагаю задуматься.


Sergey13   (2006-12-04 13:09:00) [5]

> [7] *Ray* ©   (04.12.06 12:05)
> и им не важно кто их внес, им важно чтобы они могли видеть
> все внесенные заявки на определенный момент.

Ты не поверишь, но они это и видят. Причем это действительно МОМЕНТ, т.е. за милисекунду ДО или милисекунду ПОСЛЕ этого момента картина может меняться. Тебе надо разбираться с транзакциями (см. [21] ЮЮ ©   (04.12.06 12:50)), ибо данные незафиксированной транзакции видны только в сессии, которая вызвала эту транзакцию. Отсюда и "проблема" у тебя.


ЮЮ   (2006-12-04 12:50:00) [6]


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

Поэтому у операьора не должно быть большого НД, а только для одной заявки и кнопка "Записать".  Также и искать они должны не по своему НД, а запросом к БД.

Другими словами: если пользователь внес заявку, обновил выборку, то она у него видна. А у других пользователей, сколько бы они не обновляли выборки, не видна та запись которую добавил первый пользователь. Может данные нужно обновлять другим способом?

А вот это странно. Создается впечатление, что первый пользователь ничего не занес в БД. Или делает всё в рамках одной оооооооочень длинной транзакции.


*Ray*   (2006-12-04 12:42:00) [7]

to Anatoly Podgoretsky:

Я не совсем понимаю ваш сарказм,  искрометное чувство юмора. не понимаю, зачем вообще давать советы (вроде:
> Ну раз ты так спроектировал программу, то пусть перезапускают
> программу раз в 2-3 минуты.


), если они изначально неправильны и ненесут никакой пользы. Я думаю Вы понимаете, что у меня не было такой цели, чтобы пользователи мучались и перезапускали, н ок сожалению пока не вижу решение проблемы и обращаюсь за помощью к вам, а в ответ получаю какие-то неуместные шутки.

И честно говоря, я вас не узнаю, потому что лично Вы неоднократно помогали мне своими абсолютно точными и конкретными ответами,  и я очень благодарен за это, причем овтеты были иногда проще чем этот.


*Ray*   (2006-12-04 12:33:00) [8]

В продолжении темы, если уж говорить про опыт  и квалификацию, то я не думаю что программисты , разрабатывающие Access (в котором реализовано, то о чем я спрашиваю), испытывают недостаток знаний, а учитываю популярность Access, я думаю они полность доказали правоту своего решения.

По поводу критики: Я вполне адекватно отношусь к  критике, пытаюсь делать выводы, но хотелось бы чтобы критика была конструктивной.
И вместо:

> У тебя много ошибок в программе, начиная с постановки задачи.

написали бы в чем ошибка,  икак их исправить.

вместо:

> Полагаю еслибы нормально велся ФАК по проведенным баталиям
> кнопочки "Обновить", такие вопросы возникалибы менее раза
> в неделю ! :)

дали бы ссылку на материал.

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


> Разве не логичнее посадить на таймер те действия, которые
> Вы предлагаете мне сделать по нажатию кнопки "Обновить"?
>
>
> Буду благодарен если Вы напишите код, который приводит к
> получению самой последней информации в базе данных, например
> по нажатию кнопки "Обновить"

или хотя бы объяснение моей неправоты.
С уважением.


Anatoly Podgoretsky   (2006-12-04 12:30:00) [9]

> roottim  (04.12.2006 12:23:13)  [13]

> Полагаю еслибы нормально велся ФАК по проведенным баталиям кнопочки "Обновить"

Карты в руки, а то предлагать все мастера, вот и займись FAQ сайта.

Свяжись с администрацией и предложи свои услуги.


Anatoly Podgoretsky   (2006-12-04 12:29:00) [10]

> *Ray*  (04.12.2006 12:17:09)  [9]

> Буду благодарен если Вы напишите код, который приводит к получению самой последней информации в базе данных, например по нажатию кнопки "Обновить"

С учетом последнего сообщения, ни кнопки обновить, ни какие оповещения не нужны, требуется только перезапустить программу.


Anatoly Podgoretsky   (2006-12-04 12:28:00) [11]

> *Ray*  (04.12.2006 12:19:11)  [11]

При закрытии программы данные записываются в базу, чего тут не понятного. Ну раз ты так спроектировал программу, то пусть перезапускают программу раз в 2-3 минуты.


Anatoly Podgoretsky   (2006-12-04 12:26:00) [12]

> *Ray*  (04.12.2006 12:17:09)  [9]

> оператор (причем ЛЮБОЙ) начинает искать по базе и дает ответ. теперь допустим, что телефон организации, про которую спрашивает клиент, изменился

После того как он клиенту сообщил номер, то дальнейшие уже не интесно, или ты будешь клиента, днями, месяца держать на проводе, что бы сообщить а вот сейчас уже новый телефон. Очень интересно при плате за пользование телефоном.

Насчет кнопки, конечно логично, что еще можно сделать, чтобы не навредить оператору.


*Ray*   (2006-12-04 12:25:00) [13]


> Anatoly Podgoretsky

Я понимаю, что вы знаете больше меня, но ведь вы тоже когда то этому учились. И когда я задаю здесь вопросы, я задаю их не с целю, чтобы дать посмеяться над собой более опытным программистам, а чтобы получить от них совет, получить новые знания...


roottim   (2006-12-04 12:23:00) [14]

Полагаю еслибы нормально велся ФАК по проведенным баталиям кнопочки "Обновить", такие вопросы возникалибы менее раза в неделю ! :)


Anatoly Podgoretsky   (2006-12-04 12:20:00) [15]

> Desdechado  (04.12.2006 12:11:08)  [8]

Интересно, почему детей допускают к программированию, серьезных, критических задач?


*Ray*   (2006-12-04 12:19:00) [16]


> Это означает, что данные не сохраняли, а просто забили в
> датасет.

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


Anatoly Podgoretsky   (2006-12-04 12:19:00) [17]

> *Ray*  (04.12.2006 12:05:07)  [7]

У тебя много ошибок в программе, начиная с постановки задачи.


*Ray*   (2006-12-04 12:17:00) [18]

to Desdechado:

попробую объяснить по-другому:
представьте какую-нибудь справочную службу, например 09. Звонит клиент, запрашивает какую-то информацию, оператор (причем ЛЮБОЙ) начинает искать по базе и дает ответ. теперь допустим, что телефон организации, про которую спрашивает клиент, изменился, и я не думаю что операторы таких служб периодически жмут кнопку "Обновить", чтобы не пропустить никаких изменений. Скорее всего у них просто по таймеру обновляются данные. Как это можно сделать?
Если вернутся к моей программе, то в моей БД данные обновляются каждые 2-3 минуты. Разве не логичнее посадить на таймер те действия, которые Вы предлагаете мне сделать по нажатию кнопки "Обновить"?

Буду благодарен если Вы напишите код, который приводит к получению самой последней информации в базе данных, например по нажатию кнопки "Обновить"


Desdechado   (2006-12-04 12:11:00) [19]

> выборка остается такой же какой была на момент открытия программы
Это означает, что данные не сохраняли, а просто забили в датасет.


*Ray*   (2006-12-04 12:05:00) [20]


> Зачем оператору1 видеть что ввел оператор2 когда он вводит
> свою НОВУЮ заявку?

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


> > и эти записи должны так же видеть все операторы
> Они будут видны после обновления запроса к БД. Не раньше.
>

Каким образом лучше осуществить запрос к БД? Когда я просто делаю Query.Close;
Query.Open;

выборка остается такой же какой была на момент открытия программы. Другими словами: если пользователь внес заявку, обновил выборку, то она у него видна. А у других пользователей, сколько бы они не обновляли выборки, не видна та запись которую добавил первый пользователь. Может данные нужно обновлять другим способом?


Страницы:   1 2

Наверх

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