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 01-08-2003
Avatar de hgiacobone
hgiacobone hgiacobone is offline
Miembro
 
Registrado: may 2003
Ubicación: La Plata, Bs. As., Argentina
Posts: 165
Poder: 22
hgiacobone Va por buen camino
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?
__________________
Gracias de antemano por vuestra ayuda.
·.:*:.·Yako·.:*:.·
Responder Con Cita
  #2  
Antiguo 01-08-2003
Avatar de __marcsc
__marcsc __marcsc is offline
Miembro
 
Registrado: may 2003
Ubicación: Girona
Posts: 577
Poder: 22
__marcsc Va por buen camino
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!
Responder Con Cita
  #3  
Antiguo 01-08-2003
Avatar de guillotmarc
guillotmarc guillotmarc is offline
Miembro
 
Registrado: may 2003
Ubicación: Huelva
Posts: 2.638
Poder: 24
guillotmarc Va por buen camino
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.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no).
Responder Con Cita
  #4  
Antiguo 01-08-2003
Avatar de __marcsc
__marcsc __marcsc is offline
Miembro
 
Registrado: may 2003
Ubicación: Girona
Posts: 577
Poder: 22
__marcsc Va por buen camino
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 )

Saludos.
Responder Con Cita
  #5  
Antiguo 01-08-2003
Avatar de hgiacobone
hgiacobone hgiacobone is offline
Miembro
 
Registrado: may 2003
Ubicación: La Plata, Bs. As., Argentina
Posts: 165
Poder: 22
hgiacobone Va por buen camino
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.
__________________
Gracias de antemano por vuestra ayuda.
·.:*:.·Yako·.:*:.·
Responder Con Cita
  #6  
Antiguo 01-08-2003
Avatar de __marcsc
__marcsc __marcsc is offline
Miembro
 
Registrado: may 2003
Ubicación: Girona
Posts: 577
Poder: 22
__marcsc Va por buen camino
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!
Responder Con Cita
  #7  
Antiguo 04-08-2003
CORBATIN CORBATIN is offline
Miembro
 
Registrado: may 2003
Ubicación: España
Posts: 131
Poder: 21
CORBATIN Va por buen camino
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.
__________________
No hay vientos favorables para quién no conoce su rumbo.
Responder Con Cita
  #8  
Antiguo 04-08-2003
Avatar de guillotmarc
guillotmarc guillotmarc is offline
Miembro
 
Registrado: may 2003
Ubicación: Huelva
Posts: 2.638
Poder: 24
guillotmarc Va por buen camino
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.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no).
Responder Con Cita
  #9  
Antiguo 04-08-2003
CORBATIN CORBATIN is offline
Miembro
 
Registrado: may 2003
Ubicación: España
Posts: 131
Poder: 21
CORBATIN Va por buen camino
Es cierto, no me había dado cuenta, me pregunta iba dirigida hacía la programación con el BDE, gracias.
__________________
No hay vientos favorables para quién no conoce su rumbo.
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 10:08:18.


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