Конференция "Базы" » Работа двух пользователей в FireBird [D7, IB6.x]
 
  • Diplomat © (29.01.10 05:44) [0]
    Доброго времени суток господа!! Подскажите, пожалуйста, как сделать обновление данных у "второго" пользователя, если "первый" внес какие-то изменения в базу данных.

    Ежеопределенный ревреш путем отсоединения-подсоединения, или есть какой-то другой путь?
    Используется IbQuery.
    Заранее благодарен!!!
  • Кщд (29.01.10 07:36) [1]
    post_event
    но лучше в консерватории поправить
  • Sergey13 © (29.01.10 08:35) [2]
    > [0] Diplomat ©   (29.01.10 05:44)
    > Подскажите, пожалуйста, как сделать обновление данных у
    > "второго" пользователя

    Сделать кнопку "Обновить данные".

    > Используется IbQuery.

    Правильнее использовать IBDataSet
  • Дмитрий С © (29.01.10 18:44) [3]

    > Сделать кнопку "Обновить данные".
    >

    Поддерживаю.

    Если сильно надо автоматически, я бы сделал более простой запрос, который определяет, были ли какие либо изменения, и если были - то refresh-л б DataSet
  • Diplomat © (30.01.10 04:11) [4]
    простой запрос, который определяет, были ли какие либо изменения
    можно примерчик?
  • Кщд (30.01.10 18:56) [5]
    >Diplomat ©   (30.01.10 04:11) [4]
    post_event в триггере чем не устраивает?
  • Diplomat © (31.01.10 01:45) [6]
    Вообще-то да! Спасибо!
  • Ega23 © (01.02.10 13:39) [7]
    Плохо так делать.
    Сидишь, смотришь на экран, испытываешь катарсис.
    Тут ррраз - и пошло всё обновляться.

    Теперь усложним ситуацию. 10 пользователей. Сначала один что-то обновил, через 10 секунд второй что-то удалил, ещё через 10 третий что-то добавил...
    А десятый наблюдает постоянное обновление данных.

    Если уж настольео необходимо уведомлять всех пользователей об изменениях в БД - сделай индикатор, наподобие ICQ. Штоб заморгало где-нить внизу экрана. А дальше - по желанию. Надо - обновил данные, нет - сидишь со старыми.
  • Sergey13 © (01.02.10 13:52) [8]
    > [7] Ega23 ©   (01.02.10 13:39)

    Более того, раз два и более пользователя работают с одними и теми же данными, то велика вероятность того, что они работают или в сумашедшем доме или в тестовой базе, куда поленились нагенерировать достаточно данных. 8-)
    ИМХО.
  • Diplomat © (01.02.10 16:39) [9]
    Более того, раз два и более пользователя работают с одними и теми же данными, то велика вероятность того, что они работают или в сумашедшем доме или в тестовой базе, куда поленились нагенерировать достаточно данных

    База данных по людям, где вероятность того, что они например работают не только в сумасшедшем доме, а например в сельской администрации, а таких много, и все они в сети?
    Насчет уведомления пользователя, надо где-то держать список IP подключенных?
  • Ega23 © (01.02.10 16:50) [10]

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


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


    > Насчет уведомления пользователя, надо где-то держать список
    > IP подключенных?


    Как вариант - достаточно держать таблицу с одним полем и одной записью - дата-время последней модификации данных. И время от времени "пинговать" эту таблицу.
  • Sergey13 © (01.02.10 16:53) [11]
    > [9] Diplomat ©   (01.02.10 16:39)
    > а например в сельской администрации

    И в понедельник с утра вся сельская администрация в полном составе из двух человек кинулась править личные данные пастуха Сидорова?
    И стОит из-за этого огород городить? Не проще ли заблокировать запись при начале редактирования?
  • Diplomat © (01.02.10 19:18) [12]
    Простите, как заблокировать запись при начале редактирования у другого пользователя?
    Дата-время последней модификации данных опять же будет известна, если закрыть и затем опять открыть IBDatabase, не так-ли?
  • Diplomat © (01.02.10 19:30) [13]
    Маловероятно, что двое будут править личные данные пастуха Сидорова.
    Но более чем вероятно, что двое под разными ID номерами добавят например новое наименование села. Попробовал, так и есть...
  • Sergey13 © (02.02.10 08:33) [14]
    > [12] Diplomat ©   (01.02.10 19:18)
    > как заблокировать запись при начале редактирования у другого
    > пользователя?

    Не помню как в ИБ6, а ФБ есть конструкция Select For Update With Lock.

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

    Села как грибы после дождя растут? Кто угодно может их создавать?
    От этого частично может уберечь уникальный индекс по названию. В остальном только жесткими административными методами вплоть до лишения премии.
    Иначе полезут
    Новые Васюки
    НОВЫЕ ВАСЮКИ
    новые васюки
  • Diplomat © (02.02.10 16:26) [15]
    У меня идет проверка по двум составляющим в данном случае по справочнику сел. Но, Select For Update With Lock - это я если правильно понял будет срабатывать в момент транзакции, если вызвать ее у второго пользователя?
  • Sergey13 © (02.02.10 16:33) [16]
    > [15] Diplomat ©   (02.02.10 16:26)

    > У меня идет проверка по двум составляющим в данном случае
    > по справочнику сел.

    Не понял эту фразу. И что из того что идет проверка?
    Вообще дело твое - хочешь проверять/обновлять - делай. Но смысла в этом обычно немного (если он вообще есть), а телодвижений в клиенте и на серваке требует постоянно. Причем непроизводительных телодвижений.

    > Но, Select For Update With Lock - это я если правильно понял
    > будет срабатывать в момент транзакции, если вызвать ее у
    > второго пользователя?

    Просто сработает холостой апдейт без срабатывания тригеров и запись будет залочена для изменения другой сессией.
  • Diplomat © (02.02.10 18:30) [17]
    Нашел некоторые ссылки на Select For Update With Lock, буду изучать.
    Спасибо Sergey13!!!!!!!!!!!!!!!!!!!!!!!!
  • Виталий Панасенко(дом) (02.02.10 20:05) [18]
    если честно, я так до конца и не понял сути..но! если тебя интересует вариант, чтобы, как в Парадоксе, юзер начал редактировать запись и другие не могли ее редактировать одновременно(я все именно так понял), то:1)Использовать FIBPlus -там есть опция "блокировать запись". 2)Либо, используя IBX, самому заблокировать запись в контексте одной транзакции, холостым Update типа
    update table1
    set F1=F1
    where условие по ключу одной записи
    (FIBPlus как раз так и делает)
    тогда другие "вражеские морды" не смогут редактировать эту запись, пока "пап" не закончит.. или кончит..:-)
  • Diplomat © (03.02.10 17:58) [19]
    Спасибо, буквально вчера про холостой Update читал, не совсем понял, то что написано, но...
    FIBPlus - есть платная библиотека компонентов, или у нее есть столь же позитивная бесплатная версия?
  • Diplomat © (03.02.10 18:43) [20]
    Скажите пожалуйста, какую версию FIBPlus использовать? В чем ее триальность, как это может отразиться на будущих программах?
  • arigatai (06.02.10 22:11) [21]

    > Скажите пожалуйста, какую версию FIBPlus использовать? В
    > чем ее триальность, как это может отразиться на будущих
    > программах?

    если не ошибаюсь, триальная версия работает ТОЛЬКО при запущщщенной IDE Delphi :-)

    P.S. а вообще, если планируешь и в будущем создавать что-либо серьёзное (с профессиональной точки зрения) на Delphi/Builder'e под СУБД Interbase/Firebird (особенно это касается последнего) - мой тебе совет: купи эти компоненты и не взрывай себе моСК (велосипед-то уже давно изобретён!!! ;-) ) http://www.devrace.com/ru/fibplus/ (1500р. за эти компоненты для профессионального разработчика - можно сказать почти бесплатно!).
  • Виталий Панасенко(дом) (06.02.10 22:30) [22]
    только весь прикол в чем: вот ты заблокировал запись, "шоб ни какая вражья морда" тебе не мешала.. отредактировал все.. а через 0,000514545 секунды после твоего изменения Я(Царь и  Бог!) эту же самую запись ИЗМЕНИЛ! смысл? в любом случае - КТО ПОСЛЕДНИЙ, ТОТ И ПАПА! разве, что ты в этом промежутке (между 0,000514544 и 0,0005145450 начнешь снепшот тразакцию.. что мало вероятно...
 
Конференция "Базы" » Работа двух пользователей в FireBird [D7, IB6.x]
Есть новые Нет новых   [134435   +33][b:0][p:0.001]