Fórum Controle de Cirurgia Médica #134584

09/04/2010

0

Olá Senhores, o programa deve armazenar as cirurgias realizadas, a MyTable1 marca o dia e o MyTable2 grava a hora e a sala, o procedimento abaixo (no botao exit da sala) deveria impedir que se marcasse no mesmo dia duas cirurgias na mesma sala e hora, o que tá errado?

procedure TCir_agendada.DBComboBox2Exit(Sender: TObject);
var hora, sala: string;
begin
  hora:=DBcombobox1.Text;
  sala:=DBComboBox2.Text;
    while not mytable2.eof do
    begin
      if mytable2.locate('id_cir',DBedit11.Text,[loPartialKey,loCaseInsensitive]) then
      begin
          if (Mytable2hora.Value = hora) and (Mytable2sala.Value = sala) then
          begin
            DBcombobox1.Text:= '';
            DBComboBox2.Text:= '';
            DBcombobox1.SetFocus;
            ShowMessage('A Hora e a Sala já estão reservados');
          exit
          end;
      end;
    mytable2.next;
    end;
end; 
Álvaro Luiz

Álvaro Luiz

Responder

Posts

10/04/2010

Carlos Mazzi

Primeiro é interessante voce usar um BreakPoint e analisar cada linha. Segundo é ter certeza que a myTable2 está first, ou filtrada no seu quesito caso contrario, pode trazer resultados inconsistentes.   Tente usar Objetos DataWare do tipo TQuery, isso no futuro vai te trazer mais beneficios que usa-los do tipo TTable, em vista que o desempenho será muito melhor e nesse seu caso bastaria fazer uma Select passando como parametro o que voce nao quer que apareça, como data e hora já agendadas.   Mas primeiramente, usando da maneira em que está, sugiro dar um First antes de entrar no Loop e depois verificar linha a linha com um breakpoint.    
Responder

Gostei + 0

10/04/2010

Álvaro Luiz

Amigo muito obrigado pela dica, sua informação foi essencial pra resolver o problema, taí a resposta, mais uma vez obrigado, abraço...


procedure TCir_agendada.DBComboBox2Exit(Sender: TObject);
begin
        MYQuery2.Close;
        MYQuery2.SQL.clear;
        MYQuery2.SQL.Add('SELECT ID_CIR, HORA, SALA FROM cir_marcada');
        MYQuery2.SQL.Add('WHERE id_cir =:ID AND HORA =:HORAD AND SALA =:SALAD');
        MYQuery2.Params[0].AsInteger:= strtoint(DBEdit11.text);
        MYQuery2.Params[1].DataType:=ftstring;
        MYQuery2.Params[1].AsString:=DBComboBox1.Text;
        MYQuery2.Params[2].DataType:=ftstring;
        MYQuery2.Params[2].AsString:=DBComboBox2.Text;

        MYQuery2.open;
        if (MYQuery2.RecordCount) = 1 then
          begin
            ShowMessage('A Hora: '+DBComboBox1.Text+' e a Sala: '+ DBComboBox2.Text+ 'já estão reservados');
            DBComboBox1.setfocus;
          end;
        if (MYQuery2.RecordCount) = 0 then
          begin
            DBedit1.SetFocus;
          Exit;
          end;
end;
 
Responder

Gostei + 0

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

Aceitar