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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.04.2009, 16:13   #1
ArtInt
Форумчанин
 
Аватар для ArtInt
 
Регистрация: 06.03.2009
Сообщений: 583
По умолчанию Условие Locate при активации формы

В целома задача такая: При активации формы 2 в ней прописан вызов процедуры ProvSovpad для внесения в поле Check 0 или 1 (по этому полю происходит изменение цвета строки в DBGrid).
Процедура ProvSovpad рабочая если разместить на нажатие кнопки. Но в при активации формы (в ней не выполняется метод Locate).
Код примерно такой:
Код:
procedure TFinfoDobav.ProvSovpad;
var
  i: Integer;
begin
  if not cyDBGrid1.CheckBoxes.Visible then
    cyDBGrid1.CheckBoxes.Visible := true;
 }
{выделяем другим цветом и изменяем check на 1 файлы уже содержащиеся в базе по пути и названию файла}
  Screen.Cursor:=crHourGlass;
  Form1.AdoQuery1.First;
  Form1.ADOTablevrem.First;

  for I := 0 to Form1.ADOTablevrem.RecordCount-1 do    // Iterate
  begin


 if Form1.ADOQuery1.Locate('KodPath, Realname',VarArrayOf([Form1.ADOTablevrem.FieldByName('KodPath').AsString, Form1.ADOTablevrem.FieldByName('realnamevrem').AsString]),[loCaseInsensitive, loPartialKey])=false  then
     begin
      Form1.ADOTablevrem.Edit;
      Form1.ADOTablevrem.FieldByName('check').AsInteger:=1;
      Form1.ADOTablevrem.Post;
     end;


     Form1.ADOTablevrem.Next;

  end;    // for
  Form1.ADOTablevrem.First;
  Screen.Cursor:=crDefault;


end;
для закрашивания строки
Код:
procedure TFInfoDobav.cyDBGrid1DrawDataCell(Sender: TObject;
  const Rect: TRect; Field: TField; State: TGridDrawState);
var
   P, P1: array [0..1023] of Char; { MemoField buffer }
   BS, BS1:TADOBlobStream;
   S, S1: string;
   holdColor: TColor;
begin
  holdColor := cyDBGrid1.Canvas.Brush.Color; {сохраняем оригинальный цвет}
  {"раскрашиваем" ячейки только для поля check}
    if Form1.ADOtablevrem.FieldByName('check').asinteger=1 then
    begin
//      cyDBGrid1.Canvas.Brush.Color := clGreen;
      cyDBGrid1.Canvas.Brush.Color := $fa9c78; {синеватый оттенок}
      cydbGrid1.DefaultDrawDataCell(Rect,Field,State);
      cyDBGrid1.Canvas.Brush.Color := holdColor;
    end;
код активации формы
Код:
procedure TFInfoDobav.FormActivate(Sender: TObject);
var
  i: Integer;
begin

  cyDbGrid1.Visible:=false;
  suiPanel1.Visible:=false;

{работа потока}
{другие вычисления}  
  FinfoDobav.suiPanel1.Visible:=true;
  FinfoDobav.cyDBGrid1.Visible:=true;
  ProvSovpad;
end;
Вопрос: Как при активации сделать чтобы происходили операции с таблицей?
Не стыдно чего-то не знать, стыдно не стремиться к знаниям.
ArtInt вне форума Ответить с цитированием
Старый 17.04.2009, 16:22   #2
koma_grusha
Редкий обитатель
Форумчанин
 
Аватар для koma_grusha
 
Регистрация: 08.04.2009
Сообщений: 170
По умолчанию

а ты проверял, попадаешь ли ты в FormActivate, и когда попадаешь? может где то встречается выход из процедуры до ProvSovpad?
Мозг, хорошо устроенный, стоит больше, чем мозг, хорошо наполненный (Мишель Монтень)
koma_grusha вне форума Ответить с цитированием
Старый 17.04.2009, 16:37   #3
ArtInt
Форумчанин
 
Аватар для ArtInt
 
Регистрация: 06.03.2009
Сообщений: 583
По умолчанию

В конце процедуры прописывал showmessage(''). Оно выводилось. И используется она один раз, только при активации формы.
Не стыдно чего-то не знать, стыдно не стремиться к знаниям.
ArtInt вне форума Ответить с цитированием
Старый 17.04.2009, 16:57   #4
koma_grusha
Редкий обитатель
Форумчанин
 
Аватар для koma_grusha
 
Регистрация: 08.04.2009
Сообщений: 170
По умолчанию

может заполнение запросов происходит после активации, соответсвенно при активации он гуляет по пустоте?
Мозг, хорошо устроенный, стоит больше, чем мозг, хорошо наполненный (Мишель Монтень)
koma_grusha вне форума Ответить с цитированием
Старый 17.04.2009, 17:01   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
if Form1.ADOtablevrem.FieldByName('che ck').asinteger=1 then
Замени это на
Код:
if (Field.DisplayName='check')and(Field.asinteger=1) then
и не парься с поиском.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 17.04.2009, 17:11   #6
ArtInt
Форумчанин
 
Аватар для ArtInt
 
Регистрация: 06.03.2009
Сообщений: 583
По умолчанию

Спасибо Stilet за подсказку, но это относится к сетке, а проблема возникает именно в процедуре ProvSovpad, потому что по условию должно проходить занесение 1 в поле check, а этого не происходит.
И как уже было сказано, все работает, но только не при активации формы.
Не стыдно чего-то не знать, стыдно не стремиться к знаниям.
ArtInt вне форума Ответить с цитированием
Старый 18.04.2009, 23:14   #7
ArtInt
Форумчанин
 
Аватар для ArtInt
 
Регистрация: 06.03.2009
Сообщений: 583
По умолчанию

Нашел как исправить данную ошибку.
Код:
procedure TFInfoDobav.FormActivate(Sender: TObject);
var
  i: Integer;
begin

  cyDbGrid1.Visible:=false;
  suiPanel1.Visible:=false;

{работа потока}
Application.ProcessMessages;
{другие вычисления}  
  FinfoDobav.suiPanel1.Visible:=true;
  FinfoDobav.cyDBGrid1.Visible:=true;
  ProvSovpad;
end;
необходимо было поставить Application.ProcessMessages;возможн о потому что поток использовал таблицы и не успел закончить до конца работу с ними.
Тему можно считать закрытой.
Не стыдно чего-то не знать, стыдно не стремиться к знаниям.
ArtInt вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Максимизация формы при открытии SerArtur Microsoft Office Access 1 13.11.2008 15:00
Выдвижение формы при наведении Stanislav Общие вопросы Delphi 11 24.08.2008 00:24
При создании формы! Anton Помощь студентам 4 08.08.2007 08:20