Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   validar dbedit para horario (https://www.clubdelphi.com/foros/showthread.php?t=71276)

gonza_619 10-12-2010 20:32:55

validar dbedit para horario
 
hola amigos, bueno lo que quiero hacer es algo que hice parecido con un datetimepicker, pero ahora con dbedit que muestra horas de una tabla donde quiero modificar el horario segun un turno, es decir al seleccionar un registro de tabla, tambien selecciono el turno ej:
1:turno mañana
2:turno tarde
al turno lo saco asi.
turno:=table.fieldbyname('turno').asinteger;
luego con ese turno validar dbedit, que si es 1 el turno , no pueda sobrepasar de tal hora eJ:
si es turno1 : va de 09:00 am - hasta- 12:00 am, que no sobrepase de este rango en el dbedit cunado quiera modificar el horario desde el mismo dbedit. no uso dtpicker porq no ingreso nuevo horario sino que necesito editarlo. gracias

Código Delphi [-]
var  HoraAct : Integer;
begin
if tur=1 then
begin
 HoraAct := HourOf(DateTimePicker1.Time);
 //si no esta entre las 17 y 20 horas o la hora ini es mayor que la hora fin, le ponemos la hora con la que empieza el rango
 if Not((HoraAct>=8) and (HoraAct<=12)) or (CompareTime(DateTimePicker1.Time,DateTimePicker2.Time)=1) Then
  begin
  DateTimePicker1.Time := EncodeTime(9,MinuteOf(DateTimePicker1.Time),0,0);
  end;
end;

esto hice con dtpicker con hora pero nose como hacerlo con dbedits para controlar grcias

ecfisa 12-12-2010 01:38:45

Hola.

Una forma puede ser:
Código Delphi [-]
procedure TForm1.FormShow(Sender: TObject);
begin
  LongTimeFormat:= 'hh:mm:ss';
  DataSet1.FieldByName('HORA').EditMask:= '!90:00:00;1;_';
  ...
end;

procedure TForm1.DataSet1HORASetText(Sender: TField; const Text: String);
var
  Hora,m1,m2,
  t1,t2: TTime;
  aux: string;
begin
  aux:= Text;
  // Rango turno mañana
  m1:= StrToTime('08:00');  
  m2:= StrToTime('12:00');
  // Rango turno tarde
  t1:= StrToTime('16:00');  
  t2:= StrToTime('20:00');
  Hora:= StrToTime(aux);
  DataSet1.Edit;
  if ((ComboBox1.Text = 'MAÑANA') and
     ((Hora < m1) or ( Hora > m2))) or
     ((ComboBox1.Text = 'TARDE') and
     ((Hora < t1) or (Hora > t2))) then
  begin
    ShowMessage('Horario no permitido en el turno elegido');
    DataSet1.Cancel;
  end
  else
    (Sender as TField).AsDateTime:= Hora;
end;

Saludos.

gonza_619 12-12-2010 02:50:20

hola, perdon por no entender bien, unas preguntas.

DataSet1.FieldByName('HORA').EditMask:= '!90:00:00;1;_';

esta parte seria table1.fieldbyname.... o se puede hacer directamente por dataset?

y esta parte:
aux:= Text; /// text de donde obtengo esta variable?

y tambien en
DataSet1.Edit;/// aca estaria modificando desde el dbedit? o directamente desde el table?
gracias perdon por tantas preguntas.

ecfisa 12-12-2010 10:15:03

Hola Gonza.

El DBEdit es la representación visual de un campo de un DataSet, asi que es lo mismo asignar la máscara con la línea: DataSet1.FieldByName('HORA').EditMask:= '!90:00:00;1;_'; que desde el editor de máscaras del campo. Puse el código
por que se presta menos a confuciones que explicar el proceso visual.

La variable aux me quedó de una prueba, perdón. :o

En la línea: DataSet1.Edit; estoy poniendo el DataSet en modo edición. Te agrego el mismo ejemplo con algunos cambios
que creo te van a aclarar como se hace lo mismo pero referenciando el DataSet desde el parámetro Sender de tipo TField.

Código Delphi [-]
procedure TForm1.DataSet1HORASetText(Sender: TField; const Text: String);
var
  Hora,m1,m2,
  t1,t2: TTime;
begin
  // Rango turno mañana
  m1:= StrToTime('08:00');
  m2:= StrToTime('12:00');
  // Rango turno tarde
  t1:= StrToTime('16:00');
  t2:= StrToTime('20:00');
  Hora:= StrToTime(Text);
  (Sender as TField).DataSet.Edit;
  if ((ComboBox1.Text = 'MAÑANA') and
     ((Hora < m1) or ( Hora > m2))) or
     ((ComboBox1.Text = 'TARDE') and
     ((Hora < t1) or (Hora > t2))) then
  begin
    ShowMessage('Horario no permitido en el turno elegido');
    (Sender as TField).DataSet.Cancel;
  end
  else
    (Sender as TField).AsDateTime:= Hora;
end;


Un saludo.


La franja horaria es GMT +2. Ahora son las 12:25:54.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi