Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 10-10-2006
[FGarcia] FGarcia is offline
Miembro Premium
 
Registrado: sep 2005
Ubicación: Cordoba, Veracruz, México
Posts: 1.123
Poder: 20
FGarcia Va por buen camino
Un mensaje de error

Hola! Nuevamente molestando por aqui, resulta que añadi una linea a un archivo ini donde guardo unos datos de configuracion y al salvar esos cambio me aparece este mensaje de error:

---------------------------
Debugger Exception Notification
---------------------------
Project WinTrapp.exe raised exception class EAccessViolation with message 'Access violation at address 00000000. Read of address 00000000'. Process stopped. Use Step or Run to continue.
---------------------------
OK Help
---------------------------

Este mensaje no me aparecia anteriormente, esto fue solo al añadirle la linea

WriteString('Seguridad', 'Clave', newPass);

al procedimiento de guardar el archivo ini. Lo interesante del asunto es que si me realiza los cambios solicitados, solo es ese mensaje de error el que me trae de cabeza. Agradesco su atencion.
Responder Con Cita
  #2  
Antiguo 10-10-2006
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Pues es extraño, porque la instrucción que añades no parece acceder a ningún objeto (salvo a propio "TIni", puesto que "WriteString" es un método de esta clase) y, por otro lado, la excepción que se produce está relacionada con eso: se accede a un objeto sin instanciar o ya liberado.

Tal vez si pusieras algo más de código, un poco de antes y poco de después...

En todo caso,... es extraño que sóla añadir esa instrucción cause ningún problema... algo más tiene que haber por ahí...
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #3  
Antiguo 10-10-2006
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.278
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Intenta poner un trozo más grande de código, con esa línea no da muchas pistas. Normalmente ese error es debido a que estás utilizando un objeto que no se ha creado/inicializado correctamente o que ya se ha liberado.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #4  
Antiguo 10-10-2006
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 27
jachguate Va por buen camino
También te invito a poner un título mas adecuado a tus hilos. Podes imaginarte que sucedería si el 50% de los hilos de estos foros se titularan "Un mensaje de error"... esto sería un caos, y creo que aproximadamente el 50% de los hilos tratan sobre errores o problemas diversos.

Para una proxima oportunidad, un título como "Access violation al escribir en archivo ini" o "TIniFile.WriteString lanza Access violation" resultará mucho mas descriptivo.

No olvides que todos los hilos pasan a formar parte de la base de conocimiento del clubdelphi, y cuando se realizan búsquedas, los títulos adquieren mucha mayor importancia, como bien señala la guia de estilo.

Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #5  
Antiguo 11-10-2006
[FGarcia] FGarcia is offline
Miembro Premium
 
Registrado: sep 2005
Ubicación: Cordoba, Veracruz, México
Posts: 1.123
Poder: 20
FGarcia Va por buen camino
Hola! Gracias por responder, con respecto al titulo del mensaje mil disculpas pero no se me ocurrio otro (por cierto ¿se pueden editar los titulos?)

//EDITADO: Al parecer ya corregi el error aun estoy en pruebas.

Con respecto al problema pues si, me enfoque solo al hecho de haber insertado esa linea y de que ahi provenia el error. En realidad es una continuacion de este otro hilo .

Como menciono en el hilo anterior desde un elemento de menu creo un formulario que me pide una clave antes de acceder al formulario de configuracion. Eso pues ya lo resolvi y no me genera ningun problema.

Código Delphi [-]
procedure TForm1.Ajustes1Click(Sender: TObject);
var
Respuesta : integer;
begin
  modoPass := 1;
  frmCfg := TfrmCfg.Create(nil); //Formulario que pide clave de ingreso a
                                 //la configuracion
  Respuesta := frmCfg.ShowModal;
  if Respuesta = mrOK then //Si la clave de ingreso es correcta
    begin
    frmConfigura := TfrmConfigura.Create(nil); //Formulario de configuracion
      try
        frmConfigura.ShowModal;
      finally
        frmConfigura.Free;
      end;
    end;
  frmCFG.Close;
  frmCFG.Free;    //SI AQUI LIBERO EL FORMULARIO frmCFG no necesito liberarlo en ningun otro lado!!!!!
end;

Código Delphi [-]
procedure TfrmCfg.BitBtn1Click(Sender: TObject);
var
  K: string;
begin
  case modoPass of
    1: K := DatetoStr(Date) + 'CFG';  // dd/mm/yyyyCFG
                                      //Clave de acceso a Config.
    2: K := DateToStr(Date) + 'GLAF'; // dd/mm/yyyyGLAF
                                      //Clave de acceso tipo Backdoor o sea si
                                      //la pierden.
  end;
  if edit1.Text <> '' then
    begin
      if (Edit1.Text = K) or (edit1.text = Password) then
        begin
          frmCfg.ModalResult := mrOk;
          K := '';
        end
      else
        begin
          showmessage('¡Clave de acceso invalida!');
          Edit1.Text := '';
          Edit1.SetFocus ;
        end;
    end
  else
    begin
      ShowMessage('Debe ingresar una clave valida');
      Edit1.setfocus;
    end;
end;


