Delphi 7 - baza danych, sprawdzenie danych

0

Witam. Mam problem z bazą danych paradox. Używam następujące komponenty: TStatusBar, TTable, TDataSource i TSMDBGrid (odpowiednik TDBGrid firmy Scalabium Software).
Program łączy się z lokalną bazą przez BDE, wprowadzanie elementów bezpośrednio z DBGrida.
Chciałbym aby przy niskich wartościach w określonych kolumnach pojawiał się odpowiedni tekst w StatusBar (np. Uwaga niski stan!). Kolorowanie komórek o niskim stanie osiągnąłem poprzez wykorzystanie zdarzenia OnGetCellParams. Nie mam jednak pomysłu jak sprawdzić stany komórek z określonej kolumny i pod jakie zdarzenie to podpiąć aby automatycznie aktualizowało mi tekst w StatusBarze po zmnianie wartości komórki w DBGrid. Próbowałem wykorzystać do tego zdarzenie OnGetCellParams ale z miernym rezultatem. Pewnie dlatego że zdarzenie to jest wywoływane dla każdej komórki osobno w DBGrid.
Może ktoś miał podobny problem i wie jak to zrobić?

Moja procedura OnGetCellParams:

 
procedure TForm1.SMDBGrid1GetCellParams(Sender: TObject; Field: TField;
  AFont: TFont; var Background: TColor; Highlight: Boolean);
begin
 if Assigned(Field) and (UpperCase(Field.FieldName) = 'STAN SKLEP') then
  begin
   if Field.AsInteger < 4 then
    begin
      AFont.Style := [fsBold];
      Background := clRed;
      nsklep:=true;
    end
    else
    begin
      AFont.Style := [];
      If Highlight then
       begin
        AFont.Color:=clWhite;
        Background := clBlue;
       end
       else
       begin
        AFont.Color:=clBlack;
        Background := clWhite;
       end;
    end;
  end;
  if Assigned(Field) and (UpperCase(Field.FieldName) = 'STAN MAGAZYN') then
   begin
    if Field.AsInteger < 4 then
    begin
      AFont.Style := [fsBold];
      Background := clRed;
      nmagazyn:=true;
    end
    else
    begin
      AFont.Style := [];
      If Highlight then
       begin
        AFont.Color:=clWhite;
        Background := clBlue;
       end
       else
       begin
        AFont.Color:=clBlack;
        Background := clWhite;
       end;
    end;
 end;
end;
0

Jeżeli chodzi ci o jakikolwiek niski stan to może zobacz DrawColumnCell.
Ustawiasz jakąś zmienna globalną na FALSE i w DrawColumnCell dajesz (ZmiennaGlobalna:=ZmiennaGlobalna OR warunek);
a potem jeżeli TRUE to ustawiasz statusbar.

Nie wiem czy o to Ci chodziło.

0
Decho napisał(a)

Jeżeli chodzi ci o jakikolwiek niski stan to może zobacz DrawColumnCell.
Ustawiasz jakąś zmienna globalną na FALSE i w DrawColumnCell dajesz (ZmiennaGlobalna:=ZmiennaGlobalna OR warunek);
a potem jeżeli TRUE to ustawiasz statusbar.

Nie wiem czy o to Ci chodziło.

Problem prawie rozwiązany. Użyłem komponentu SMDBGrid i wykorzystałem Footer do określania minimalnej wartości z kolumny i w przypadku wykrycia niskiej wartości w kolumnie aktualizuje mi StatusBar. Przy okazji wykryłem buga w tym komponencie - za wartość minimalną przy obliczaniu footera brał początkową wartość 0 a nie wartość pierwszej komórki skutkiem czego footer miał zawsze wartość 0. Teraz aktualizuje ok tylko przy zmianie wartości w kolumnie i przejściu do poprzedniej/następnej kolumny jeszcze nie aktualizuje lecz dopiero po przejściu do innego rekordu. Na razie tak zostawiam ale coś jeszcze później pokombinuje

1 użytkowników online, w tym zalogowanych: 0, gości: 1