Последняя версия DataExpress 3 beta от 9 августа 2020 года.
Изображение Скачать | Изображение Что нового?
См. также: Энциклопедия DX | Форум на develop-soft | Расширения
ИзображениеИзображениеИзображение

Периодическое обновление данных таблицы

Обсуждаются вопросы удаленного доступа к базе данных.
iboxjo
Заглянувший
Сообщения: 1
Зарегистрирован: Пт мар 17, 2017 11:08 am

Периодическое обновление данных таблицы

Сообщение iboxjo » Пт мар 17, 2017 11:19 am

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

Аватара пользователя
admin
Разработчик
Сообщения: 5045
Зарегистрирован: Пн мар 14, 2016 11:32 am
Откуда: Ленинградская
Благодарил (а): 39 раз
Поблагодарили: 308 раз

Re: Периодическое обновление данных таблицы

Сообщение admin » Пт мар 17, 2017 11:38 am

Такой возможности нет и не планируется.

Аватара пользователя
kroks
Интересующийся
Сообщения: 173
Зарегистрирован: Ср мар 01, 2017 8:23 pm

Re: Периодическое обновление данных таблицы

Сообщение kroks » Пт мар 17, 2017 12:15 pm

Встроенной возможности нет. Но через скрипт такое пожалуй можно сделать. Правда есть нюансы: представьте что у вас каждые 5,10,60 секунд автоматически обновляется 1000 или 10 000 записей. Это колоссальная нагрузка на базу. Тогда должно быть какое-то "частичное" обновление.
А вообще идея неплохая.
Отдал - возьми! Взял - отдай! Изображение

jurist23rus
Эксперт
Сообщения: 2706
Зарегистрирован: Пт сен 30, 2016 9:42 am
Откуда: Майкоп
Благодарил (а): 2 раза
Поблагодарили: 26 раз

Re: Периодическое обновление данных таблицы

Сообщение jurist23rus » Пт мар 17, 2017 7:31 pm

Правда есть нюансы: представьте что у вас каждые 5,10,60 секунд автоматически обновляется 1000 или 10 000 записей. Это колоссальная нагрузка на базу.

Ну а когда пользуешься штатной кнопкой обновить - это разве не та же самая нагрузка? Только одна нагрузка по нажатию кнопки, другая периодическая через заданные промежутки времени. А так тоже самое. Чем клацать постоянно кнопку может действительно лучше это немного автоматизировать в скрипте. Если уж такая автоматизация необходима в производственном процессе.
Destiny is a very convenient word for those who never take decisions.

Аватара пользователя
kroks
Интересующийся
Сообщения: 173
Зарегистрирован: Ср мар 01, 2017 8:23 pm

Re: Периодическое обновление данных таблицы

Сообщение kroks » Пт мар 17, 2017 8:04 pm

jurist23rus писал(а):Ну а когда пользуешься штатной кнопкой обновить - это разве не та же самая нагрузка?

Вручную: это управляемая нагрузка. А если автоматика будет обновлять, то считаем: 10 клиентов * 6 нажатий/в минуту(каждые 10 сек.) = 60 обновлений в минуту. Тем паче в DataExpress запросы расставлены так, что они не смогут работать экономно а будут тянуть все содержимое формы. База (не та, что на вашем настольном компьютере в виде файлика лежит) только и будет занята обработкой бессмысленных запросов этой DDOS-атаки. А ей работать надо.
jurist23rus писал(а):автоматизировать в скрипте.

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

З.Ы. Поиграйтесь, если уже такое большое желание есть.

Код: Выделить всё

procedure AR(S: TObject);
begin
if (Self.State <> dsEdit) and
   (Self.State <> dsInsert)  then
  Self.Refresh;
end;

procedure Form_Create;
var T: TTimer;
begin
T := TTimer.Create(Self);
T.Enabled:=true;
T.Interval := 5000;
T.Ontimer := @AR;
end;
Отдал - возьми! Взял - отдай! Изображение

AndreyM
Новичок
Сообщения: 38
Зарегистрирован: Ср ноя 06, 2019 12:44 am
Благодарил (а): 2 раза
Поблагодарили: 1 раз

Периодическое обновление данных таблицы

Сообщение AndreyM » Вс ноя 17, 2019 1:09 am

Добрый день!
Ваш скрипт оказался очень кстати :) Спасибо.
Но появилась другая проблема - после каждого автообновления меняется положение текущей выбранной строки в таблице. Можете подсказать как перед обновлением запомнить номер текущей строки, а после обновления экрана вернуться на ту строку таблице где находился курсор до обновления.
Спасибо.
Андрей

