Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Несинхронность OnSetText


DelphiLexx ©   (2007-08-03 18:01:00) 

У меня есть два DBGridEh'a (DBGridEh1, DBGridEh2) во 2-ом гриде есть колонка, в котором выставляются checkbox'ы, при выставлении checkbox'a происходит добавление записи, при снятии удалении записи из 1-ого грида, при выставление checkbox'a во 2-ом гриде срабатывает OnSetText. Так вот если очень быстро кликать по checkbox'ам, то может получиться, что мы сняли checkbox, а запись из первого грида не удалилась. Как заблокировать на время работы OnSetText DBGridEh2.MouseUp, чтобы не было повторных вхождений. В OnSetText'e разместил код:

 PROC_ST := Sender.OnSetText;
 Sender.OnSetText := nil;
 DBGridEh2.DataSource.DataSet.DisableControls;
 try
    ///здесь делаем добавление записи в DBGridEh1
 finally
   DBGridEh2.DataSource.OnDataChange := PROC_DC;
   DBGridEh2.DataSource.DataSet.EnableControls;    
   Sender.OnSetText := PROC_ST;
 end;


DelphiLexx   (2007-08-06 09:50:00) [1]


> Как идея

Не помагает делал даже так:

...
     OldRecCount := MainDS.RecordCount;
     if Text = '1' then
       NewRecCount := OldRecCount + 1
     else
       NewRecCount := OldRecCount - 1;
     PerformSelection(Text <> '1');
     while (MainDS.RecordCount <> NewRecCount)  do  sleep(100);
      Sender.AsString := Text;
...


DelphiLexx   (2007-08-06 09:48:00) [2]

Удалено модератором
Примечание: Обсуждение модерирования


DelphiLexx   (2007-08-04 12:05:00) [3]

Где я возьму CheckBox1Click, у меня DBGrid'Eha. Надо как-то синхронизировать эти два DBGridEh'a с их DataSet'ами.


Lacmus   (2007-08-04 09:29:00) [4]

>DelphiLexx ©   (03.08.07 18:01)  

Как идея


{$J+}

procedure TForm7.CheckBox1Click(Sender: TObject);
const
 bLock: Boolean = False;
begin
 if not bLock then begin
   bLock := True;
   try
     Label1.Caption := Label1.Caption + '1';
     Sleep(3000);
     Application.ProcessMessages
   finally
     bLock := False
   end
 end
end;


Виталий Панасенко(дом)   (2007-08-03 21:37:00) [5]

Стреляться!...Датасетам...


DelphiLexx   (2007-08-03 20:33:00) [6]


> не путай процедурный и событийный подход
> и вообще какая-то извращенная логика - закольцованность
> датасетов

Ну и какие варианты предлагаешь?


Вася Правильный   (2007-08-03 20:22:00) [7]

не путай процедурный и событийный подход
и вообще какая-то извращенная логика - закольцованность датасетов


Наверх

Титульная страница Поиск, карта сайта Написать письмо