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 Buscar Temas de Hoy Marcar Foros Como Leídos

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: 22
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: 29
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: 29
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


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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 16:58:37.


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