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]