[firebase-br] Ajuda em SQL

Tecnobyte Informática temp2 em tecnobyte.com.br
Seg Mar 7 16:35:14 -03 2011


Boa tarde

Em que evento você executa o select mencionado? Se estiver executando algum 
SELECT dentro de eventos como OnDrawColumnCell ou OnDrawDataCell, esta 
certamente é a causa da lentidão.

Quando eu quero destacar alguma coisa em DBGrid tomando como base alguma 
informação que vem do banco de dados, geralmente uso um sub-select no select 
principal para pegar alguma informação que me permita determinar a cor mais 
adequada para aquela linha.

Exemplo:

SELECT
  Cliente.Codigo,
  Cliente.Nome,
  (SELECT FIRST 1 ContaReceber.Codigo FROM ContaReceber
   WHERE ContaReceber.Cliente_Codigo = Cliente.Codigo AND
     DataPagamento IS NULL) AS ExisteDebito
  ...
FROM Cliente
...

Desta forma eu terei uma campo a mais no DataSet. Se estiver NULL é porque 
não tem débito; caso contrário (não nulo) é porque tem débito.

Em Delphi, no evento OnDrawColumnCell ou similar posso testar assim:

if DataSet.FieldByName('ExisteDebito').IsNull then
  Cor := clBlack
else
  Cor := clRed;
  ...


DICA! O campo ExisteDebito pode ficar oculto, bastando colocar isto abaixo 
no evento AfterOpen do DataSet:

DataSet.FieldByName('ExisteDebito').Visible := False;

Daniel P. Guimarães
Tecnobyte Informática
www.tecnobyte.com.br


----- Original Message ----- 
From: "Marcio Da Silva Ereno" <marcio em msereno.com.br>
To: "FireBase" <lista em firebase.com.br>
Sent: Monday, March 07, 2011 2:28 PM
Subject: [firebase-br] Ajuda em SQL


Ola pessoal,

no meu sistema quando eu abro a pesquisa de clientes eu destaco o cliente
que esta com atraso
deixa a linha do grid com uma cor diferente eu uso o seguinte sql

// aqui estou filtrando o cliente as parcelas vencidas que não estão pagas!
select cliente from receber where cliente=:pcodi and vencimento<:pdata and
pagamento is null

mais rescentemente um cliente esta me reclamando de lentidao na rede
 no cadastro de cliente fui verificar e esse codigo que esta deixando lento,
alguem tem algum ideia como resolver isso
se tem como melhor o sql?
colocar alguns indice?
obs: ja existe indice do cliente e do vencimento.

obrigado pela atenção

-- 
*Marcio da Silva Ereno*
          *Analista de Sistemas*
*MSEreno - Assessoria & Sistemas*
         www.msereno.com.br





Mais detalhes sobre a lista de discussão lista