Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Impedir salir de un DBEdit si el valor no es válido (https://www.clubdelphi.com/foros/showthread.php?t=17639)

gluglu 16-01-2005 14:51:47

Impedir salir de un DBEdit si el valor no es válido
 
Qué método o propiedad puedo utilizar para impedir que el cursor salga de un campo TDBEdit tras comprobar que el dato introducido no es válido?

Tengo un TDBEdit en un Form y solicito al usuario introducir un código. Con el evento OnChange compruebo si el código introducido es válido o no. Si es válido puedo pasar al próximo TDBEdit. Si NO es válido no quiero permitir que salga de ese campo ni con las teclas de edición, ni seleccionando con el ratón otro campo diferente.

Gracias.

maruenda 16-01-2005 15:19:07

hola. a ver. mi consejo :

en el evento onexit del dbedit
sidatonovalido then dbedit.setfocus

simplemente. si es valido , seguira con orden de tabulacion establecido, y si no lo es, volverà al dbedit.

un saludo. :confused:

roman 16-01-2005 23:14:57

Cita:

Empezado por gluglu
Con el evento OnChange compruebo si el código introducido es válido o no. Si es válido puedo pasar al próximo TDBEdit. Si NO es válido no quiero permitir que salga de ese campo ni con las teclas de edición, ni seleccionando con el ratón otro campo diferente.

Lo estás enficando desde un punto de vista erróneo. Los eventos OnChange u OnExit, aunque los puedes usar, son más que nada para Edits normales.

Para validaciones de campos agrega éstos en el editor de campos de tu DataSet y en el que te interese usa su evento OnValidate donde compruebas su validez. Si no es válido lanzas una excepción o usas abort y con esto se impedirá que cambie el foco a otro control. La ventaja es que no importa cuántos controles uses para editar el campo, siempre funcionará igual en todos ellos.

// Saludos

gluglu 17-01-2005 17:35:33

Gracias Roman,

Eso era precisamente lo que andaba buscando : donde validar el campo introducido.

Mi código utilizado es el siguiente :
Código Delphi [-]
procedure TMaster.IBQuery1CAMPO1Validate(Sender: TField);
begin
   IBQueryCheck.SQL.Clear;
   IBQueryCheck.SQL.Add('Select * from TABLA1');
   IBQueryCheck.SQL.Add('where CAMPO1 = ');
   If DBEdit1.Text = '' then
     IBQueryCheck.SQL.Add('-999999')
   else
     IBQueryCheck.SQL.Add(DBEdit1.Text);
   IBQueryCheck.SQL.Add('and CAMPO2 = ');
   If DBEdit2.Text = '' then
     IBQueryCheck.SQL.Add('-999999')
   else
     IBQueryCheck.SQL.Add(DBEDit2.Text);
   IBQueryCheck.Open;
   If IBQueryCheck.Eof then abort;
end;

Espero que esto sea lo correcto. Estoy por supuesto abierto a cualquier recomendación mejor.

Saludos


La franja horaria es GMT +2. Ahora son las 22:39:25.

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