Главная страница
    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.6 MB
Время: 0.026 c
3-1085056700
Санек
2004-05-20 16:38
2004.06.13
Хранение в базе отсканированных документов


4-1083835490
webpauk
2004-05-06 13:24
2004.06.13
Данные из чужого окна


3-1085130630
very beginer
2004-05-21 13:10
2004.06.13
Поиск в таблице


6-1082547991
BJValentine
2004-04-21 15:46
2004.06.13
Список рабочих станций


1-1085989896
Andrei
2004-05-31 11:51
2004.06.13
TfileStream





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский