Topic: Динамическое обновление Table Grid

Здравствуйте.
Сделали небольшое приложение по формированию заказов для нескольких офисов. Заказы формируются.Все отлично. Но интересно сделать динамическое обновление в Table Grid ,ну скажем раз в 3-5 минут. Искали по форуму,но не нашли. Хотелось-бы еще сделать либо звуковое уведомление,либо всплывающее уведомление о новом заказе.
Спасибо

2 (edited by sibprogsistem 2020-12-08 13:04:59)

Re: Динамическое обновление Table Grid

muserun wrote:

Здравствуйте.
Сделали небольшое приложение по формированию заказов для нескольких офисов. Заказы формируются.Все отлично. Но интересно сделать динамическое обновление в Table Grid ,ну скажем раз в 3-5 минут. Искали по форуму,но не нашли. Хотелось-бы еще сделать либо звуковое уведомление,либо всплывающее уведомление о новом заказе.
Спасибо

var
time:TTimer;

procedure Form1_OnShow (Sender: TObject; Action: string);
begin
    time:=TTimer.Create(Form1);
    time.Interval:=20000;  
    time.Enabled:=True;
    time.OnTimer:=@updateGrid;
end;

procedure updateGrid ;
begin
 
// здесь Ваш код
end;

3 (edited by muserun 2020-12-08 12:51:59)

Re: Динамическое обновление Table Grid

// здесь Ваш код
Так понимаем - это как раз то что будет создавать звуковой зум? Т.Е. здесь код писать?

Re: Динамическое обновление Table Grid

muserun wrote:

// здесь Ваш код
Так понимаем - это как раз то что будет создавать звуковой зум? Т.Е. здесь код писать?

в этой процедуре нужно написать код, который будет выполнятся при обращении таймера...
настройте время обращения к процедуре

time.Interval:=20000;  

Re: Динамическое обновление Table Grid

Спасибо

Re: Динамическое обновление Table Grid

procedure frmAdministrator_OnShow (Sender: TObject; Action: string);
var
 time:TTimer;
begin
  begin
    time:=TTimer.Create(frmAdministrator);
    time.Interval:=20000;
    time.Enabled:=True;
    time.OnTimer:=@updateGrid;
  end;

end;
procedure updateGrid ;
  begin
    frmAdministrator.tblGeneralWork.Refresh;
  end;

Нет обновления в гриде

Re: Динамическое обновление Table Grid

procedure updateGrid ;
  begin
    frmAdministrator.tblGeneralWork.dbUpdate;
  end;

Так работает))))))

8 (edited by muserun 2020-12-11 10:55:10)

Re: Динамическое обновление Table Grid

А вот как сделать звуковое уведомление при получении новой записи? Или визуальное уведомление...

Re: Динамическое обновление Table Grid

muserun wrote:

А вот как сделать звуковое уведомление при получении новой записи? Или визуальное уведомление...

MediaPlayer.PlayFile('file.mp3');

Re: Динамическое обновление Table Grid

Hello muserun, Hello sibprogsistem

If you want play on a beep instead of a sound file :

procedure Form1_Button2_OnClick (Sender: string; var Cancel: boolean);
begin
  Beep(2000,500); //  First parameter is the pitch, secon is duration
end;

You can also play two sounds in a row

begin
  Beep(2000,300);
  Beep(1000,300);
end;

JB

Re: Динамическое обновление Table Grid

Hello muserun

If you save your data with a button SAVE, you can execute the Beep (or the mp3 file) behind an After Click event of this Save button

JB

Re: Динамическое обновление Table Grid

Так делали ,но программа многопользовательская и важно вывести звуковое уведомление для других пользователей. Скорее всего через procedure frmAdministrator_tblGeneralWork_OnChange (Sender: TObject);

Re: Динамическое обновление Table Grid

muserun wrote:

Все это прекрасно,но как сделать это ТОЛЬКО при возникновении события НОВАЯ ЗАПИСЬ В БАЗЕ ДАННЫХ Table Grid

