Não sei se o Yahoo trocou as mensagens, mas ambos funcionam. O fato é que eu 
crio o StringList "final" fora das functions. Seria algo assim:

Var
  SLFinal : TStringList;

Begin
   SLFinal := TStringList.Create;
   { bloco de comandos }

   SLFinal := Selecionar_Velocidade_Corte(Especificacao, Dimensao);
End;

e antes desse código e no meu caso em outra unit está declarada a function que 
cito na 1ª mensagem.

Isso muda alguma coisa? Fiz uns testes aqui e funcionou... mas não fiz como vc 
passou.

Sds,
Ricardo.

Joao Morais <[EMAIL PROTECTED]> escreveu:                               
 No primeiro exemplo você cria o StringList e depois o destroi. No 
 segundo você sequer cria o StringList. Nenhum dos dois deveria funcionar.
 
 A estruturada sua função deve ser algo assim:
 
 function Selecionar(...): TStringList;
 begin
    Result := TStringList.Create;
    try
      // popula o Result, que é um StringList;
    except
      FreeAndNil(Result);
      raise;
    end;
 end;
 
 e o método que chama Selecionar() irá receber um novo objeto, que é o 
 StringList, e será o responsável por destruí-lo tão logo não seja mais 
 necessário.
 
 --
 Joao Morais
 
 Ricardo César Cardoso wrote:
 > 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