Array
(
)

Procedure SQL função Delphi

Tremonti
   - 07 abr 2006

Iai Galera,
possuo uma duvida e gostaria que me ajudassem.

Seguinte,

Tenho uma procedure no SQl que me retorna se existe alguma informação :

Create Procedure Sp_TemNota( @NrLtAtend Char(9) )
AS
Begin
Select Top 1 TpPed From PedSai
Where NrLtAtend = @NrLtAtend
And Nota = ´S´
End

Tenho uma função no Delphi que me retorna um resultado desta função:

function TfrmLoteDoc.TemNota(NrLtAtend: String): Boolean;
begin
with sp_TemNota do
Begin
Params[1].AsString := NrLtAtend;
Open;
Result := Not IsEmpty;
Close;
End;
end;


Isto server para me dizer se um daterminado Lote possui Nota, nota é se uma pessoa já visualizou e realizou as operações necessarias.
E quando sim, a linha tem que ficar azul, uso o evento do Grid

procedure TfrmLoteDoc.GridDrawColumnCell(Sender: TObject;
const Rect: TRect; DataCol: Integer; Column: TColumn;
State: TGridDrawState);
var
mColor : TColor;
begin

if TemNota( qryLotesNrLtAtend.AsString ) Then
mColor := clBlue
else
mColor := clBlack;

if ( gdselected in State ) Then
begin
Grid.Canvas.Font.Style := [fsBold];
Grid.Canvas.Brush.Color := $00FFEFDF;

end
else
Grid.Canvas.Font.Style := [];

Grid.Canvas.Font.Color := mColor;
Grid.DefaultDrawColumnCell( Rect , Grid.SelectedIndex , Column , State );
end;

Só que este procedimento está ficando demorado. Alguém teria uma idéia para que talvez fique mais rapido.

Qualquer idéia é valida galera....

Muito Obrigado

Abraços...


Osocram
   - 07 abr 2006

Amigo.. Esse evento
Citação:
GridDrawColumnCell
eh executado a cada celula pintada.... enton agora imagina q a cada celula desse dbgrid ele tem q ficar fazendo o sql e retornando o resultado p vc... agora imagina alguns computadores fazendo isso ao mesmo tempo (non sei se o seu sistema eh multiusuario... foi so um exemplo), eh por isso q deve estar ficando lento....

Non tem como vc colocar um campo ou os campos q vc verifica se jah foi feito as operacoes no DataSet do DBGrid?
Dae vc apenas faria a comparacao na hora....

Espero ter ajudado.