Passar parametro de um RECORD para uma procedure
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
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
Curtidas 0
Respostas
Massuda
01/03/2005
Algumas formas de passar um record para uma procedure: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.
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
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
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
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:A vantagem disso é que economiza memória e permite você escrever coisas do tipo:
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