Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.06.13;
Скачать: CL | DM;

Вниз

Как заставить автоматически обновляться ADOQuery ?   Найти похожие ветки 

 
Maxx221177   (2004-05-21 09:48) [0]

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


 
Соловьев ©   (2004-05-21 09:52) [1]

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


 
Maxx221177   (2004-05-21 09:56) [2]

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


 
Sergey13 ©   (2004-05-21 09:57) [3]

2Maxx221177   (21.05.04 09:48)  
Ответь на вопрос зачем это надо? Насколько "сразу должны увидеть другие"?


 
Sergey13 ©   (2004-05-21 10:01) [4]

2Maxx221177   (21.05.04 09:56) [2]
>И вот в этот момент другой юзер должен увидеть эти данные в своем "Журнале документов".
В каком месте журнала он должен их увидеть, если в журнале 100000 документов, он работает с 25000-м а другой юзер исправил/добобавил 99999-й.


 
TohaNik ©   (2004-05-21 10:02) [5]

>их сразу должны увидеть другие.

Не надо "автоматически":) Пусть пользователь сам решает когда
обновляться.


 
Курдль ©   (2004-05-21 10:04) [6]


> запускается транзакция которая все это вносит в базу данных.

Ну а чего ты спрашиваешь! Самое главное о СУБД ты уже знаешь!


 
Maxx221177   (2004-05-21 10:06) [7]

Sergey13 ©   (21.05.04 09:57) [3]

Что-бы открыв список документов, и начав работать в нем через час, юзер уже видел какие документы за этот период были внесены. И при этом бы не нажимал кнопок обновить и т.д.


 
ega23 ©   (2004-05-21 10:07) [8]

Самое главное о СУБД ты уже знаешь!

:о)


 
Соловьев ©   (2004-05-21 10:07) [9]


> Что-бы открыв список документов, и начав работать в нем
> через час, юзер

Так сразу или через час?
Ну так повесь на событие открытия списка - рефреш данных.


 
Maxx221177   (2004-05-21 10:09) [10]

Господа

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


 
Соловьев ©   (2004-05-21 10:11) [11]


> [10] Maxx221177   (21.05.04 10:09)

Реал-тайм стратегия :)))


 
Maxx221177   (2004-05-21 10:13) [12]

Ладно,
Серьезно.

Кто-нибудь знает как заставить обновляться ADOQuery
(идеи типа по таймеру через 5 минут... не принимаются)


 
Плохиш   (2004-05-21 10:13) [13]


> Maxx221177   (21.05.04 10:09) [10]
> Я хочу что-бы открыв журнал жокументов с фильтрами за сегодняшнее
> число, юзер в реальном времени видел как добавляются новые
> документы.

Так ты хочешь или юзер? :-)
TTimer тебя спасёт


 
Курдль ©   (2004-05-21 10:15) [14]


> Я хочу что-бы открыв журнал жокументов с фильтрами за сегодняшнее
> число, юзер в реальном времени видел как добавляются новые
> документы.

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


 
Плохиш   (2004-05-21 10:15) [15]


> Maxx221177   (21.05.04 10:13) [12]
> Ладно,
> Серьезно.

Это совершенно не серьёзно

> Кто-нибудь знает как заставить обновляться ADOQuery
> (идеи типа по таймеру через 5 минут... не принимаются)

Поставь таймер на 1 секунду :-|


 
ega23 ©   (2004-05-21 10:16) [16]

Не, конечно можно как-то извратиться. Через xp_cmdshell, чтобы рассылала какую-нибудь пургу на клиетны. При этом на каждую таблицу триггера на все изменения повесить, чтобы эти триггера xp_cmdshell запускали.
Но честно скажу - я такого программера убил бы сразу. Юзверь сам должен решать, когда обновлять данные.
Представь, ты вышел в Инете на, какой-нибудь книжный магазин. Загружаешь информацию о книге, а в это время у них пополнение БД. И ВСЕ ТЕКУЩИЕ ПОСЕТИТЕЛИ магазина начинают "обновляться".


 
Sergey13 ©   (2004-05-21 10:17) [17]

2Maxx221177   (21.05.04 10:13) [12]
>Ладно,
>Серьезно.
>(идеи типа по таймеру через 5 минут... не принимаются)
Ну прими пожалуйста, ну что тебе стоит, умоляю. 8-)


 
Курдль ©   (2004-05-21 10:20) [18]


> Ну прими пожалуйста, ну что тебе стоит, умоляю. 8-)

