erro no sender

24/07/2008

0

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;



Robinhocne

Robinhocne

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

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar