Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   ADO-Control de datos ingresados (https://www.clubdelphi.com/foros/showthread.php?t=2665)

hgiacobone 01-08-2003 15:33:01

ADO-Control de datos ingresados
 
Buenas...
Segurmente muchos se han encontrado con el problema de verificar si el usuario ha completado cada uno de los campos en un formulario de Alta o Modificacion. Claro, si son menos de una docena es facil poner unos cuantos IF y listo, pero si hblamos de unas veintenas... estamos complicados.

Existe algún método, función o artilugio que por ejemplo muestre la excepción "Ud. no completó el campo XXXX" indistintamente de cual de los cientos de campos sea?

__marcsc 01-08-2003 15:59:19

Hola,

pues lo que podrías hacer sería escribir un evento OnValidate genérico y asignarlo a todos los campos estáticos en tiempo de diseño.

Algo así:

Código:


procedure TDataModule1.ValidacionCampo(Sender: TField);
begin
  if Sender.IsNull then
    raise Exception.Create('Error. El campo ' + Sender.DisplayCaption + ' debe tener algún valor');
end;

Saludos!

guillotmarc 01-08-2003 18:09:54

Hola

Otra posible solución. Defines los campos como no nulos en la base de datos (es decir que no se pueden dejar en blanco), así si intentan grabar un registro con esos campos en blanco saltará un error. Entonces solo tienes que interceptar el error.

try
DataSet.Post;
except
ShowMessage('Ha dejado un campo en blanco');
end;

Saludos.

__marcsc 01-08-2003 18:19:58

Ciertamente la solución de Marc Guillot es más elegante, y de hecho es la que te recomiendo que utilices si puedes. Lo que pasa que la que yo te he puesto es algo más flexible porqué no siempre tendrás permiso para tocar la BD, o a lo mejor interesa que desde cierta aplicación existan estas reglas pero en otra no.

(En el momento de escribir la primera solución no se me ha ocurrido la opción de Marc :p :o)

Saludos.

hgiacobone 01-08-2003 19:50:27

Gracias muchachos...
Prefiero la solucion de MARCSC, me parece más adecuada para este caso.

La solucion de Guillot...
Código:

try
DataSet.Post;
except
ShowMessage('Ha dejado un campo en blanco');
end;

... puede que se lance por otro tipo de error, no necesariamente un campo vacio, y el mensaje seria inoportuno. Creo, yo.

__marcsc 01-08-2003 20:21:02

Hola,

yo pienso que podrías utilizar la solución de Marc Guillot, lo único que tendrias que hacer sería descernir dentro del except de que tipo de excepción se trata

Código:


try
  DataSet.Post;
except
  on ExcepcionCampoNulo do 
  ShowMessage('Ha dejado un campo en blanco')
  on OtroTipoDeExcepcion do
    //lo que sea
end;

Saludos!

CORBATIN 04-08-2003 15:27:50

Saludos a todos, al hilo de lo que estais comentando, resulta que me estoy intentado hacer una unit para recoger los errores del BDE para hacer algo así:

try
table1.post;
except
errores(codigo);
end;
o bien en el beforePostError de la tabla.

Pero tengo un problema y es que no tengo ni idea de donde sacar ese posible código de error.

Hasta ahora todo lo que he mirado solo me da datos sobre el mensaje de texto pero no hay nada sobre un código al que puedan pertenecer dichos mensajes.

Si alguién me puede dar una pista sobre este tema o algo que ya haya implementando estaría muy agradecido, saludos.

guillotmarc 04-08-2003 16:32:33

Hola.

Recuerda que estás trabajando con ADO y no con BDE, por lo que los códigos de error los tienes que recoger de ADO, en concreto del objeto ADOConnection al que está conectado la consulta que ha provocado el fallo.

ADOConnection.Errors[0].Number

Saludos.

CORBATIN 04-08-2003 17:12:00

Es cierto, no me había dado cuenta, me pregunta iba dirigida hacía la programación con el BDE, gracias.


La franja horaria es GMT +2. Ahora son las 21:42:11.

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