PDA

Ver la Versión Completa : Ayuda con campos obligatorios


daragor
03-10-2012, 22:20:52
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:

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)


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
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
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:
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
[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.


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

Leopard2
07-10-2012, 21:15:24
Tienes varias opciones, la más simple es la típica:

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

Message : "Te olvidaste del cierre parentesis" :D:p
Saludos

Casimiro Notevi
07-10-2012, 21:30:26
Message : "Te olvidaste del cierre parentesis" :D:pSaludos

Lo he hecho para ponerte a prueba ;)...:D