Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 23-05-2007
ilichhernandez ilichhernandez is offline
Miembro
 
Registrado: oct 2005
Posts: 277
Poder: 19
ilichhernandez Va por buen camino
Error en validacion

Estimados, tengo un error mientras intento validar por intermedio de recorres los componentes de mi formulario

La idea es recorrer los componentesw Edit y verificar los que tengan tag = 88, entonces esos componentes validarlos que tengan algo escrito.

Código Delphi [-]
Procedure Validar_edit();
var n : integer;
    form10 : TForm10;
    Componentes : TComponent;
Begin
    for n:= 0 to Form10.ComponentCount -1 do
        Begin
             Componentes := Form10.Components[n];
             If ((Componentes is Tedit) and (TEdit(Componentes).Tag = 88)) then
                 Begin
                    If TEdit(componentes).text = '' then
                        Begin
                           TEdit(componentes).color := clred;
                        end;
                 end;
        end;
Showmessage('Los campos en Rojo se deben revisar y completar');
end;

El error que me arroja dice lo siguiente Project1.exe raised exception class EAccessViolation with message "Access violation at address 004270FF in module "project1'.

Si alguien sabe de que se trata este error o ve algun error importante en mi codigo seria tan amable de decirme, gracias desde ya.

Atentamente
Ilich Hernandez.
__________________
[Lo que a veces es tan facil, a veces parece imposible]
Responder Con Cita
  #2  
Antiguo 23-05-2007
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
¿Dónde se carga form10?... Porque aparentemente se trata de una variable local, que nunca fue iniciada...
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #3  
Antiguo 23-05-2007
ilichhernandez ilichhernandez is offline
Miembro
 
Registrado: oct 2005
Posts: 277
Poder: 19
ilichhernandez Va por buen camino
Form10 es el formulario donde estoy trabajando..... necesito inicializarlo ??
__________________
[Lo que a veces es tan facil, a veces parece imposible]
Responder Con Cita
  #4  
Antiguo 23-05-2007
luisgutierrezb luisgutierrezb is offline
Miembro
 
Registrado: oct 2005
Ubicación: México
Posts: 925
Poder: 19
luisgutierrezb Va por buen camino
para mi que el error es esto:
(TEdit(Componentes).Tag = 88))

porque estas forzando a un componente a TEdit, en el mismo if donde revisas si es un TEdit, aqui mas bien se requieren 2 ifs, el primero para revisar si es TEdit y el segundo donde ya hagas el Cast
Responder Con Cita
  #5  
Antiguo 23-05-2007
ilichhernandez ilichhernandez is offline
Miembro
 
Registrado: oct 2005
Posts: 277
Poder: 19
ilichhernandez Va por buen camino
Voy a probar lo que me dices a ver si mejora esto.... gracias
__________________
[Lo que a veces es tan facil, a veces parece imposible]
Responder Con Cita
  #6  
Antiguo 24-05-2007
jacanche jacanche is offline
Miembro
 
Registrado: may 2003
Ubicación: Campeche,Campeche,Mexico
Posts: 137
Poder: 22
jacanche Va por buen camino
Como bien dice Delphi.com.ar, es un error por que estas queriendo acceder a las propiedades de un objeto que no ha sido inicializado o creado. Puedes usar la variable global de tu forma o asignarle a Form10 la variable global de tu forma o mejor aun, haz que validar_edit, sea un metodo del objeto forma para que tu codigo quede mas o menos asi.

Código Delphi [-]
Procedure TForm10.Validar_edit();
var n : integer;
    Componentes : TComponent;
Begin
    for n:= 0 to ComponentCount -1 do
        Begin
             Componentes := Components[n];
             If ((Componentes is Tedit) and (TEdit(Componentes).Tag = 88)) then
                 Begin
                    If TEdit(componentes).text = '' then
                        Begin
                           TEdit(componentes).color := clred;
                        end;
                 end;
        end;
Showmessage('Los campos en Rojo se deben revisar y completar');
end;
__________________
Saludos

Alfredo
Responder Con Cita
  #7  
Antiguo 24-05-2007
aprendiz2 aprendiz2 is offline
Miembro
 
Registrado: dic 2006
Posts: 70
Poder: 18
aprendiz2 Va por buen camino
Código Delphi [-]
Procedure Validar_edit();
var n : integer;
     form10 : TForm10;

    Componentes : TComponent;
Begin
    for n:= 0 to Form10.ComponentCount -1 do
Si Form10 es el formulario con el que estas trabajando,no necesitas volver a declararlo dentro de las VAR LOCALES a esteprocedimiento, ya que ocultas el verdadero Form10, que seguramenteesta definido mas arriba en tu programa. Prueba quitar la declaracion del Form10 de las VAR de esteprocedimiento... Saludos, ojala te sirva...
Responder Con Cita
  #8  
Antiguo 24-05-2007
aprendiz2 aprendiz2 is offline
Miembro
 
Registrado: dic 2006
Posts: 70
Poder: 18
aprendiz2 Va por buen camino
Short Circuit Boolean Evaluation

Código Delphi [-]
 If ((Componentes is Tedit) and (TEdit(Componentes).Tag = 88)) then


Tambien es bueno asegurarse que la configuracion del compilador tenga la variable ShortCirtcuit Boolean Evaluation en TRUE, para que no de problemas evaluaciones como la de arriba. ( Si lo pones en falso, la misma pregunta con Componentes que no son TEdit podria dar problemas impredecibles..., en la parte que sigue al AND, y el debugger no te ayudaria mucho en detectarlo ). Para mi es mejor no confiar en el ShortCircuit boolean evaluation, y escribir de forma segura )

Quizas mas seguro poner..

Código Delphi [-]
if Componentes is TEdit then
     if TEdit( Componentes ).tag = 88 then

parece lo mismo... pero no lo es... !! ( estando el ShortCirtuit en false o true, con esta forma de preguntar no hay ningun problema ).

Saludos !! Espero le sirva a alguien !
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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Error en Acces CHECK validacion JuanHC Tablas planas 0 07-03-2007 20:07:17
Validacion spaike Varios 2 19-04-2006 19:56:12
validacion halifax Tablas planas 7 06-02-2005 23:25:53
Validacion Carlex Conexión con bases de datos 1 08-09-2004 23:53:41
Validación C.I.F. Kafu Varios 2 23-05-2003 19:09:29


La franja horaria es GMT +2. Ahora son las 21:00:51.


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