Bom dia amigos da lista!

Tenho uma função que, ao fornecer doi parametros, retorna o resultado para um 
TStringList. Não entrarei em muitos detalhes sobre a função pois acredito que 
sejam descartáveis. O problema que tinha era que dentro da função eu criava um 
TStringList temporário que capturava os dados e somente depois passava os dados 
para o TStringList resultado. A estrutura era a seguinte:

/**************************************/
Function Selecionar_Velocidade_Corte(var aMatEspecificacao,
 aDimensao: String): TStringList;
 Var
   aSQLQuery : TSQLQuery;
   Temp      : TStringList;
  
 Begin

   // Cria o StringList Temporário
   Temp := TStringList.Create;

   aSQLQuery := TSQLQuery.Create(nil);

   with aSQLQuery do
   begin
     SQLConnection := dmConexao.conPowerCalcXPLite;

     with SQL do
     begin
         // Instruções de Preparação da consulta
     end;
     
     // Passagem de parâmetros

     Open;
     
     while not EOF do
     begin
       with Temp do
       begin
         // Insere os dados encontrados no StringList
       end;

       Next;
     end
   end;
   // Repassa os dados para o Resultado
   Result := Temp;

   aSQLQuery.Free;
   
   //Libera o StringList temporário
   Temp.Free;
 End;
/**************************************/

Porém sempre que ia acessar algum item da StringList que foi preenchido pela 
chamada a esta função (q foi criado fora da função) eu tinha um "Access 
Violation". 

Pesquisei outros códigos que tinham conceito parecido e acabei por otimizar a 
função tirando o TStringList temporário. O resultado final é:

/**************************************/
Function Selecionar_Velocidade_Corte(var aMatEspecificacao,
 aDimensao: String): TStringList;
 Var
   aSQLQuery : TSQLQuery;
  
 Begin

   aSQLQuery := TSQLQuery.Create(nil);

   with aSQLQuery do
   begin
     SQLConnection := dmConexao.conPowerCalcXPLite;

     with SQL do
     begin
    // Instruções de Preparação da consulta
     end;

     
     // Passagem de parâmetros

     Open;
     
     while not EOF do
     begin
       with Result do
       begin
         // Insere os dados encontrados no StringList
       end;

       Next;
     end

   end;

   aSQLQuery.Free;  

 End;
/**************************************/

Tudo funcionou como o esperado, mas acho que perdi alguma coisa. Alguém poderia 
me explicar pq não conseguia acessar o StringList usando a primeira forma da 
função?

Desculpem o texto longo...

Sds,
Ricardo

       Flickr agora em português. Você clica, todo mundo vê. Saiba mais.

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

Responder a