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;
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
Curtir tópico
+ 0
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;
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
Clique aqui para fazer login e interagir na Comunidade :)