Controle de Cirurgia Médica

Delphi

09/04/2010

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

Curtidas 0

Respostas

Carlos Mazzi

Carlos Mazzi

09/04/2010

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.    
GOSTEI 0
Álvaro Luiz

Álvaro Luiz

09/04/2010

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;
 
GOSTEI 0
POSTAR