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)
-   -   Validación de campos (https://www.clubdelphi.com/foros/showthread.php?t=27612)

Mathom 25-11-2005 13:55:31

Validación de campos
 
Hola a todos, tengo una pequeña duda que seguro ya habéis solucionado en el foro pero no consigo encontrar lo que busco así que os lo comento y si alguien me puede ayudar o indicar en que post está la solución pues genial.

El tema es valiadar DBEdits de un formulario para la inserción de un nuevio artículo. He estado echando un vistazo y he llegado ha entender hasta que haces doble clic en table, obtienes los "fields" y en el evento OnValidate hay que poner la condición, correcto??

Bien, ahora quiero que algunos de los DBEdits no puedan quedar en blanco al pulsar "aceptar" y además que la columna Cod_articulo no se pueda repetir.

Según he estado mirando debería ser una cosa como la que indico a continuación, no??

Código:

procedure TDataModule7.Table1Cod_depValidate(Sender: TField);
 begin
 if Table1.FieldByName('Cod_dep') is null then
 showmensaje('falta cósdigo de articulo por insertar');
 end;


Pero me indica que null Undeclares Identifier "null".

Por lo que respecta a que el campo no esté repetido, se utiliza el Locate o Find en el OnValidate?

Si me podéis decir que estoy haciendo mal, algún enlace o código (mejor, incluso), os lo agradecería mucho.

Un saludo a todos:p

jlcasih 25-11-2005 16:03:46

Proba con: Tabla.FieldByName('campo').IsNull
Saludos.

Lepe 25-11-2005 17:24:58

En mi humilde opinión deberías resolver todos esos problemas del lado del motor de BBDD.

- Si el código debe ser único, pues clave primaria de la tabla, o bien crea un índice único sobre ese campo en la base de datos. Al crear un duplicado, el motor de BBDD te dará una excepción, la capturas y muestras mensajito al usuario si corresponde.

- Para que no permita campos nulos, añade en la BBDD que no sea nulo, y caso idéntico al anterior.

De esta forma, te olvidas de usar Find o Locate, tu motor de BBDD hará eso por tí de forma más eficiente (a través de índices o restricciones).

Si necesitas más info, dinos qué BBDD estas utilizando y qué componentes de acceso, BDE, ADO, etc.

saludos y espero te sirva.

Mathom 25-11-2005 18:03:57

Como respuesta a jlcasih...
Cita:

Tabla.FieldByName('campo').IsNull
Si, exacto...la orden es...
Código:

if table1.fieldbyname('Cod_dep').isnull then(
Me lo ha compilado pero me sigue dejando crear un departamento nuevo en el que las celdas estén vacias. El códigio en el OnValidate es el siguiente. A ver si alguien sabe que es lo que está mal ya que no le veo dificultad pero no marcha...

Código:

procedure TDataModule7.Table1Cod_depValidate(Sender: TField);
 begin
 if Table1.FieldByName('Cod_dep').IsNull then
 ShowMessage ('Debe rellenar la casilla del código del departamento');
 end;

a no ser que falte poner algo más en algún otro sitio pero según he mirado en otros posts, esto no es necesario, no??

A Lepe:

Cita:

Si necesitas más info, dinos qué BBDD estas utilizando y qué componentes de acceso, BDE, ADO, etc.
Pues la verdad si, y no sabes como te lo agradezco, ya que por lo visto así es mucho más rápido y según posts más eficiente. Utilizo BDE y las tablas son .db (paradox). Y pregunto, la excepción supongo que se pondría en el formulario donde se crea el nuevo, no?? pero, en que evento?? porque al pasar de un DBEdit a otro, lel grid ya muestra el dato. Me explico??

Toda ayuda es de agradecer.

Lepe 26-11-2005 18:21:41

tratandose de Paradox, en el evento BeforePost, podrías hacer algo así:

Código Delphi [-]
procedure TForm1.Tabla1BeforePost(...);
var i:integer;
      Msg:String;
begin
  Msg := EmptyStr;
  for i:=0 to tabla1.FieldCount-1 do
  with Tabla1.Fields[i] do
  begin
     if IsNull then 
         Msg:= Msg + #10#13+ '- ' + DisplayName;
  end;
  if Msg <> EmptyStr then
    raise Exception.Create('Los siguientes campos'+ 
    'deben ser introducidos'+ #10#13 + Msg;
end;
Para el usuario final, es bastante tedioso ver campo por campo un mensaje; con esto lo haces de un solo mensaje.

En cuanto a tu mensaje anterior, faltaría esto:
Código Delphi [-]
 if Table1.FieldByName('Cod_dep').IsNull then
begin
 ShowMessage ('Debe rellenar la casilla del código del departamento');
 Abort;

Abort produce una excepción silenciosa, por tanto, no se graba el registro actual y deja el registro en modo de inserción. En el método que yo propongo, simplemente creo y lanzo una excepción, que actua igual que Abort, salvo que muestra un mensaje al usuario

saludos


La franja horaria es GMT +2. Ahora son las 05:47:45.

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