erro no sender

24/07/2008

1

Estou fazendo um procedimento para buscar umas aulas marcadas dos alunos, mas ai se no procedimento eu nao colocar
assim consultaagendamento(sender : TObject) ele dá erro nessa linha, no sender, fala que não está declarado:

ParamByName(´Hor´).AsTime := StrToDate(TpsvBorderLabel( FindComponent( ´HOR´ + IntToStr( ( Sender as TEdit ).TAG ) ) ).Caption);


e se eu coloco na hora que vou chamar o procedimento assim :

consultaagendamento;

ai dá esse erro:

not enough actual parameters



procedure TFrmTeoricas.ConsultaAgendamento(sender : TObject);
var
  x, vconta : integer;
begin

//alunos := 7; (alunos é a minha variavel que recebe o total de alunos)
 vconta:=1;

 for x := 1 to ContaLinhasHoras do
 begin
   with DtmIza.QryIza do
     begin
       close;
       Sql.Clear;
       Sql.add(´select * from teoricas where instrutor = :inst and data = :dat and horario = :hor´);
       ParamByName(´Inst´).AsString := TxtCodIns.Text;
       ParamByName(´Dat´).AsDate    := TxtData.date;
       ParamByName(´Hor´).AsTime := StrToDate(TpsvBorderLabel( FindComponent( ´HOR´ + IntToStr( ( Sender as TEdit ).TAG ) ) ).Caption);
       open;

      while not eof do
       begin
         DtmIza.QryIza.FieldByName(´Alunos´).AsString := TEdit( FindComponent( ´Alu´ + InttoStr( vconta ) ) ).Text;
       vconta := vconta + 1;
         next;
       end;

      if vconta=(alunos*x) then
       begin
       vconta := vconta + ((alunos*x)-vconta);
       end;

      end;

   end;
end.



estou chamando esse procedimento depois da consulta do instrutor e depois da consulta de horarios;

procedure TFrmTeoricas.txtcodinsExit(Sender: TObject);
begin
   ConsultaRegistros (´Instrutores´, ´Codigo,  Nome´, ´Codigo=´ + TxtCodIns.Text);
   TxtCodIns.Text  := LeDados (´Codigo´);
   TxtNomIns.Text  := LeDados (´Nome´);
   TxtCodIns.Text := StrZero (StrToFloat(TxtCodIns.Text), 3);
   TxtCod.SetFocus;
   SpbAluLoc.Enabled := True;
   TxtCodMat.ReadOnly := False;
   SpbAnt.Enabled  := True;
   SpbPro.Enabled  := True;
  // CriaHorarios;

    Conta := 1;
    ContaLinhasHoras := 0; // para somar quantos linhas de horarios tem
    With DtmIza.QryIza do
    begin
      close;
      sql.Clear;
      sql.Add(´Select * From HorariosTeoricas where Instrutor = :Inst order by horarioInicial´);
      ParamByName(´Inst´).AsString := txtcodins.Text;
      open;
    end;

    if DtmIza.QryIza.RecordCount = 0 then
      begin
        ShowMessage(´Instrutor(a) não tem horario de aulas Teóricas cadastradas!´);
        txtcodIns.SetFocus;
      end
      else
      begin
        while ( not dtmIza.qryiza.EOF ) do
          begin
            TpsvBorderLabel( FindComponent( ´Hor´ + IntToStr( Conta ) ) ).Caption := FormatDateTime(´hh:nn´, DtmIza.QryIza.FieldByName(´HorarioInicial´).AsDateTime);
            TpsvBorderLabel( FindComponent( ´Hora´ + IntToStr( Conta ) ) ).Caption := FormatDateTime(´hh:nn´, DtmIza.QryIza.FieldByName(´HorarioFinal´).AsDateTime);
            conta :=conta+1;
            ContaLinhasHoras := ContaLinhasHoras + 1;
            dtmIza.qryiza.Next;
          end;
      end;
 ConsultaAgendamento;
end;



Responder

Posts

27/07/2008

Micheus

[b:0a6a637a5b]robinhocne[/b:0a6a637a5b], o erro está de acordo com a forma como vc está usando seu código.

No procedimento [i:0a6a637a5b]ConsultaAgendamento[/i:0a6a637a5b] vc está fazendo uso de uma variável chamada [i:0a6a637a5b]Sender[/i:0a6a637a5b] (que comumente é um parâmtro nos eventos):
[i:0a6a637a5b]ParamByName(´Hor´).AsTime := StrToDate(TpsvBorderLabel( FindComponent( ´HOR´ + IntToStr([color=red:0a6a637a5b] ( [b:0a6a637a5b]Sender[/b:0a6a637a5b] as TEdit ).TAG )[/color:0a6a637a5b] ) ).Caption);[/i:0a6a637a5b]

Então, o que vc tem que fazer é definir o que vc pretendia usar nesta linha.
Observando o código no outro procedimento ([i:0a6a637a5b]txtcodinsExit[/i:0a6a637a5b]), observamos que vc usa algo parecido:
[i:0a6a637a5b]TpsvBorderLabel( FindComponent( ´Hor´ + IntToStr( [color=red:0a6a637a5b]Conta[/color:0a6a637a5b] ) ) ).Caption:= FormatDateTime( ...[/i:0a6a637a5b]

Se lá no procedimento [i:0a6a637a5b]ConsultaAgendamento[/i:0a6a637a5b], vc pretende usar esta mesma informação, então o que vc precisa é usar lá esta variável, que aparentemente é global. Ou ainda, definir apropriadamente o parâmetro na função (como integer), usar ele no lugar do tal sender que lá vc implementou e passar um valor para ele ao chamar a função.

O que está havendo, na verdade, é um erro de lógica sua mesmo. Só vc vai poder definir como isto vai ser resolvido, uma vez que sabe o que quer fazer.

Abraços


Responder