Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.06.2013, 16:36   #1
cezer
Пользователь
 
Регистрация: 01.06.2012
Сообщений: 22
По умолчанию DBGRID проверка на обновление данных

Здравствуйте. Есть DBGRID DATASOURCE ADOQUERY всё связанно между собой. Данные берутся из db файла
Таблица выгляит след. образом:

|Name|Date |Time |X|Y|
|--1--|03.06.13|15:00|5|10|

Числа в столбцах X и Y постоянно меняются строки динамически добавляются ну т.е. точного числа строк нет.

Как сделать проверку:

если числа в столбце X и Y в какой либо из строк поменялись то:
Проверка на промежуток времени (если данные не обновлялись в столбце X и Y уже минуты 2-3) то
Действие.

Но такой нюанс. Цифры могут обновлятся раз в минуту или раз в час...
cezer вне форума Ответить с цитированием
Старый 03.06.2013, 17:24   #2
Yurk@
Участник клуба
 
Аватар для Yurk@
 
Регистрация: 19.12.2007
Сообщений: 1,100
По умолчанию

Timer с интервалом 1-3 сек. - он будет проверять наличие изменений X и Y:
если изменения обнаружены - сравниваем с датой\временем прошлого изменения - если разница больше 3х минут - Действие
На форуме: Помогаю за спасибо
ICQ\Skype: Это моё личное время ...
Yurk@ вне форума Ответить с цитированием
Старый 03.06.2013, 17:54   #3
cezer
Пользователь
 
Регистрация: 01.06.2012
Сообщений: 22
По умолчанию

Цитата:
Сообщение от Yurk@ Посмотреть сообщение
...
со схемой событий это понятно а кодом можно м? Если не трудно.
cezer вне форума Ответить с цитированием
Старый 03.06.2013, 20:27   #4
Yurk@
Участник клуба
 
Аватар для Yurk@
 
Регистрация: 19.12.2007
Сообщений: 1,100
По умолчанию

по идее как-то так
Код:
private 
  old_x, old_y : integer;
  old_datetime, new_DateTime, d_DateTime : TDateTime;
  d_DateTime := StrToDateTime('30.12.1899 00:03:00'); // шаблонный интервал 
...
  Query.Close;
  Query.SQL.Text := 'SELECT FIRST 1 date, time, x, y FROM tabl ORDER BY date DESC, time DESC';
  Query.Open;
  if (Query.FieldByName('x').AsInteger > old_x) OR (Query.FieldByName('y').AsInteger > old_y) then
  begin
    old_x := Query.FieldByName('x').AsInteger;
    old_y := Query.FieldByName('y').AsInteger;
    new_DateTime := StrToDateTime(Query.FieldByName('date').asString + ' ' + Query.FieldByName('time').asString;
    if FloatToDateTime(new_DateTime - old_DateTime) >= d_DateTime then
    begin
      ShowMessage('действие');
    end;
    old_DateTime := new_DateTime;
  end;
На форуме: Помогаю за спасибо
ICQ\Skype: Это моё личное время ...
Yurk@ вне форума Ответить с цитированием
Старый 04.06.2013, 12:46   #5
cezer
Пользователь
 
Регистрация: 01.06.2012
Сообщений: 22
По умолчанию

Цитата:
Сообщение от Yurk@ Посмотреть сообщение
Юрка чет у меня не получается(((
и я не много не понял ход вот этих строк:

Код:
new_DateTime := StrToDateTime(Query.FieldByName('date').asString + ' ' + Query.FieldByName('time').asString;
    if FloatToDateTime(new_DateTime - old_DateTime) >= d_DateTime then
Зачем тут проверка на время и дату?? По сути мне нужно проверять столбец X и Y если в столбе X или Y поменялись данные то закрасить строку в зелень если не меняются долгое время то красным...

вот кусочек из подключения:

Код:

AdoQuery1.Active:=false;
adoquery1.SQL.Text:='select F1,F2,F4,Sum(F7) as F7, Sum(F8) as F8 from ['+d+'-base#db'+'] group by F1,F2,F4';
adoquery1.ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+p+';Mode=Read;Extended Properties="Text;HDR=No";Persist Security Info=False'; 
AdoQuery1.Active:=true;

//=======Тут как я понял нужна проверка
cezer вне форума Ответить с цитированием
Старый 04.06.2013, 13:44   #6
Yurk@
Участник клуба
 
Аватар для Yurk@
 
Регистрация: 19.12.2007
Сообщений: 1,100
По умолчанию

Цитата:
Зачем тут проверка на время и дату??
а как же
Цитата:
Проверка на промежуток времени (если данные не обновлялись в столбце X и Y уже минуты 2-3) то
?
Цитата:
вот кусочек из подключения:
вот тут уже я не понял ... к чему был этот код О_о
На форуме: Помогаю за спасибо
ICQ\Skype: Это моё личное время ...
Yurk@ вне форума Ответить с цитированием
Старый 04.06.2013, 19:39   #7
cezer
Пользователь
 
Регистрация: 01.06.2012
Сообщений: 22
По умолчанию

Цитата:
Сообщение от Yurk@ Посмотреть сообщение
...
Ну Юрка юморист))) код который привел, я как бы спрашиваю подтекстом) туда ли я встраиваю код на проверку))) а на счет "Проверка на промежуток времени" я имел ввиду не колонки времени и даты а промежуток времени на обновления в столбцах X и Y ))) я предполагаю что нужно будет колонку X и Y сканировать в цикле строки на изменение данных? Если можно как то подругому без цикла или есть какие либо идеи направь меня в правильное русло)
P.S. С уважением и благодарность Я)
cezer вне форума Ответить с цитированием
Старый 05.06.2013, 09:23   #8
cezer
Пользователь
 
