Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2004.02.06;
Скачать: [xml.tar.bz2];

Вниз

Как сделать автообновление записей. (Clipper-DBF на Apollo6)   Найти похожие ветки 

 
Av   (2004-01-08 10:25) [0]

Такая проблема...Несколько пользователей по сети используют одну таблицу (Clipper-DBF на Apollo6), как сделать автообновление записей, чтобы при изменении записи эти изменения были видны и у других пользователей. В данный момент изменения видны только после прокрутки Grida, что не есть хорошо. AutoRefresh установлен в True. Если есть какие то решения, мысли или обрывки мыслей, прошу поделиться. Заранее спасибо.


 
Sergey13   (2004-01-08 10:47) [1]

2Av (08.01.04 10:25)
>В данный момент изменения видны только после прокрутки Grida
Т.е. пока не прокрутишь до нужной записи, ее не видно? Это и правда не нормально. 8-)

А как бы ты хотел то?

>Если есть какие то решения, мысли или обрывки мыслей, прошу поделиться.
Делюсь "обрывками". Брось ты это... 8-)


 
Av   (2004-01-08 11:09) [2]

В том то и дело, что не до нужной записи. Добиться обновления можно только прокруткой Grida до тех пор, пока запись не уйдет за границу этого самого Grida, а потом уже возвращается обновленной. Вот такая беда.


 
Sergey13   (2004-01-08 11:35) [3]

Ну дык там наверное при перерисовке грида данные перечитываются заново. Apoll6 - это что, я не в курсе, компоненты доступа? Может они так и работают. В общем случае, для того что бы увидеть "чужие" изменения надо переоткрыть датасет.


 
VAleksey   (2004-01-08 11:42) [4]

Такие "проблемы" должны решаться обдумыванием того, как это сделано и почему сделано именно так.


 
Ильш   (2004-01-08 11:54) [5]

При многопользовательском доступе такая проблема всегда возникает. Решение может быть таким: надо как-то контролировать изменения в базе и сообщать всем пользователям об этом и делать рефреш. Вот тока реализация???? Биг проблеммм...


 
Desdechado   (2004-01-08 12:38) [6]

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


 
Av   (2004-01-08 13:54) [7]

Спасибо, буду ковырять. С кнопкой не прокатит.


 
VAleksey   (2004-01-08 16:18) [8]


> Desdechado © (08.01.04 12:38) [6]

Любое Query для локальных таблиц все равно вытянет ее всю.

> Av (08.01.04 13:54) [7]

Только с кнопкой и прокатит. Иначе - никак.


 
MV   (2004-01-08 16:45) [9]

Спасибо, буду ковырять. С кнопкой не прокатит.

Еще один бедняга...

Делай приложение с кнопкой, боссу пообещай - "потом". Со временем забудет или привыкнет.

Если для контроля изменений - то можно формировать сервер приложений, генерирующий события для клиентов, с указанием, что и как изменилось. Лови их и отображай. Ручками. Господи, какой гемор...


 
AV   (2004-01-09 09:34) [10]

Да...гемор полный..все больше склоняюсь к кнопке.


 
Строитель   (2004-01-09 11:35) [11]

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


 
Av   (2004-01-09 13:34) [12]

Спасибо, это вариант...хотя не хотелось блудить лишних таблиц. Надо попробовать...кнопка вообще не катит.


 
Av   (2004-01-09 13:58) [13]

>Строитель (09.01.04 11:35) [11]
А если за 5-10 сек, эти самые пользователи успеют добавить, предположим 3-4 записи, то тогда нужно будет обновлять все эти записи...так? В цикле. А будет ли это незаметно ? Или нужно уменьшать таймер до 1-2 сек, чтобы не успели добавить, хотя по теории вероятности найдется несколько пользователей, которые нажмут кнопку добавления практически одновременно и опять же добавится несколько записей. Подозреваю, что уменьшение таймера приведет к тому, что пользователи будут замечать обновление записей. Или я ошибаюсь? Самый лучший способ проверить это на практике.


 
Desdechado   (2004-01-09 15:57) [14]

2 VAleksey © (08.01.04 16:18)
написано же - "отбирай только те записи, которые нужны"

2 AV
замечено, что такое обновление, когда пользователь не хочет - сначала радует, потом нервирует, а потом и раздражает, особенно когда юзер не может в этот момент сделать срочно то, что он начал, но еще не сохранил


 
Av   (2004-01-09 16:20) [15]