Да почему? Может он именно биржевой терминал делает! Например, очередь заявок должна иметь квант времени не секунду, а значительно меньше!


 
Sergey13 ©   (2004-05-21 10:28) [19]

2Курдль ©   (21.05.04 10:20) [18]
>Да почему? Может он именно биржевой терминал делает!
Ты думаешь? Бедная биржа. 8-)

2Maxx221177
Прикинь. Сидишь ты в этом форуме. И только хотел в свою ветку ткнуть, а она ба-бах и уже не первая, а третья. Не попал. Хорошо?


 
Maxx221177   (2004-05-21 10:31) [20]

Sergey13 ©   (21.05.04 10:28) [19]
Сижу и думаю что ничего конкретного то и не услышал на свой вопрос:))


 
Rule ©   (2004-05-21 10:32) [21]

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


 
ega23 ©   (2004-05-21 10:33) [22]

Да почему? Может он именно биржевой терминал делает! Например, очередь заявок должна иметь квант времени не секунду, а значительно меньше!

Сдаётся мне, что не бывает биржевых терминалов под MS SQL...


 
ega23 ©   (2004-05-21 10:36) [23]

Сижу и думаю что ничего конкретного то и не услышал на свой вопрос:))

см 16-й пост. Но это тако-о-ой израт.....
И сдаётся мне, что не услышишь...


 
Курдль ©   (2004-05-21 10:37) [24]


> Maxx221177   (21.05.04 10:31) [20]
> Сижу и думаю что ничего конкретного то и не услышал на свой
> вопрос:))

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


> ega23 ©   (21.05.04 10:33) [22]
> Сдаётся мне, что не бывает биржевых терминалов под MS SQL...

А хз! Я ничему не удивляюсь. Дело ведь не в программистах, а в качественном маркетинговом отделе.


 
Maxx221177   (2004-05-21 10:41) [25]

Господа,

пока с воми общался добрел до очередного трабла:))

MDI приложение, при попытке из одного MDIchild окна обновить ADOQuery в другом вылетает ошибка чтения по адресу..., как быть?


 
Курдль ©   (2004-05-21 10:42) [26]


> MDI приложение, при попытке из одного MDIchild окна обновить
> ADOQuery в другом вылетает ошибка чтения по адресу..., как
> быть?

"В борьбе за свежесть данных пала смертью храбрых логика работы приложения..."  :)


 
Соловьев ©   (2004-05-21 10:43) [27]


> MDI приложение, при попытке из одного MDIchild окна обновить
> ADOQuery в другом вылетает ошибка чтения по адресу..., как
> быть?

использовать Datamodule


 
ega23 ©   (2004-05-21 10:44) [28]

А хз! Я ничему не удивляюсь. Дело ведь не в программистах, а в качественном маркетинговом отделе.

Ну в общем-то да. Это из истории, как MS SQL получил лицензирование на неких объектах, а Оракл - нет. Просто ребята из мелкософта откатили больше, водку выставили получше, девок покрасивше в сауну подогнали. И получили зелёный свет.


 
Maxx221177   (2004-05-21 10:45) [29]

Курдль ©   (21.05.04 10:42) [26]

>"В борьбе за свежесть данных пала смертью храбрых логика >работы приложения..."  :)

Еще не пала, пока добиваю :))


 
Курдль ©   (2004-05-21 10:48) [30]


> Maxx221177   (21.05.04 10:45) [29]

Ну расскажи, что ли, какую общую цель преследуешь? Хоть из какой области проект? Вопрос со складом-магазином вызвал деление 50/50 сторонников и противников автообновления.


 
Rem   (2004-05-21 10:55) [31]

2 Maxx221177

Зря ты затеял тут эту дискуссию. Ничего путнего тут не подскажут. Подобный вопрос задают тут уже далеко не первый раз. Реакция почти всех мастеров и прочих: "Это не нужно, потому что это не нужно никому".

P.S. Надо обновлять не весь ADOQuery, а только добавленные или измененые записи.

P.P.S. Если нужно, заходи в MSN Messenger: remenyak@hotmail.com. Расскажу как это делается и как это должно работать.

P.P.P.S. Я бы руки поотрубал тому программеру, который бы заставил меня давить кнопку "Refresh" в уже открытом журнале всякий раз, когда я начинаю сомневаться, изменились данные или нет. Эдакий чат получается... с ручной прокруткой.


 
Емахо!   (2004-05-21 10:55) [32]

