Fórum Passar parametro de um RECORD para uma procedure #270560
01/03/2005
0
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
Curtir tópico
+ 0Posts
01/03/2005
Massuda
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;
Gostei + 0
01/03/2005
Rod001
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
01/03/2005
Massuda
type TSuperRecord = record case Integer of 0: (C0: TRecordC0); 1: (C1: TRecordC1); end;
var Rec: TSuperRecord; ... if Rec.C0.Campo01 = ´C0´ then ... if Rec.C1.Campo01 = ´C1´ then ...
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)