> Desdechado © (09.01.04 15:57) [14]
Да. База синхронизации, это конечно интересно. Установил я таймер на 5 сек, обновлял запись, и через каждые 5 сек грид центровал эту обновленную запись по центру грида, т.е. визуально она терялась, от этого конечно то же можно избавиться, но уже слишком много проблем (решая одну, сталкиваешься с другой)...плюну я на эту затею.


 
Av   (2004-01-09 16:22) [16]

Обновление всего одной записи по таймеру уже убивает, а на нее еще надо перейти....блин.


 
Sergey13   (2004-01-10 08:47) [17]

2Av (09.01.04 16:22) [16]
Что и требовалось доказать. 8-)
Просто перед автоматизацией обновлений надо ответить себе на вопрос: "Неужели ВСЕ пользователи ОДНОВРЕМЕННО работают С ОДНОЙ(ними) и той-же записью(ями)?". Если ответ - НЕТ(а он такой по жизни в 99.9% задач), то НАФИГА обновлять то, что пользователю СЕЙЧАС не нужно?


 
Av   (2004-01-10 09:08) [18]

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


 
Sergey13   (2004-01-10 09:14) [19]

2Av (10.01.04 09:08) [18]
>Вот к такому же выводу мы и пришли, правда могут быть небольшие косяки ввиду специфики задачи
Эти косяки исчезнут на 100% если вы перейдете на нормальный БД-сервер. Если уж пошла работа по сети - то переход на SQL становится жизненно необходимым.


 
Av   (2004-01-10 11:48) [20]

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


 
Av   (2004-01-12 14:22) [21]

Может еще у кого какие мысли есть?


 
Desdechado   (2004-01-12 21:53) [22]

При многопользовательском доступе DBF - очень тяжко. Переходите на SQL-сервер.


 
Av   (2004-01-13 09:30) [23]

Да, конечно, но очень много задач под досом и сразу на sql перейти не получиться.


 
Desdechado   (2004-01-13 12:14) [24]

естественно.
Но, как говорится, иногда надо сломать картонный дом и построить каменный, чем латать картонных, которых все равно завалится скоро сам.
Постепенно переходить, позадачно. Пускай они даже к нескольким БД при этом будут цепляться (к DBF и SQL одновременно) - временно.
Если же БД одна, а задач много, то сначала переходи на SQL-запросы в новых программах. А потом просто конвертнешь DBF в SQL-сервер и все.


 
Anatoly Podgoretsky   (2004-01-13 12:33) [25]

Av (09.01.04 16:20) [15]
Правильно, поскольку эта затея из дурдома, кроме особыз приложений.


 
MV   (2004-01-13 13:06) [26]

Делал я авто-обновление... Мрак и гемор. Потом убирал.
Пример: шеф отвлекся, глядя на ноги секретарши, настроение улучшилось, он забыл, чем занимался, потом встрепенулся, перевел взгляд на монитор - а там - фиг. И "программера - ко мне!"

На SQL переходить НУЖНО. Я раньше МНОГО программил под FOXPRO и CLIPPER. Когда перешел на SQL, понял, "сколько дней потеряно".
Кстати, обратно зовут, платить много предлагают (сопровождать некому). Ни за что.
А миграция обычно очень проста.


 
Av   (2004-01-13 13:39) [27]

Во...вот теперь становится интереснее, а если не сложно, может быть в общих чертах посоветуете с чего начинать и чем кончать ...чтобы шишек на своем опухшем лбу поменьше набивать. И опять же "дней потерянных" не считать. Таких проблем мало. Любой совет ценен. Спасибо.


 
MV   (2004-01-13 14:03) [28]

Ну, наверное, самый простой способ: ревес - инжиниринг. Грузишь, например, в ErWin структуру всех таблиц FoxPro своей базы (здесь база - это не одна таблица, а совокупность всех таблиц приложения). Потом задаешь в качестве TargetServer - InterBase, и меняешь типы данных FoxPro на подходящие типы InterBase.
Определяешь констрейнты, индексы, ключи.
Генеришь базу. Пишешь прогу по перекачке данных. (Или DataPump из Delphi юзаешь).
Остальное все - ручками.



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

Форум: "Базы";
Текущий архив: 2004.02.06;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.51 MB
Время: 0.027 c
3-16078
BorisUK
2004-01-12 09:46
2004.02.06
порты по которым работает DCOM


1-16435
maxic
2004-01-29 01:07
2004.02.06
Circular reference


14-16617
Думкин
2004-01-15 06:14
2004.02.06
С днем рождения! 15 января.


14-16733
Toliman
2004-01-15 23:36
2004.02.06
Экспорт Классов Из С++ в Deplhi


3-16042
akhmadey
2004-01-16 04:37
2004.02.06
База Access и Delphi





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский