Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Lazarus, FreePascal, Kylix, etc. (https://www.clubdelphi.com/foros/forumdisplay.php?f=14)
-   -   Ayuda con campos obligatorios (https://www.clubdelphi.com/foros/showthread.php?t=81034)

daragor 03-10-2012 22:20:52

Ayuda con campos obligatorios
 
Hola compañeros, recurro nuevamente a sus conocimientos y buena voluntad.. para hacer la consulta
Como podria controlar que se hayan ingresado los datos en 3 campos obligatorios antes de hacer un INSERT...??
Alguna funcion o procedimiento que haga esta control? soy novato en este entorno y necesito conocer herramientas, ya hice la busqueda pertienente pero no logro dar con lo que necesito, muchas gracias!

Ej. En una pantalla de compras, antes de ingresar debo controlar que se haya ingresado
-Codigo
-Precio
-Cantidad
de un articulo...

Pd: por favor que un mod. corrija el titulo que dice "ogligatorios"

Casimiro Notevi 03-10-2012 22:39:29

Tienes varias opciones, la más simple es la típica:

Código Delphi [-]
if edCodigo.Text='' then
begin
  showmessage('Te olvidaste el código ;)';
  edCodigo.setfocus;
end;

daragor 03-10-2012 22:43:49

Si gracias casimiro!.. es la tipica pero se hace larga con un par de opciones mas que necesito y son 3 o 4 cuatro campos..

Casimiro Notevi 03-10-2012 22:49:46

O lo haces así o lo haces en el beforepost del dataset, no hay otra.

newtron 04-10-2012 09:52:28

Bueno, si tienes muchos edits podrías recorrerlos y comprobar si están rellenos, algo parecido a esto en el procedimiento que uses antes de grabar los datos... (escrito en el editor sin probar)

Código Delphi [-]
  for f:=0 to ComponentCount-1 do begin
    if Components[f] is TEdit then begin
       if (Components[f] as TEdit).Text = '' then begin
         ShowMessage('¡ATENCION! el siguiente valor no está indicado');
         (Components[f] as TEdit).setfocus;
         exit;
      end;
    end;
  end;

Si quieres que algunos puedan quedarse en blanco podrías usar el tag del componente para indicar cuales quieres que sean requeridos y cuales no (por ejemplo).

Saludos

fjcg02 04-10-2012 11:08:37

Perdonad por si digo alguna chorrada.

Esto no lo hace la propiedad Required de los campos persistentes ?

Saludos

Casimiro Notevi 04-10-2012 11:55:39

Creo recordar que el inconveniente de esa opción es que obliga a escribir algo para salir, aunque queramos abandonar la entrada de datos.
Se puede controlar, por supuesto.
Aunque las otras opciones también obligan a escribir :), y también hay que controlar que no se quiera teclear algo.

fjcg02 04-10-2012 12:03:14

Si es un dato obligatorio.... imagino que algo habrá que escribir, de eso se trata no? ;)

Saludos

ElDioni 04-10-2012 12:15:42

Por si te sirve la idea,

yo al principio controlaba la entrada de datos obligatorios con un showmessage como te indicaba Casimiro, pero cuando había muchos campos sin rellenar se volvía pesado por lo que ahora opto por pintar todos los campos que faltan de rojo y sacar un label de error que indica que faltan datos.

Saludos.

ecfisa 04-10-2012 14:00:51

Hola.

Normalmente resalto las etiquetas de los campos requeridos y hago uso de la propiedad Required de los mismos.

Pero hay veces que el ingreso de datos en un componente requiere que previamente se haya ingresado algo en uno o más anteriores. En este caso no queda más remedio que evaluarlo a mano y reportarlo al ingresar al componente dependiente. Tal como sugieren los mensajes #2 y #5 por ejemplo.

Saludos.

daragor 04-10-2012 23:26:51

Hola compañeros gracias por la ayuda, con esto tengo informacion suficiente.. lo que si el Required no lo veo en lazarus!!... existe?¿

Casimiro Notevi 05-10-2012 00:09:16

Cita:

Empezado por daragor (Mensaje 446392)
Hola compañeros gracias por la ayuda, con esto tengo informacion suficiente.. lo que si el Required no lo veo en lazarus!!... existe?¿

¿En qué parte estás mirando?

daragor 05-10-2012 00:29:06

En propiedades del TEdit

Casimiro Notevi 05-10-2012 01:31:46

En los campos del dataset.

newtron 05-10-2012 10:24:46

Cita:

Empezado por Casimiro Notevi (Mensaje 446404)
En los campos del dataset.

Hay algo que no me cuadra... en principio hablaba de los edits, no del dataset, por lo que me da la impresión de que quiere controlar el campo del edit antes de mandar al insert, ¿no?.

Casimiro Notevi 05-10-2012 11:08:33

Ahora que lo dices, el texto exacto es:
Cita:

Como podria controlar que se hayan ingresado los datos en 3 campos obligatorios antes de hacer un INSERT...??
Así que tienes razón, algo no cuadra.

daragor 05-10-2012 14:55:20

Si muchachos, todo el tiempo pense en controlar los datos desde el TEdit... no del dataset, y.. pregunte lo del required xq lo nombraron y no sabia donde estaba esa propiedad en lazarus.

Encontre un faRequired en los atributos de los campos del dataset.

[newtron], en el procedimiento que dejaste mas arriba, podrias explicarme o agregar como se usa el tab de los componentes q necesito sean obligatorios?

Casimiro Notevi 05-10-2012 15:42:55

Es que tu pregunta inicial es: "campos".
El edit no está relacionado con ningún campo, salvo que sea un dbedit.
O sea, que necesitamos que aclares lo que estás haciendo y lo que necesitas :)

newtron 05-10-2012 17:02:14

Cita:

Empezado por daragor (Mensaje 446432)
[newtron], en el procedimiento que dejaste mas arriba, podrias explicarme o agregar como se usa el tab de los componentes q necesito sean obligatorios?

No es el tab, es la propiedad que se llama tag del componente, es una propiedad que se deja para que puedas meter cualquier valor y preguntar después por él de forma que si por ejemplo pones en el tag del edit que quieras poner como obligatorio un 1 podrías poner éste código.

Código Delphi [-]
  for f:=0 to ComponentCount-1 do begin
     if Components[f] is TEdit then begin
        if ((Components[f] as TEdit).Text = '') and ((Components[f] as TEdit).Tag = 1) then begin
          ShowMessage('¡ATENCION! el siguiente valor no está indicado');
          (Components[f] as TEdit).setfocus;
          exit;
       end;
     end;
  end;

Saludos

roman 05-10-2012 17:36:44

Una pequeña observación. Si ya comprobaste que Components[f] is un TEdit, ya no hace falta usar el operador as, que es un pelín menos eficiente que el moldeo directo TEdit(Components[f]).

// Saludos


La franja horaria es GMT +2. Ahora son las 12:47:42.

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