Tenho o codigo abaixo:

function TForm1.montaSQL : string;
begin
  Result := 'SELECT * '+
            '  FROM (esanMatriz a '+
            '  INNER JOIN (esanParto P '+
            '             INNER JOIN esanCobertura C '+
            '             ON (P.cdcobertura = C.cdCobertura AND p.cdmatriz = 
C.cdmatriz AND P.cdEmpresa = C.cdEmpresa)) '+
            '  ON (a.cdmatriz = P.cdmatriz AND a.cdEmpresa = P.cdEmpresa)) ';
end;

procedure TForm1.Preparados;
var x : integer;
begin
  with self.qyPreparada do
  begin
    Close;
    Prepared := False;
    SQL.Clear;
    SQL.add(montaSQL+ ' where a.cdmatriz < :x ');
    Prepared := True;
    for x:=1 to 10 do
    begin
      Close;
      Parameters.ParamValues['x'] := x;
      Open;
    end;{for}
  end;{with}
end;

procedure TForm1.SemPreparar;
var x : integer;
begin
  with self.qySemPreparar do
  begin
    Prepared := False;
    for x:=1 to 10 do
    begin
      Close;
      SQL.Clear;
      SQL.add(montaSQL+ ' where a.cdmatriz < '+IntToStr(x));
      Open;
    end;{for}
  end;{with}
end;


1) O metodo "montaSQL" serve apenas para retornar um comando SQL correspondente 
a juncao de varias tabelas

2) O metodo "Preparados" executa o comando SQL definido em "montaSQL" usando 
uma query preparada (self.qyPreparada.Prepare := true), sendo que esta query 
tem um parametro (Parameters), que eu dei o nome de "x" (este é o nome do 
parametro)

3) O metodo "SemPreparar" executa o comando SQL definido em "montaSQL" usando 
uma query "normal" não preparada, onde a cada execução um novo SQL é colocado 
dentro da query (o comando sql é inserido dentro da propriedade 
self.qySemPreparar.SQL.Add(...) )

A minha dúvida é a seguinte:

Li na internet que queries preparadas aumentam a performance de resposta, 
porque evitam a compilação dos comandos SQL. Até aí tudo bem, mas o tempo de 
execução do método "Preparados", que deveria ser pequeno, jáque é uma query 
preparada (e parametrizada) é muito, muito, muito maior que o tempo de execução 
do método "SemPreparar" (que deveria demorar mais, devido ao tempo de 
compilação do comando SQL)

Algum de voces pode me dizer o que está errado?

Utilizo Delphi 6 com o banco Oracle 10g XE 

Obrigado

.:. Clayton Bonelli .:. Tecnologia 

Agriness - Gerenciamento para Agroempresas

.:. (48) 3028-0015 .:. www.agriness.com


[As partes desta mensagem que não continham texto foram removidas]

Responder a