Регистрация: 01.06.2012
Сообщений: 22
По умолчанию

Цитата:
Сообщение от Yurk@ Посмотреть сообщение
...
Ничего не выходит... пытаюсь сканировать строки он мне ошибки выдаёт, а если получается то не выводит showmessage... Что то я вообще запутался... Есть свежие идеи Yurk@ ?
P.S. Спасибо за ранее за ответ.
cezer вне форума Ответить с цитированием
Старый 05.06.2013, 10:24   #9
Yurk@
Участник клуба
 
Аватар для Yurk@
 
Регистрация: 19.12.2007
Сообщений: 1,100
По умолчанию

а ты показывай код (можно даже проэкт) и будем глядеть
На форуме: Помогаю за спасибо
ICQ\Skype: Это моё личное время ...
Yurk@ вне форума Ответить с цитированием
Старый 05.06.2013, 22:11   #10
cezer
Пользователь
 
Регистрация: 01.06.2012
Сообщений: 22
По умолчанию

Цитата:
Сообщение от Yurk@ Посмотреть сообщение
...
вообщем что удалось добиться так это вот что:

Код:
var
  Form1: TForm1;
  F8_new, F7_new: integer;

implementation

{$R *.dfm}

procedure TForm1.sButton1Click(Sender: TObject);
begin

AdoQuery1.Active:=false;
adoquery1.SQL.Text:='select F1,F2,F4,F7,F8 [01#db] group by F1,F2,F4,F7,F8';
adoquery1.ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\data\;Mode=Read;Extended Properties="Text;HDR=No";Persist Security Info=False';
AdoQuery1.Active:=true;
f8_new:=Adoquery1.FieldByName('F8').Asinteger;
f7_new:=Adoquery1.FieldByName('F7').Asinteger;
end;

procedure TForm1.DataSource1DataChange(Sender: TObject; Field: TField);
begin

Memo1.Lines.Add('After editing record' + inttostr(datasource1.DataSet.RecNo));
end;

procedure TForm1.ADOQuery1AfterScroll(DataSet: TDataSet);
begin
  if ((DataSet.FieldByName('F8').Asinteger>F8_new) OR ((DataSet.FieldByName('F7').Asinteger > F7_new)))
then
showmessage('где то тут где курсор поменялись данные');
end;
Но он проверяет только если курсор стоит на той строке где меняются данные... если данные поменялись в строке там где нет курсора то он не показывает сообщение((( что делать не знаю (
cezer вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обновление данных DBGrid DS75 БД в Delphi 24 02.11.2011 22:38
DBGrid и обновление данных в БД a_n_n_a БД в Delphi 1 02.08.2011 18:02
DBGrid запись и обновление a_n_n_a БД в Delphi 0 09.04.2011 06:03
Обновление данных в DBGrid и фокус строки. Serval БД в Delphi 10 05.06.2009 11:50
Обновление DBGrid + ADOQuery Demonk БД в Delphi 11 04.02.2009 13:42