Fórum Ajuda com ARRAY #216257
24/02/2004
0
criei um tipo TServico dentro de uma Unit chamada Automacao.
unit Automacao; interface type TServico = record CdServico : String; QtServico : String; VlServico : String; end; . . .
aí dentro desta mesma unit Automacao, criei uma procedure:
procedure Autoriza(Codigo:Integer;Nome:String;Data:TDate;Servicos:Tservico); begin . . . end;
esta procedure Autoriza é chamada em outros forms:
procedure TForm1.Button1Click(Sender: TObject); begin ... Autoriza(1,´JOSUE SANTOS´,StrToDate(´01/01/1950´),xxxxx); ... end;
o meu problema é que onde coloquei xxxxx, deve ser informado o array que criei anteriormente utilizando do tipo TServico.
este array deve conter os dados de uma tabela ...
como fazer ?
bem, o q tentei foi utilizar no lugar de xxxxx a chamda para uma Function que poderia me retornar como Result os registros da tabela, só q não consegui utilizar uma Function q me retorne um array ..a dúvida é essa!
o q fiz:
function TForm1.MontaServicos:Array Of TServico; begin ... end;
agradeço sua ajuda
Diogo
Diogoalles
Curtir tópico
+ 0Posts
24/02/2004
Fórum Vini
você tem duas alternativas:
procedure Autoriza(Codigo:Integer;Nome:String;Data:TDate;Servicos:Array of TServico);
ou então:
type TArraydeServico = array of TServico; //ou array[1..10] of TServico procedure Autoriza(Codigo:Integer;Nome:String;Data:TDate;Servicos: TArraydeServico);
Para pegar o tamanho de um array dinâmico, use a função Length().
Espero ter ajudado.
Vinicius.
Gostei + 0
24/02/2004
Marco Salles
procedure Autoriza(Codigo:Integer;Nome:String;Data:TDate;Servicos:Array of TServico);
Copmo Chama-la :?:
procedure TForm1.Button1Click(Sender: TObject); begin ... Autoriza(1,´JOSUE SANTOS´,StrToDate(´01/01/1950´),?????????); ... end;
Gostei + 0
24/02/2004
Fórum Vini
você pode usar um array mesmo:
var A: Array[1..2] of Integer; begin A[1]:= 1; A[2]:= X; Autoriza(1,´JOSUE SANTOS´,StrToDate(´01/01/1950´),A); end;
ou usando um construtor de open arrays:
Autoriza(1,´JOSUE SANTOS´,StrToDate(´01/01/1950´),[1, X]);
Espero ter ajudado.
Vinicius.
Gostei + 0
24/02/2004
Marco Salles
procedure TForm1.Button1Click(Sender: TObject); var A:Array [1..3] Of Integer; begin Autoriza(1,´JOSUE SANTOS´,StrToDate(´01/01/1950´),A); end;
Gostei + 0
24/02/2004
Fórum Vini
deve ser porque o exemplo que eu dei usa um Array of Integer e a sua declaração esta como Array of TServico.
Espero ter ajudado.
Vinicius.
Gostei + 0
24/02/2004
Marco Salles
E Como Eu Chanaria O método Atualiza Definido Por Voce :?:
procedure Autoriza(Codigo:Integer;Nome:String;Data:TDate;Servicos:Array of TServico);
Gostei + 0
24/02/2004
Fórum Vini
acho que você não entendeu, eu coloquei um Array of Integer para facilitar a inicialização do array.
Código usando array of Integer:
Declaração: procedure Autoriza(Codigo:Integer;Nome:String;Data:TDate;Servicos:Array of Integer); Chamada: var A: Array[1..2] of Integer; begin A[1]:= 1; A[2]:= X; Autoriza(1,´JOSUE SANTOS´,StrToDate(´01/01/1950´),A); end;
Código usando array of TServico:
Declaração: procedure Autoriza(Codigo:Integer;Nome:String;Data:TDate;Servicos:Array of TServico); Chamada: var A: Array[1..2] of TServico; begin //Inicialização do array A[1].CdServico:= ´1´; A[1].QtServico:= ´200´; A[1].VlServico:= ´ABC´; A[2].CdServico:= ´1´; A[2].QtServico:= ´200´; A[2].VlServico:= ´ABC´; Autoriza(1,´JOSUE SANTOS´,StrToDate(´01/01/1950´),A); end;
Espero ter ajudado.
Vinicius.
Gostei + 0
24/02/2004
Marco Salles
Gostei + 0
24/02/2004
Fórum Vini
Gostei + 0
24/02/2004
Diogoalles
Valeu a força aí ..
ficou muito claro , amanha estarei implementando !!!
Vini, só não entendi como seria questão do Contructor ..poderia detalhar ?
abraço
Gostei + 0
26/02/2004
Diogoalles
gostaria de ver se vc pode me ajudar ..
criei tudo o q precisa ..só q em várias vezes q tento executar me dá erro de ´Access Violation´ .. e nem sempre é no mesmo ponto ...
bem ..ai vai :
declaração do tipo TServico
unit Automacao; interface uses Windows, SysUtils, Registry, Controls, Forms, Variants; type TServico = record TpServico : String[1]; QtServico : String[12]; CdServico : String[8]; TpPercentual : String[8]; DsServico : String[100]; VlServico : String[12]; TpInsumo : String[4]; CdPrestDivi : String[15]; end;
.... rotina que utiliza o TServico como variável A ..onde defino deinamicamente o seu tamanho
procedure TFrm915F.BtnAutorizarClick(Sender: TObject); var A : array of TServico; begin try TblLanProced.Refresh; TblLanIns.Refresh; Count_Proc_Ins := 0; CountProc := TblLanProced.RecordCount; CountIns := TblLanIns.RecordCount; Count_Proc_Ins := CountProc + CountIns; y := (Count_Proc_Ins -1); SetLength(A,y); TblLanProced.First; for x := 0 to (CountProc - 1) do begin A[x].TpServico := ´P´; A[x].QtServico := FloatToStr(TblLanProcedQT_PROCED.Value); A[x].CdServico := IntToStr(TblLanProcedCD_PROCED.Value); A[x].TpPercentual := IntToStr(TblLanProcedCD_TP_PERCENT.Value); A[x].DsServico := ´´; A[x].VlServico := ´´; A[x].TpInsumo := ´´; A[x].CdPrestDivi := ´´; TblLanProced.Next; end; TblLanIns.First; for x := x to y do begin A[x].TpServico := ´I´; A[x].QtServico := FloatToStr(TblLanInsQT_INSUMO.Value); A[x].CdServico := IntToStr(TblLanInsCD_INSUMO.Value); A[x].TpPercentual := ´´; A[x].DsServico := ´´; A[x].VlServico := FloatToStr(TblLanInsVL_INSUMO.Value); A[x].TpInsumo := IntToStr(TblLanInsCD_TP_INSUMO.Value); A[x].CdPrestDivi := ´´; TblLanIns.Next; end; if((CountIns > 0)or(CountProc > 0))then begin Autorizacao_Procedimentos(True,True,Frm915F, TblPropAUTOMACAO_CD_UNIDADE.Value, TblPropAUTOMACAO_CD_PRESTADOR.Value, ´01´, TblPacAUTOMACAO_CD_UNIDADE.Value, TblPacAUTOMACAO_CD_CARTEIRA.Value, ´´,´0000´,´00000000´,´S´, (TblMedAUTOMACAO_CD_UNIDADE.Value+TblMedAUTOMACAO_CD_PRESTADOR.Value), IntToStr(Count_Proc_Ins), A); if((DtMdlGcm1.CDAutoriza.Active = True)and (DtMdlGcm1.CDAutoriza.RecordCount > 0))then Autorizado := True; end; except on E : Exception do begin Screen.Cursor := crDefault; DtMdlGcm1.BsMsg.MessageDlg(´Processo cancelado !´+#13+10+ ´Ocorreram erros durante a Autorização.´, mtError, [mbOK], 0); end; end; end;
e aqui tá a Procedure Autorizacao_PRocedimento que tem o array de TServico.
procedure Autorizacao_Procedimentos(PesqUsu,Erros:Boolean;Frm:TForm;UniPrest, CdPrest,InOperacao,CdUniBenef,CdCartBenef,CdCid,AaGuiaAtend,NrGuiaAtend,IdCartao, IdPrestSoli,QtServico:String; Servicos:array of TServico); //TpServico,QtServ,CdServico,TpPercentual,DsServico,VlServico,TpInsumo,CdPrestDivi: array of String); begin ...
tem algo de errado nos arrays ou na forma como estou trabalhando ?
agradecido
Diogo
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)