Passar parametro de um RECORD para uma procedure

Delphi

01/03/2005

Pessoal, boa tarde

Alguem saberia como posso fazer para passar um tipo RECORD para uma procedure?
Estou tentando fazer persistencia em memória com um Array of record, porém, nao sei como passar um tipo RECORD para a procedure. Possuo vários tipos de RECORDS e essa procedure verificaria esse RECORD e associaria a um ARRAY of RECORD, que estah declarada dentro da mesma.

obrigado


Rod001

Rod001

Curtidas 0

Respostas

Massuda

Massuda

01/03/2005

Algumas formas de passar um record para uma procedure:
type
  TMyRecord = record
    ...
  end;

...

procedure FooBar1(const Valor: TMyRecord);
begin
  // Valor é constante/read only
end;

procedure FooBar2(var Valor: TMyRecord);
begin
  // Valor pode ser alterado
end;

// por questões de desempenho, evite esta forma
procedure FooBar3(Valor: TMyRecord);
begin
  ... 
end;
Não sei se ajudou, mas seria interessante você dar mais detalhes sobre o que quer fazer ou, se tiver, postar o código em questão.


GOSTEI 0
Rod001

Rod001

01/03/2005

Entaum ...

Explicando um pouco mais ...

Estou mexendo com arquivos de administradoras de cartao tipo Texto e os dois digitos de cada linha do arquivo significam coisas diferentes.
Exemplo:
linhas comecam com
C0 - Mov. estornados;
C1 - Crédito na conta;
C2 - Débito da conta;
Cada um desses possui estruturas diferentes.
A intenção é fazer separações dos registros em memória para depois para depois gravar em banco.
Fiz entaum um RECORD, sendo exemplo

TRECORDC0 = record
campo01 : string[02];
campo02 : string[10];
campo03 : string[05];
...
end;

e um array desse record para fazer persistencia dos registros q iniciam com C0

TARRAYRECORDC0 = array of TRECORDC0;

fiz uma função para identifcar as digitos iniciais de cada linha e gravar os dados no tipo record, valendo entaum:

with RECORDC0 do
begin
campo01 := ´C0´;
campo02 := ´0021545214´;
campo03 := ´002854´;
...
end;

Agora eu preciso ficar guardando todos os registros que iniciam com C0 nesse array para poder ser tratado e colocado em BD.

Como eu tenho vários tipos de RECORD, poderia estar passando qualquer tipo que declarei, para naum precisar fazer procedure por procedure.
A intenção é fazer a procedure da segunte forma:

procedure PersistirDados(pRegistro : RECORD)
var
ArrayRecordC1 : array RecordC1;
begin
if RECORD = TRECORDC1 then
begin
ArrayRecordC1[nLinha].Campo01 := pRegistro.Campo01;
ArrayRecordC1[nLinha].Campo02 := pRegistro.Campo02;
ArrayRecordC1[nLinha].Campo03 := pRegistro.Campo03;
...
end;
if Record = TRECORDC2 then
begin
...
end;


end;

e assim por diante ...
fazer uma de cada, eu consigo fazer, mas gostaria de sintetizar mais essa procedure.

mais uma vez, obrigado


GOSTEI 0
Massuda

Massuda

01/03/2005

Acho que uma coisa que facilitaria seria ter um record que fosse a união dos seus diferentes tipos de record; assim você pode por seus dados em um único buffer e depois ler os dados através de diferentes records. Seria algo assim:
type
  TSuperRecord = record
    case Integer of
      0: (C0: TRecordC0);
      1: (C1: TRecordC1);
  end;
A vantagem disso é que economiza memória e permite você escrever coisas do tipo:
var
  Rec: TSuperRecord;
...
  if Rec.C0.Campo01 = ´C0´ then ...
  if Rec.C1.Campo01 = ´C1´ then ...



GOSTEI 0
POSTAR