passagem de parametro por referencia ?

Delphi

27/04/2007

Bom galera não sei bem se a solução do meu problema seria um metodo com passagem de parametro por referencia.
meu problema:

tenho uma tabela que armazena dados para configuração automática do sistema, não sei se é possivel mais pensei em algo assim:
procedure ConfigSystem(ADataSet: TClientDataSet; var AVariavel1: string; var AVariavel2: integer);
begin
  ADataSet.Open;
  try
    AVariavel1 := ADataSet.FieldValues[´Campo1´];
    AVariavel2 := ADataSet.FieldValues[´Campo2´];
  finally
    ADataSet.Close;
  end;
end;


porem tentei assim e não deu certo, alguem teria alguma sugestão ?

abraço galera !!!!


Fabiano Góes

Fabiano Góes

Curtidas 0

Respostas

Massuda

Massuda

27/04/2007

[quote:1d7971dcfd=´Fabiano Góes´]porem tentei assim e não deu certo, alguem teria alguma sugestão ?[/quote:1d7971dcfd]Seu código aparentemente não tem problemas. Pelo que você postou, ele está funcionando assim...
var
  V1: string;
  V2: Integer;
...
  ConfigSystem(UmDataSet, V1, V2); 
  // V1 = valor lido do campo Campo1 do dataset
  // V2 = valor lido do campo Campo2 do dataset
...
Tem certeza que não está dando erro no BD?


GOSTEI 0
Fabiano Góes

Fabiano Góes

27/04/2007

Massuda realmente funciona :oops:

o problema era que na assinatura do metodo = V1: string
quando eu passava o parametro eu passava um TEdit.Text ai dava erro,
mais passando uma variavel string como parametro e depois jogando ela no TEdit funciona.

eu poderia mudar a assinatura de V1: string para V1: TEdit porem alguns se eu precisar usar o mesmo metodo para um TComboBox ?

por isso tinha assinado como string e passava TEdit.Text ou TComboBox.Tex.

como poderia fazer para poder passar tanto um TEdit.Text quanto um TComboBox.Text ?


GOSTEI 0
Rogick

Rogick

27/04/2007

Sei lá, uma alternativa é, vc transformar a procedure eu uma function, passar a string no Result da function...

Ex:

function ConfigSystem(ADataSet: TClientDataSet; var AVariavel2: integer): string; 
begin 
  ADataSet.Open; 
  try 
    Result := ADataSet.FieldValues[´Campo1´]; 
    AVariavel2 := ADataSet.FieldValues[´Campo2´]; 
  finally 
    ADataSet.Close; 
  end; 
end; 


Ou...

Passar este parametro como TObject ai vc passa o objeto ´inteiro´ e depois seta o valor na prop Text dele utilizando polimorfismo

Ex:

procedure ConfigSystem(ADataSet: TClientDataSet; var Sender: TObject; var AVariavel2: integer); 
begin 
  ADataSet.Open; 
  try 
    // Serve p/ Edit, DBEdit, MAskEdit, ect.
    if (Sender is TCustomEdit) then
      (Sender as TCustomEdit).Text := ADataSet.FieldValues[´Campo1´]; 
    if (Sender is TCombobox) then
      (Sender as TCombobox).Text := ADataSet.FieldValues[´Campo1´]; 
    ...    
    AVariavel2 := ADataSet.FieldValues[´Campo2´]; 
  finally 
    ADataSet.Close; 
  end; 
end; 


Espero ter ajudado :wink:


GOSTEI 0
Rodc

Rodc

27/04/2007

Você não poderia passar assim?
ConfigSystem(UmDataSet, @Edit1.Text, @Edit2.Text);

Tô sem o delphi para testarar, mas acho que funciona.


GOSTEI 0
POSTAR