Otimizaçao de consulta em ADO

Delphi

12/07/2006

Estou cm um problema, pois tenho que fazer uma consulta num componente ADOQuery, porem esta mto lento! Gostaria de saber quais configuracaoes poderia fazer no componente pra melhorar a perfomance da consulta.

Obrigado!


Curynga

Curynga

Curtidas 0

Respostas

Bon Jovi

Bon Jovi

12/07/2006

Depende. Quer fazer o que? Vai usar data controls ou apenas fazer loop?

Se quer apenas percorrer os registros de forma unidirecional, use o tipo de cursor ctOpenForwardOnly (necessario Location = clServer). Ex.:

  ADODataSet1.Close;
  ADODataSet1.CursorLocation := clUseServer;
  ADODataSet1.CursorType := ctOpenForwardOnly;
  ADODataSet1.LockType := ltReadOnly;
  ADODataSet1.ParamCheck := False; //só no caso de nao ter parametros
  ADODataSet1.DisableControls;
  ADODataSet1.CommandText := ´select CategoryID, CategoryName from Categories´;
  ADODataSet1.Open;
  try
    while not ADODataSet1.Eof do
    begin
      ListBox1.Items.Add(ADODataSet1CategoryID.AsString);
      ADODataSet1.Next;
    end;
  finally
    ADODataSet1.Close;
  end;


Qdo se usa CursorLocation Server é recomendável sempre fechar assim que terminado o uso interno, sem deixar aberto pro usuário.


GOSTEI 0
Bon Jovi

Bon Jovi

12/07/2006

E tb poste a consulta.


GOSTEI 0
Curynga

Curynga

12/07/2006

SELECT ld.cod_ban, ld.cod_age, ld.num_cdj, ld.num_dep, ld.dat_lan,
SUM(ld.vr_lan) as Rendimento
FROM CDJ_DEPOSITO d
JOIN CDJ_LANCAMENTO_DEPOSITO ld ON
(ld.cod_ban = d.cod_ban
AND ld.cod_age = d.cod_age
AND ld.num_cdj = d.num_cdj
AND ld.num_dep = d.num_dep)
WHERE d.cod_ban_ori = FloatToSQL(pCodBan)
AND d.cod_age_ori = FloatToSQL(pCodAge)
AND d.num_cdj_ori = FloatToSQL(pNumCdj)
AND d.num_dep_ori = FloatToSQL(pNumDep)
AND ld.cod_his_lan_dj IN (4,5)
AND ld.dat_lan = DateToSQL(pDatLan)
GROUP BY ld.cod_ban, ld.cod_age, ld.num_cdj, ld.num_dep, ld.dat_lan


A consulta é essa que estou fazendo, e estou passando os parametros daquela forma para evitar o proprio parametro do componente.
Não vi alteraçoes que poderiam ser feitas e já alterei juntamente com o DBA alguns indices.


GOSTEI 0
POSTAR