для начала нужно написать проверку новой записи
как у Вас определяется новая запись?

14 (edited by muserun 2020-12-12 07:29:55)

Re: Динамическое обновление Table Grid

Пока никак.

procedure frmAdministrator_tblGeneralWork_OnChange (Sender: TObject);
begin

end;

procedure frmAdministrator_OnShow (Sender: TObject; Action: string);
var
 time:TTimer;
begin
  begin
    time:=TTimer.Create(frmAdministrator);
    time.Interval:=20000;
    time.Enabled:=True;
    time.OnTimer:=@updateGrid;
  end;

end;
procedure updateGrid ; 
  begin
    frmAdministrator.tblGeneralWork.dbUpdate;
  end;


procedure frmAutch_OnShow (Sender: TObject; Action: string);
  var
  sUSN: string = '1';

begin
  begin
    {$MySQL disable_connectdialog}
     Application.ProcessMessages;


     frmAutch.MySQLConnection.Server := 'IP';
     frmAutch.MySQLConnection.Port := 3306;
     frmAutch.MySQLConnection.Username := 'user_user';
     frmAutch.MySQLConnection.Password := 'Password';
     frmAutch.MySQLConnection.Database := 'db_user';

     try
         frmAutch.MySQLConnection.Connect;
       except
             //frmWait.Close;
             ShowMessage('Не могу подключиться к базе данных. Проверьте пожалйста интернет соединение!!!');
             frmAutch.Close;
     end;

     if frmAutch.MySQLConnection.Connected then
         begin
             UpdateDatabase(''); // to fill ComboBoxes
             //frmAutch.TableGrid1.dbUpdate; // if you have TableGrid on first form with option "Enable auto execution", you should call method dbUpdate manually
         end;
         //frmWait.Close;

end;
                                                       
    frmAutch.mniAbout.OnClick := @MenuClickAbout;


// ---------------------------- Первичные записи в базу данных  ------------------------------------


   // проверка наличия прав пользователей
  // если нет, то создать права пользователей
     //if SQLExecute('SELECT count(id) FROM userStatus;') = '0' then
     //begin
      //   SQLExecute('INSERT INTO userStatus (userStatusName) VALUES ("Директор");');
       //  SQLExecute('INSERT INTO userStatus (userStatusName) VALUES ("Офис1");');
      //   SQLExecute('INSERT INTO userStatus (userStatusName) VALUES ("Офис2");');
       //  SQLExecute('INSERT INTO userStatus (userStatusName) VALUES ("Офис3");');
     //end;
     //UpdateDatabase('userStatus');

  // проверка наличия администратора базы данных
  // если нет, то создать первичного пользователя логин demo пароль demo
    //if SQLExecute('SELECT count(id) FROM users;') = '0' then
    //begin
      //  SQLExecute('INSERT INTO users (id_userStatus, login, password) VALUES ("'+sUSN+'", "demo", "demo");');
     //end;
     //UpdateDatabase('users');


end;


procedure frmAutch_btnAutch_OnClick (Sender: TObject; var Cancel: boolean);
 var
  s,t,r: string;
  sStatus: string;
