Tb tinha feito esse teste Márcio, mas tive os mesmo problemas. 

Valew pela atenção,
Ricardo.

Marcio - Aquid <[EMAIL PROTECTED]> escreveu:                               No 
lugar de
 
 Result := Sl;
 
 Use
 
 Result.AddStrings(Sl);
 
 Márcio
 
 ----- Original Message ----- 
 From: Davi Eduardo Borges Wall 
 To: delphi-br@yahoogrupos.com.br 
 Sent: Thursday, September 20, 2007 9:51 AM
 Subject: RES: [delphi-br] Duvida ao trabalhar com TStringList
 
 Como que eu vou te explicar isso por e-mail..... vou tentar com um exemplo.
 
 function xxx: TStringList;
 
 Var
 
 Sl: TStringList;
 
 Begin
 
 Sl := TStringList.Create;
 
 Sl.Add('ola mundo');
 
 Result := Sl;
 
 FreeAndNil(SL);
 
 End;
 
 Veja este código, ele mostra exatamente o que você está fazendo. Agora imagine 
que Result é uma string list que vai receber um ponteiro
 
 De SL. Blz, ele recebe o ponteiro tranqüilo. Mas na próxima linha, vc está 
destruindo SL. Result aponta para SL, SL foi destruído, logo Result é nil. 
(lógico aristotélica RS..)
 Quando vc for acessar o resultado desta função com certeza irá gerar uma AV. A 
segunda maneira está correta pois vc está inserindo os dados no Result e não 
inserindo um ponteiro
 de outra StringList, mas não é uma boa prática de programação.
 
 Ainda, a maneira mais elegante de se resolver esse problema é passar a 
stringlist como referencia. Ficaria assim:
 
 procedure xxx(Var SL : TStringList);
 
 Begin
 
 Sl.Add('ola mundo');
 
 End;
 
 Daí a chamada ficaria assim:
 
 Var
 
 Sl: TStringList;
 
 Begin
 
 Sl := TStringList.Create;
 
 Xxx(SL); 
 
 FreeAndNil(SL);
 
 End;
 
 Sugiro que você estude passagem de parâmetros, mais especificamente passagem 
de parâmetros por referencia.
 
 []'s
 
 De: delphi-br@yahoogrupos.com.br [mailto:[EMAIL PROTECTED] Em nome de Ricardo 
César Cardoso
 Enviada em: quinta-feira, 20 de setembro de 2007 09:10
 Para: delphi-br@yahoogrupos.com.br
 Assunto: [delphi-br] Duvida ao trabalhar com TStringList
 
 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.
 





       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