De ahi decidi colocar otra contraseña a otro formulario para mantenimiento de la BD, no encontre razon para crear otro formulario de "login" y decidi usar el que ya habia probado, desde el mismo formulario de configuracion inserte tres CheckBox :

a) uno para crear la contraseña por primera vez. Este crea un nuevo formulario donde se ingresa la contraseña y se le asigna a una variable, la cual no se guarda hasta que se le hace click en el boton de ok del formulario de configuracion. Este paso funciona bien, no me genera ningun error.

Código Delphi [-]
//Establece la contraseña por primera vez
procedure TfrmConfigura.CheckBox19Click(Sender: TObject);
begin
  frmPass := TfrmPass.Create(nil);   //Este es el formulario para crear
                                     //la contraseña de mantenimiento
  try
    frmPass.ShowModal;
  finally
    frmPass.Free;
  end;
end;


Código Delphi [-]
procedure TfrmPass.BitBtn1Click(Sender: TObject);
var
  oldPass: string;
begin
  oldPass := Password;
  if Edit1.Text <> '' then
    begin
      if (Edit1.Text = Edit2.Text) or
                              (Edit1.Text = DateToStr(Date) + 'GLAF') then
        begin
          newPass := Edit1.Text ;
          Close;
        end
      else
        begin
          showmessage('No hay coincidencia. Verifique nuevamente');
          Edit1.SelLength ;
          Edit1.SetFocus ;
        end;
    end
  else
    begin
      showmessage('Ingrese al menos un caracter');
      Edit1.SetFocus;
    end;
end;


b) otro (checkbox) para cambiar la contraseña; desde aqui se vuelve a llamar al formulario de ingreso de la contraseña y se ejecuta el mismo procedimiento. Aqui si cuando cierro el formulario de configuracion me da el error ya mencionado.

Código Delphi [-]
//Cambia la contraseña. Primero se le pide que ingrese la contraseña de
//mantenimiento actual
procedure TfrmConfigura.CheckBox20Click(Sender: TObject);
var
  respuesta: integer;
begin
  modoPass := 2;
  frmCfg := TfrmCfg.Create(nil); //Este es el formulario de ingreso de
                                 //contraseña de mantenimiento QUE ES EL MISMO
                                 //que pide la clave de ingreso a configuracion
  Respuesta := frmCfg.ShowModal;
  if Respuesta = mrOK then   //Si la contraseña es correcta
    begin
    frmPass := TfrmPass.Create(nil); //Este es el formulario para crear
                                     //la contraseña de mantenimiento
      try
        frmPass.ShowModal;
      finally
        frmPass.Free;
      end;
    end;
  frmCFG.Close ;
  frmCFG.Free ;  //¡¡¡¡ESTO ESTA DE MAS!!!!!
end;


c) un checkbox mas para eliminar la contraseña;desde aqui se vuelve a llamar al formulario de ingreso de la contraseña si la contraseña es correcta solo coloca una variable tipo string en vacio. Aqui tambien me da problema.

Código Delphi [-]
//Borra la contraseña. Primero se le pide que ingrese la contraseña actual
procedure TfrmConfigura.CheckBox21Click(Sender: TObject);
var
  respuesta: integer;
begin
  modoPass := 2;
  frmCFG := TfrmCFG.Create(nil); //Este es el formulario de ingreso de
                                 //contraseña de mantenimiento QUE ES EL MISMO
                                 //que pide la clave de ingreso a configuracion
  Respuesta := frmCfg.ShowModal;
  if respuesta = mrOK then  //Si la contraseña es correcta
    newPass := '';
  frmCFG.Close ;
  frmCFG.Free ;   ///ESTO TAMBIEN
end;

Y para terminar cuando hago click en el boton de aceptar del formulario de configuracion se salvan los cambios en el archivo .ini

Código Delphi [-]
procedure TMDatos.SalvarConfig;
begin
  ConfigTCP := TIniFile.Create(RutaAPP + 'ordenCfg.ini');
  with ConfigTCP do
    begin
      try
       //son muchas cosas mas que se guardan hasta llegar a esta nueva linea
        WriteString('Seguridad', 'Clave', newPass);
      finally
        Free ;
      end;
    end;
end;

Mientras escribo esto una idea me da vueltas pero no logro aterrizarla aun. Se que fue mucho "rollo", "choro", "verbo", y como se diga en diversas latitudes donde se hable Español o Castellano (Cual es la correcta ). Se agradece su ayuda

/// Bueno por fin aterrizo la idea y parece que funciono. El codigo supongo que se puede hacer mas elegante lo seguire revisando. Se aceptan sugerencias

Última edición por FGarcia fecha: 11-10-2006 a las 02:19:11.
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
Mensaje de error BDE Lakecountry Conexión con bases de datos 10 19-07-2006 17:29:48
mensaje de error en paradox pipecato Varios 3 24-11-2005 18:51:03
Mensaje de error majosf Conexión con bases de datos 2 16-11-2005 20:25:46
Mensaje de error Luli Varios 3 31-10-2005 13:59:02
Mensaje de error Ana Tudela Conexión con bases de datos 1 14-09-2004 16:47:43


La franja horaria es GMT +2. Ahora son las 03:06: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