Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 25-11-2005
Mathom Mathom is offline
Miembro
 
Registrado: nov 2005
Posts: 72
Poder: 19
Mathom Va por buen camino
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
Responder Con Cita
  #2  
Antiguo 25-11-2005
jlcasih jlcasih is offline
Miembro
 
Registrado: may 2003
Ubicación: Argentina
Posts: 54
Poder: 21
jlcasih Va por buen camino
Proba con: Tabla.FieldByName('campo').IsNull
Saludos.
__________________
Cordoba-Argentina
Responder Con Cita
  #3  
Antiguo 25-11-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
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.
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #4  
Antiguo 25-11-2005
Mathom Mathom is offline
Miembro
 
Registrado: nov 2005
Posts: 72
Poder: 19
Mathom Va por buen camino
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.
Responder Con Cita
  #5  
Antiguo 26-11-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
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
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 13:59:40.


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
Copyright 1996-2007 Club Delphi