to Maxx221177
НЕ парься сильно. Купи книгу Елмановой-Тенцера "Delphi и технология COM" только возьми синюю. Конкретно глава 12 "Технология DataSnap" стр. 558 "Нотификация в технологии DataSnap" все оч. подробно объяснено


 
Maxx221177   (2004-05-21 10:56) [33]

Курдль ©   (21.05.04 10:48) [30]

>Ну расскажи, что ли, какую общую цель преследуешь?

Розничный склад с большим ассортиментом.
Заказ собирается из множества позиций


 
Емахо!   (2004-05-21 11:00) [34]

>>Розничный склад с большим ассортиментом.
>>Заказ собирается из множества позиций

У меня примерно аналогичная задача. :))))) Ток информационная система пишется, которая вообще отслеживает все, несчитая прихода-расхода товара


 
Емахо!   (2004-05-21 11:00) [35]

>>Розничный склад с большим ассортиментом.
>>Заказ собирается из множества позиций

У меня примерно аналогичная задача. :))))) Ток информационная система пишется, которая вообще отслеживает все, несчитая прихода-расхода товара


 
bushmen ©   (2004-05-21 11:02) [36]

>Розничный склад с большим ассортиментом.

И что, каждый оператор сидит за открытым окном журнала документов и упорно глядит весь день на него? :)
По-моему, он его откроет только тогда, когда к нему подойдет клиент, а потом закроет


 
Курдль ©   (2004-05-21 11:05) [37]


> Розничный склад с большим ассортиментом.
> Заказ собирается из множества позиций

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


 
Maxx221177   (2004-05-21 11:05) [38]

bushmen ©   (21.05.04 11:02) [36]

Ну иногда сидит и глядит.

А иногда у него пос..ть всемени нет, не то что refresh нажать


 
Sergey13 ©   (2004-05-21 11:08) [39]

2Maxx221177   (21.05.04 10:56) [33]
>Розничный склад с большим ассортиментом.
>Заказ собирается из множества позиций
И все опять упирается в единственный чайник на весь склад который собрались купить сразу 10 человек. 8-)
(недавно был пример с чайником - если кто не в курсе)


 
ega23 ©   (2004-05-21 11:09) [40]

Есть вариант. Делай по таймеру пинг: обновились ли записи в БД. Если обновились, то полный рефреш, раз это тебе так надо. Если нет, то дальше сидишь и дёргаешь коротенький запрос.


 
bushmen ©   (2004-05-21 11:10) [41]

>А иногда у него пос..ть всемени нет

Он что, стоя на монитор смотрит? :)
А вообще-то, в этом случае, после каждой выписки очередного заказа и делай это обновление


 
Курдль ©   (2004-05-21 11:11) [42]


> Rem   (21.05.04 10:55) [31]
> P.P.P.S. Я бы руки поотрубал тому программеру, который бы
> заставил меня давить кнопку "Refresh" в уже открытом журнале
> всякий раз.

Разьясните мне, нафига это надо? Мне нет дела до отрывания рук программерам - это прерогатива сисадминов, на которых свалится немеряное счастье в виде меряного трафика.

Как правило в нормальных прогах есть 3 типа окон - списки, редакторы и селекторы. Список - приблизительно-информативный перечень объектов. Сомневаешься - обнови. А вот если собрался вносить что-то новое, да с выбором из других таблиц, - открывай окно-редактор и вызывай из него окна-селекторы с самыми свежими данными!


 
Sergey13 ©   (2004-05-21 11:14) [43]

2Maxx221177   (21.05.04 11:05) [38]
Слушай, в зачем кладовщику/продавцу вообще журнал документов. Я бы понял еще фактическое наличие товара. А шапки документов то ему зачем?


 
Курдль ©   (2004-05-21 11:15) [44]


> ega23 ©   (21.05.04 11:09) [40]
> Есть вариант. Делай по таймеру пинг: обновились ли записи
> в БД. Если обновились, то полный рефреш, раз это тебе так
> надо. Если нет, то дальше сидишь и дёргаешь коротенький
> запрос.

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


 
ega23 ©   (2004-05-21 11:30) [45]

Здесь нужен подход именно с блокировками.

Блокировки - это безусловно. Но они нужны лишь в том случае, когда ты начал что-то оформлять. Насколько я понял автора, он хочет, чтобы в перерывах между заказами шло обновление выборки по факту изменения данных в БД. Вот на этот случай поможет пинг.


 
Sergey13 ©   (2004-05-21 11:37) [46]