begin

    // Запрос SQL для проверки пользователя и пароля
     s := VarToStr(SQLExecute('SELECT count(id) FROM users WHERE (id = ' + IntToStr(frmAutch.cmbLogin.dbItemID) + ') AND (password = ''' + frmAutch.edPassword.Text + ''');'));
          // если SQL-запрос нашел логин и пароль
        if (s<>'0') AND (s<>'') then
          begin                                                          
             //скрыть форму авторизации
             frmAutch.Hide;
             // SQL-запрос прав пользователя
             sStatus := SQLExecute('SELECT id_userStatus FROM users WHERE id='+IntToStr(frmAutch.cmbLogin.dbItemID));
             // если права пользователя * то открыть *
             if sStatus = '1' then frmAdministrator.Show else  //администратор
             if sStatus = '2' then frmOffice1.Show else
             if sStatus = '3' then frmOffice2.Show else
             if sStatus = '4' then frmOffice3.Show ;
     end else MessageBox('Пароль неверен','Ошибка подключения ', MB_OK+MB_ICONSTOP);
end;


procedure MenuClickAbout (Sender: string); // click in About menu item
begin
     frmAbout.ShowModal;
end;

begin
     frmAutch.mniFile.Visible := True;
     frmAutch.mniOptions.Visible := False;
     frmAutch.mniSettings.Visible := False;
     frmAutch.mniReport.Visible := False;
     frmAutch.mniAbout.Visible := True;
end.

procedure frmAbout_lblSite_OnClick (Sender: TObject);
begin
   OpenUrl('https://');
end;

begin

end.

Re: Динамическое обновление Table Grid

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

Re: Динамическое обновление Table Grid

Вы правы. Можно я подробнее. Есть форма где выводятся заказы на обработку текстов. Задача формы формировать новые заказы для показа исполнителю. Тут Вы мне удачно подсказали.Я могу к примеру поставить Да-Нет в базу и при формировании новой записи этот чекбокс будет свободен. и тогда выше то о чем писали.Чекбокс свободен,новая запись-ЗВУКНо к примеру если исполнитель берет заказ,то ставит просто галку и тогда... Тут опять тогда нужно перенсти эту запись в новый TableGrid. Я так понимаю?

17 (edited by sibprogsistem 2020-12-12 07:51:22)

Re: Динамическое обновление Table Grid

muserun wrote:

Вы правы. Можно я подробнее. Есть форма где выводятся заказы на обработку текстов. Задача формы формировать новые заказы для показа исполнителю. Тут Вы мне удачно подсказали.Я могу к примеру поставить Да-Нет в базу и при формировании новой записи этот чекбокс будет свободен. и тогда выше то о чем писали.Чекбокс свободен,новая запись-ЗВУКНо к примеру если исполнитель берет заказ,то ставит просто галку и тогда... Тут опять тогда нужно перенсти эту запись в новый TableGrid. Я так понимаю?

запись нужно просто обновить можно сделать это с помощью скрипта

SQLExecute('UPDATE таблица SET поле="1" WHERE id='+переменная с номером id);

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

Re: Динамическое обновление Table Grid

Если честно не понятно

Re: Динамическое обновление Table Grid

muserun wrote:

Если честно не понятно

я так понимаю Вы хотите сделать два грида

Re: Динамическое обновление Table Grid

Я просто с Ваших слов уже понял. И Вы подсказали правильную логику. Т.Е. если исполнитель забирает себе задачу, то она должна уже открываться в другом гриде В РАБОТЕ.

Re: Динамическое обновление Table Grid

Может у кого есть пример?

Re: Динамическое обновление Table Grid

muserun wrote:

Может у кого есть пример?

вот пример (свободные и принятые заявки) с двумя таблицами используется скрип

Post's attachments

Attachment icon template.rar 4.94 kb, 250 downloads since 2020-12-13 

Re: Динамическое обновление Table Grid

Спасибо

24 (edited by k245 2020-12-21 05:41:33)

Re: Динамическое обновление Table Grid

muserun wrote:

Пока никак.

Добавьте поле "Дата/время создания записи". Храните в программе дату/время последней проверки, которую вы делаете по таймеру. А в самой проверке запросом определяйте количество новых записей - это те записи, у которых дата создания больше, чем дата последней проверки.


Если новые записи есть, то вы обновляете основную таблицу данных и выдаёте звуковой сигнал. При желании с помощью скрипта новые записи можно выделить цветом.

Визуальное программирование: блог и телеграм-канал.

Re: Динамическое обновление Table Grid

Доброго времени суток.
Подскажите по поводу обновления таблицы.

var
time:TTimer;

procedure Form1_OnShow (Sender: TObject; Action: string);
begin
    time:=TTimer.Create(Form1);
    time.Interval:=200;
    time.Enabled:=True;
    time.OnTimer:=@updateGrid;
end;
procedure updateGrid ;
begin
Form1.TableGrid1.dbUpdate;
end;

Не работает скрипт
Что не так?