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]