---
kroks писал(а):
jurist23rus писал(а):Ну а когда пользуешься штатной кнопкой обновить - это разве не та же самая нагрузка?

Вручную: это управляемая нагрузка. А если автоматика будет обновлять, то считаем: 10 клиентов * 6 нажатий/в минуту(каждые 10 сек.) = 60 обновлений в минуту. Тем паче в DataExpress запросы расставлены так, что они не смогут работать экономно а будут тянуть все содержимое формы. База (не та, что на вашем настольном компьютере в виде файлика лежит) только и будет занята обработкой бессмысленных запросов этой DDOS-атаки. А ей работать надо.
jurist23rus писал(а):автоматизировать в скрипте.

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

З.Ы. Поиграйтесь, если уже такое большое желание есть.

Код: Выделить всё

procedure AR(S: TObject);
begin
if (Self.State <> dsEdit) and
   (Self.State <> dsInsert)  then
  Self.Refresh;
end;

procedure Form_Create;
var T: TTimer;
begin
T := TTimer.Create(Self);
T.Enabled:=true;
T.Interval := 5000;
T.Ontimer := @AR;
end;

jurist23rus
Эксперт
Сообщения: 2706
Зарегистрирован: Пт сен 30, 2016 9:42 am
Откуда: Майкоп
Благодарил (а): 2 раза
Поблагодарили: 26 раз

Периодическое обновление данных таблицы

Сообщение jurist23rus » Вс ноя 17, 2019 9:11 am

Код: Выделить всё

procedure AR(S: TObject);
Var
  Id: integer;
begin
if (Self.State <> dsEdit) and
   (Self.State <> dsInsert)  then
   Begin
     //сохраняем идентификатор в переменной
      Id := Self.Recid;
      Self.Refresh;
      //переходим к записи с ранее сохранённым id
    Self.MoveTo(Id) //не помню точно какой метод за      это отвечает пишу с телефона. Перепроверьте.
   End;   
end;

procedure Form_Create;
var T: TTimer;
begin
T := TTimer.Create(Self);
T.Enabled:=true;
T.Interval := 5000;
T.Ontimer := @AR;
end;
Destiny is a very convenient word for those who never take decisions.

Аватара пользователя
Develop-Soft
Сообщения: 1639
Зарегистрирован: Вт мар 05, 2019 6:09 pm
Благодарил (а): 122 раза
Поблагодарили: 444 раза
Контактная информация:

Периодическое обновление данных таблицы

Сообщение Develop-Soft » Вс ноя 17, 2019 10:32 am

1. Метод называется GotoRecord.
2. GotoRecord привет к фиаско если текущая запись была Delete
3. Обновлять таблицу по таймеру - вредный совет.

AndreyM
Новичок
Сообщения: 38
Зарегистрирован: Ср ноя 06, 2019 12:44 am
Благодарил (а): 2 раза
Поблагодарили: 1 раз

Периодическое обновление данных таблицы

Сообщение AndreyM » Вс ноя 17, 2019 11:48 am

Вчера уже пробовал так делать как посоветовал jurist23rus, но только с методом GotoRecord.
Но после того как запускаю для проверки приложение второго пользователя программа вылетает даже не закончив авторизацию пользователя. Если отключаю строчку с методом GotoRecord - все работает... Но текущее положение в таблице не сохраняется.
Как исправить ситуацию не понимаю.

AndreyM
Новичок
Сообщения: 38
Зарегистрирован: Ср ноя 06, 2019 12:44 am
Благодарил (а): 2 раза
Поблагодарили: 1 раз

Периодическое обновление данных таблицы

Сообщение AndreyM » Вс ноя 17, 2019 11:54 am

Добрый день!

1. Так то что совет с таймером вреден это понятно, а как по другому можно видеть изменения не используя кнопку "Обновить"?

2. И второй вопрос - думаю, что переход с текущей строки в таблице на первую после нажатия кнопки "Обновить" является ошибкой. Т.к. представьте, например в таблице 1000 записей, пользователь работает с 520 записью и решает воспользоваться кнопкой "Обновить".... и попадает после обновления на первую запись.

--
Develop-Soft писал(а):1. Метод называется GotoRecord.
2. GotoRecord привет к фиаско если текущая запись была Delete
3. Обновлять таблицу по таймеру - вредный совет.