Array dinâmico de objetos

Delphi

03/09/2009

Pessoal criei a seguinte classe:

unit unBiblioteca;

interface

uses
   Variants, Classes, Forms, SqlExpr, dConexao, Provider, DBClient, unClasses;

type

   TCDSData = class
   private

   public
      FQuery : TSQLQuery;
      FDSP : TDataSetProvider;
      FCDS : TClientDataSet;
      FDS  : TDataSetProvider;

      FKeyValue   : String;
      FListValue  : String;
      FOrderValue : String;
      FTableValue : String;

      FModule     : TModule;
         
      constructor Create;
   end;

implementation

constructor TCDSData.Create;
begin
   inherited Create;
end;

end.



Criei um array em public:

public
   ListCombosLookup : array of TCDSData;
end;


E estou tentando usar da seguinte maneira. O problema está no FKeyValue. Está dando erro de acess violation.


procedure TdmCliente.prOpenModule(Action: TActions);
begin
   SetLength(FormCadClientes.ListCombosLookup, 1);
   FormCadClientes.ListCombosLookup[0].FKeyValue := ´Testes´;
end;



Qaul será o motivo deste erro?

Atenciosamente

Marlon[/code]


Et.vinny

Et.vinny

Curtidas 0

Respostas

Osocram

Osocram

03/09/2009

sera q isso esta instanciado ?
FormCadClientes.ListCombosLookup[0]


o certo p achar o problemas seria vc colocar um break point ae na linha do erro e ver qual parte dele não esta instanciado ou esta com lixo.


GOSTEI 0
Et.vinny

Et.vinny

03/09/2009

Tarde da noite e não vi que estava nil.
Mas tentei dar create e nada.

Vou testar aqui outras possibilidades


GOSTEI 0
Marco Salles

Marco Salles

03/09/2009

Vc não esta instanciando os Objetos

Exemplo Bobo

procedure TFormCadClientes.Button1Click(Sender: TObject);
var
idx:integer;
begin
SetLength(FormCadClientes.ListCombosLookup, 1);
FormCadClientes.ListCombosLookup[0]:=TCDSData.Create; //INSTANCIAR
try
FormCadClientes.ListCombosLookup[0].FKeyValue := ´Testes´;
 Showmessage(FormCadClientes.ListCombosLookup[0].FKeyValue);

finally

  for idx := 0 to Length(FormCadClientes.ListCombosLookup) - 1 do
    freeandNil(FormCadClientes.ListCombosLookup[idx])

end;
end;



GOSTEI 0
Et.vinny

Et.vinny

03/09/2009

Nem tinha pensado em dar create.
Funcionou.

Encontrei outro problema.
O código abaixo não permite compilar o programa.

function fnAddComboLookup(PArray : array of TCDSData; PModule : TModule; PCombo : TComponent) : Boolean;
begin
   SetLength(PArray, 1);
end;


O Delphi diz que o PArray não é valido.
Fazia isto dentro do form sem problmas. E na unit não rola.

Pq será?

[]s,

Marlon


GOSTEI 0
Marco Salles

Marco Salles

03/09/2009

Tente

Type
  TEscolhaNome =  array of TCDSData;


......

 ListCombosLookup : TEscolhaNome;


.......


function fnAddComboLookup(PArray :TEscolhaNome; PModule : TModule; PCombo : TComponent) : Boolean; 
begin 
   SetLength(PArray, 1); 
end;


Que dá...


GOSTEI 0
Marco Salles

Marco Salles

03/09/2009

Tente

Type
  TEscolhaNome =  array of TCDSData;


......

 ListCombosLookup : TEscolhaNome;


.......


function fnAddComboLookup(PArray :TEscolhaNome; PModule : TModule; PCombo : TComponent) : Boolean; 
begin 
   SetLength(PArray, 1); 
end;


Que dá...


GOSTEI 0
Et.vinny

Et.vinny

03/09/2009

Valeu, funcionou redondo....
Tinha achado essa solução na net, e não funcionava.

E hoje descobri o meu erro. Em vez de fazer PArray :TEscolhaNome, estava fazendo PArray :array of TEscolhaNome;

Braço curto total....

Valeu pela ajuda galera....

[]s,

Marlon


GOSTEI 0
POSTAR