>Здесь нужен подход именно с блокировками.
Как раз тут блокировки совсем не нужны. Если два юзера начнут выписывать один товар (что вполне реально), один обломится. А зачем если на складе 1000 чайников и кажду продает по десятку? Нужно простое ограничение на количество>=0 и реакция в проге на возможный облом по этому пункту. И все.


 
Курдль ©   (2004-05-21 11:46) [47]


> А зачем если на складе 1000 чайников и кажду продает по
> десятку?

А еслим обоим привалило счастье и к ним приперлись оптовые_покупатели_1000_чайников? Оба откроют окна выбора чайников и оба кликнут "1000/Ок!" После этого оптовые_покупатели_1000_чайников вынут чемоданы с черным налом, будут долго слюнявить бумажки, пересчитывая и через полчаса выясницца, что один оптовый_покупатель_1000_чайников обломится? А если у него нервы не выдержат?


 
Sergey13 ©   (2004-05-21 11:49) [48]

2Курдль ©   (21.05.04 11:46) [47]
Читай внимательно "и реакция в проге на возможный облом по этому пункту".
Кстати, если такая ситуация возникает часто, то я бы уволил чела, отвечающего за закупку товара на этот склад. 8-)


 
Rem   (2004-05-21 12:18) [49]

Про чайники [47]:

На кой блокировать запись о чайниках на все время выписки накладной? Типа, я продаю чайники, а все остальные отдыхают?

Списывание оных со склада надо проводить по факту записи накладной в БД:
- Открыли транзакцию.
- Списали чайники.
- Записали накладную.
- Закрыли транзакцию.
В случае возникновения проблем - откатили транзакцию: "Не хватает чайников". Длительность транзакции - доли секунды. На такую транзакцию не то, что одну запись блокировать можно, а всю БД (мало ли!). Никто этого все равно не заметит.

Список - приблизительно-информативный перечень объектов. Сомневаешься - обнови.

Зачем обновлять весь список вручную, если он может обновляться по отдельным записям, да еще и автоматически?
И про какой траффик идет речь, раз запрашивается одна запись (измененная или новая), а не весь DataSet? В нормализованной БД одна запись (для накладной) будет "весить" не более 100-300 байт. Или Вы работаете по диалапу?


 
Курдль ©   (2004-05-21 12:27) [50]


> Rem   (21.05.04 12:18) [49]
> Про чайники [47]:

Круто! А хто спорит? Особенно про В случае возникновения проблем - откатили транзакцию? Тут весь сыр-бор о том, чтобы предотвратить такие инцеденты!


> Зачем обновлять весь список вручную, если он может обновляться
> по отдельным записям, да еще и автоматически?

А вот это и есть квинтессенция всей ветки! Направьте автора на путь истинный (и нас заодно) и будет нам счастье!


 
bushmen ©   (2004-05-21 12:55) [51]

>весь сыр-бор о том, чтобы предотвратить такие инцеденты!

Дело в том, что клиент может заказать 500 наименований. На выписку накладной уйдет некоторое достаточно продолжительное время. И что, остальные менеджеры будут ждать?


 
Курдль ©   (2004-05-21 13:01) [52]


> И что, остальные менеджеры будут ждать?

Какое-то время - да. Но не с момента начала ввода накладной до момента ее утверждения.
Например: открываешь окно "выбрать наименование" - все блокируются. Выбрал - разблокировались. Открываешь его снова (уже с измененными тобой и другими данными) и снова выбираешь.
И так 500 раз! :)


 
bushmen ©   (2004-05-21 13:18) [53]

>открываешь окно "выбрать наименование" - все блокируются. Выбрал - разблокировались.

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



Страницы: 1 2 вся ветка

Текущий архив: 2004.06.13;
Скачать: CL | DM;

Наверх




Память: 0.62 MB
Время: 0.08 c
1-1085982193
Prankster
2004-05-31 09:43
2004.06.13
потоковая обработка


1-1086072377
dmva
2004-06-01 10:46
2004.06.13
Максимизация окна через Caption


1-1085590447
Step[B.M.]
2004-05-26 20:54
2004.06.13
Объединение нескольких документов Microsoft Word в один


3-1085040932
slava7
2004-05-20 12:15
2004.06.13
работа с БД в сети


14-1085364020
Думкин
2004-05-24 06:00
2004.06.13
С днем рождения! 24 мая