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 22-09-2011
asdbernardo asdbernardo is offline
Miembro
NULL
 
Registrado: sep 2011
Posts: 37
Poder: 0
asdbernardo Va por buen camino
Exclamation Formularios Violation Access

Buenas tardes, foristas!

Ante todo un cordial saludo a todos..

me estoy iniciando en el delphi ( vengo de visual basic ) y tengo varias dudas que se me vienen presentando en mi proyecto, estoy haciendo un programa cliente servidor, en mysql y delphi 2010, pero tengo varios problemitas en cuanto a los Violation access, he estado leyendo y a lo mejor puede ser porque no me va muy bien con eso de que hay que liberar y destruir los form .. entonces a ver
tengo 3 pantallas, una es un login, la siguiente es principal y la siguiente es agencia, seria algo asi:

Login
Principal > aca tiene un mainmenu donde al darle click a Agencia se despliegan otro menus y en ese menu esta un menuitem que selecciona el formulario Agencia y lo muestro con un .show y lo declaro en uses Agencia.

pero me salta un error de violation access y lo he probado en diferentes maquinas con delphi 2010 y sigue saltando ese error, posteare el codigo para que lo vean

source project
Código:
program Project1;

uses
  Forms,
  Controls,
  Login in 'Login.pas' {frmLogin},
  Principal in 'Principal.pas' {frmPrincipal},
  Agencia in 'Agencia.pas' {frmAgencia};

{$R *.res}
    var
    Respuesta: integer;
begin

 Application.Initialize;
  Application.Title := 'WB System';
  frmLogin := TfrmLogin.Create(Application);
    frmprincipal := Tfrmprincipal.Create(Application);
 try
    Respuesta := frmLogin.ShowModal;
      if Respuesta = mrOK then
        begin
          Application.CreateForm(TfrmPrincipal, frmPrincipal);
  Application.CreateForm(TfrmAgencia, frmAgencia);
  Application.CreateForm(TfrmLogin, frmLogin);
  Application.Run;
        end;
  finally
    frmLogin.Free;
  end;
end.
code login.

Código:
unit Login;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Mask, DBCtrls, UniProvider, MySQLUniProvider, DB, DBAccess,
  Uni, MemDS;

type
  TfrmLogin = class(TForm)
    UniConnection1: TUniConnection;
    UniTable1: TUniTable;
    UniDataSource1: TUniDataSource;
    MySQLUniProvider1: TMySQLUniProvider;
    Button1: TButton;
    qry: TUniQuery;
    txtusu: TEdit;
    txtpass: TEdit;
    qryuser_login: TStringField;
    qryuser_password: TStringField;
    Button2: TButton;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    lblintentos: TLabel;
    lblverifique: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure txtusuKeyPress(Sender: TObject; var Key: Char);
    procedure txtpassKeyPress(Sender: TObject; var Key: Char);

  private
    { Private declarations }

  public
    { Public declarations }

  end;

var
  frmLogin: TfrmLogin;
    nintentos: integer;
    veces: integer;
implementation

uses Principal;

{$R *.dfm}

procedure TfrmLogin.Button1Click(Sender: TObject);
begin
qry.SQL.Clear;
qry.SQL.Add(' select user_login');
qry.SQL.Add(' , user_Password');
qry.SQL.Add(' from Login');
qry.SQL.Add(' where user_login = Upper(:UserLogin)');
qry.SQL.Add(' and ');
qry.SQL.Add(' user_password = (:UserPassword)');
qry.Params[0].Value := UpperCase(Trim(txtusu.Text));
qry.Params[1].Value := Trim(txtpass.Text);
qry.Open;

if qry.RecordCount > 0 then
            begin
          frmprincipal.Show;
          frmlogin.Hide;
            end
               else
    begin
      nIntentos := nIntentos + 1 ;       {Intentos del login}
      veces := 3;    {Veces limite de login}
      lblIntentos.Visible := true;
      lblIntentos.Caption := 'Intentos Restantes: ' + inttostr(veces-nIntentos);
       lblVerifique.Caption := 'Login Invalido, Verifique!';
      if (nIntentos < veces) then
        begin

           txtusu.Text := '';
           txtpass.Text :='';
           txtusu.SetFocus;
        end
        else if (nIntentos = veces) then
          begin
                    txtusu.Text := '';
           txtpass.Text :='';
           txtusu.SetFocus;
             frmLogin.ModalResult := mrCancel;

       Application.MessageBox( 'Maximo de Intentos, Sera notificado al Administrador',
  'Acceso denegado', MB_ICONSTOP );

             end;
            end;
end;


procedure TfrmLogin.Button2Click(Sender: TObject);
begin
close;
 end;




procedure TfrmLogin.txtpassKeyPress(Sender: TObject; var Key: Char);
begin
  if Key = #13 then                          { if it's an enter key }
   begin
       Key := #0;                                 { eat enter key }
       Perform(WM_NEXTDLGCTL, 0, 0);              { move to next control }
   end
end;

procedure TfrmLogin.txtusuKeyPress(Sender: TObject; var Key: Char);
begin
  if Key = #13 then                          { if it's an enter key }
   begin
       Key := #0;                                 { eat enter key }
       Perform(WM_NEXTDLGCTL, 0, 0);              { move to next control }
   end
end;

end.
y por ultimo el principal

Código:
unit Principal;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Menus, buttons , StdCtrls;

type
  TfrmPrincipal = class(TForm)
    MainMenu1: TMainMenu;
    Archivo1: TMenuItem;
    CerrarPrograma1: TMenuItem;
    Agencias1: TMenuItem;
    RegistrarAgencia1: TMenuItem;
    RegistrarUsuario1: TMenuItem;
    Loterias1: TMenuItem;
    RegistrarAgencia2: TMenuItem;
    ModificarAgencia1: TMenuItem;
    Borrar1: TMenuItem;
    Registrar1: TMenuItem;
    Modificar1: TMenuItem;
    Borrar2: TMenuItem;
    procedure CerrarPrograma1Click(Sender: TObject);
    procedure RegistrarAgencia2Click(Sender: TObject);

   private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  frmPrincipal: TfrmPrincipal;

implementation
          uses agencia;
      {$R *.dfm}


procedure TfrmPrincipal.CerrarPrograma1Click(Sender: TObject);
begin
 application.Terminate;
end;

procedure TfrmPrincipal.RegistrarAgencia2Click(Sender: TObject);
begin
frmagencia.Show;
end;

end.
y pues agencia no tengo nada programado aun porque no me lo muestra y estoy con eso del violation access xD

Código:
unit Agencia;

interface

uses StdCtrls,  Classes, Windows, Messages, SysUtils, Variants, Graphics, Forms,
  Dialogs, Controls;

type
  TfrmAgencia = class(TForm)
    lblModuloAgencias: TLabel;
    gbDatosAgencia: TGroupBox;
    edtnombreagencia: TEdit;
    edtresponsable: TEdit;
    lblnombreagencia: TLabel;
    lblresponsable: TLabel;
    edtnumeroagencia: TEdit;
    lblnroagencia: TLabel;
    gblimiteventas: TGroupBox;
    lblterminales: TLabel;
    lbltriples: TLabel;
    lblzodiacales: TLabel;
    edtterminales: TEdit;
    edttriples: TEdit;
    edtzodiacales: TEdit;
    btnaceptar: TButton;
    btncancelar: TButton;
    lblregistro: TLabel;

  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  frmAgencia: TfrmAgencia;

implementation

{$R *.dfm}
end.
el error que me marca de violation es:

Access Violation at address 004AFBB6 in module 'project1.exe'. Read of Address 00000384

si alguno me puede guiar sobre evitar estos access violation en cuando a la llamado de formularios me gustaria mucho! saludos

Y gracias por su atencion a mi post!
Responder Con Cita
  #2  
Antiguo 22-09-2011
Avatar de oscarac
[oscarac] oscarac is offline
Miembro Premium
 
Registrado: sep 2006
Ubicación: Lima - Perú
Posts: 2.010
Poder: 20
oscarac Va por buen camino
Tenemos a un converso jejeje
y en que linea te sale el error?
__________________
Dulce Regalo que Satanas manda para mi.....
Responder Con Cita
  #3  
Antiguo 22-09-2011
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
A mi esto no me suena:
Código Delphi [-]
 Application.Initialize;
  Application.Title := 'WB System';
  frmLogin := TfrmLogin.Create(Application);
    frmprincipal := Tfrmprincipal.Create(Application);
 try
    Respuesta := frmLogin.ShowModal;
      if Respuesta = mrOK then
        begin
          Application.CreateForm(TfrmPrincipal, frmPrincipal);
  Application.CreateForm(TfrmAgencia, frmAgencia);
  Application.CreateForm(TfrmLogin, frmLogin);
  Application.Run;
        end;
  finally
    frmLogin.Free;
  end;
Saludos
__________________
Siempre Novato
Responder Con Cita
  #4  
Antiguo 22-09-2011
asdbernardo asdbernardo is offline
Miembro
NULL
 
Registrado: sep 2011
Posts: 37
Poder: 0
asdbernardo Va por buen camino
Eso es lo extraño no me marca error en el ninguna linea, si le doy en pause me marca es el CPU, es esto

ntdll.DbgUiRemoteBreakin:
7C96077B 6A08 push $08

de resto solo me marca ese access violation.
Responder Con Cita
  #5  
Antiguo 22-09-2011
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Corre o de plano no corre ni de principio ?.
Sigo con lo mismo, no me suena crear dos veces los formularios, es evidente que esta mal.
Saludos
__________________
Siempre Novato
Responder Con Cita
  #6  
Antiguo 22-09-2011
asdbernardo asdbernardo is offline
Miembro
NULL
 
Registrado: sep 2011
Posts: 37
Poder: 0
asdbernardo Va por buen camino
Si corre, hasta el form principal, todo marcha bien! cuando intento llamar al formulario Agencia, me genera ese violation access
Responder Con Cita
  #7  
Antiguo 22-09-2011
asdbernardo asdbernardo is offline
Miembro
NULL
 
Registrado: sep 2011
Posts: 37
Poder: 0
asdbernardo Va por buen camino
Cita:
Empezado por Caral Ver Mensaje
Hola
A mi esto no me suena:
Código Delphi [-]
 Application.Initialize;
  Application.Title := 'WB System';
  frmLogin := TfrmLogin.Create(Application);
    frmprincipal := Tfrmprincipal.Create(Application);
 try
    Respuesta := frmLogin.ShowModal;
      if Respuesta = mrOK then
        begin
          Application.CreateForm(TfrmPrincipal, frmPrincipal);
  Application.CreateForm(TfrmAgencia, frmAgencia);
  Application.CreateForm(TfrmLogin, frmLogin);
  Application.Run;
        end;
  finally
    frmLogin.Free;
  end;
Saludos
Con respecto a esto que dices tienes razon, me puse a acomodar y dejar sin ese if de comprobacion y todo marcho bien me abrio el form agencia, quedo asi; pero se ejecutan todos los formularios ese if era como una validacion.. pero la verdad no se porque no anda bien.

Código:
program Project1;

uses
  Forms,
  Controls,
  Login in 'Login.pas' {frmLogin},
  Principal in 'Principal.pas' {frmPrincipal},
  Agencia in 'Agencia.pas' {frmAgencia};

{$R *.res}
    var
    Respuesta: integer;
begin
  Application.Initialize;
  Application.Title := 'WB System';
  frmLogin := TfrmLogin.Create(Application);
  frmprincipal := Tfrmprincipal.Create(Application);
  frmagencia := Tfrmagencia.Create(Application);
  frmagencia.Hide;
  frmlogin.ShowModal;
   {try
    Respuesta := frmLogin.ShowModal;
      if Respuesta = mrOK then
        begin
  Application.Run;
        end;
  finally
    frmLogin.Free;
  end;    }
end.
Responder Con Cita
  #8  
Antiguo 22-09-2011
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Bueno segun lo que veo creas los forms siempre y cuando el form login sea ok, tal vez no se crea bien el form agenda, no lo se.
Me extraña mucho esta manera de hacer las cosas.
Haces un simple show a un form que se supone se ha creado.
De todos modos, no es la mejor forma de llamar a los forms, para mi.
Saludos
__________________
Siempre Novato
Responder Con Cita
  #9  
Antiguo 22-09-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.

Revisá que frmAgencia esté incluída en Available forms en: Project -> Options -> Auto-create Forms.

Si no es así cambiá esta línea:
Código Delphi [-]
  frmagencia.Show;
Por:
Código Delphi [-]
  with TFrmagencia.Create(Application) do Show;

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #10  
Antiguo 22-09-2011
asdbernardo asdbernardo is offline
Miembro
NULL
 
Registrado: sep 2011
Posts: 37
Poder: 0
asdbernardo Va por buen camino
Cita:
Empezado por Caral Ver Mensaje
Hola
Bueno segun lo que veo creas los forms siempre y cuando el form login sea ok, tal vez no se crea bien el form agenda, no lo se.
Me extraña mucho esta manera de hacer las cosas.
Haces un simple show a un form que se supone se ha creado.
De todos modos, no es la mejor forma de llamar a los forms, para mi.
Saludos
Gracias, estoy iniciandome en el delphi 2010, me agrada mucho.. por eso tenia dudas aparte recuerda vengo de Visual basic, que solamente con llamar el form.show(); lo trae sin mas.. pero ahora me gusta mas el delphi.. ya logre solventarlo muchas gracias por tu atencion y por el tiempo que le dedicaste al leer mi post.. Saludos.
Responder Con Cita
  #11  
Antiguo 22-09-2011
asdbernardo asdbernardo is offline
Miembro
NULL
 
Registrado: sep 2011
Posts: 37
Poder: 0
asdbernardo Va por buen camino
Cita:
Empezado por ecfisa Ver Mensaje
Hola.

Revisá que frmAgencia esté incluída en Available forms en: Project -> Options -> Auto-create Forms.

Si no es así cambiá esta línea:
Código Delphi [-]
  frmagencia.Show;
Por:
Código Delphi [-]
  with TFrmagencia.Create(Application) do Show;

Saludos.
Gracias amigo, lo solvente con eso! esa es la forma de llamar los formularios solo que como comente arriba vengo de otro compilador y me estoy adaptando.. Gracias por tu atencion a mis dudas.. pronto estare de nuevo por aca.. pero adelantare! con eso ya espero no me salte mas el problema de la violation access xD

Última edición por asdbernardo fecha: 22-09-2011 a las 19:04:34. Razón: me falto citar xD
Responder Con Cita
  #12  
Antiguo 22-09-2011
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
En delphi también, con solo un form.Show ya esta, siempre que lo tengas creado al iniciarse el programa.
Pero: Delphi da la opción de crearlo cuando uno desee, no necesariamente al inicio.
Esto lo que hace para que el programa corra mejor al iniciarse.
Saludos
__________________
Siempre Novato
Responder Con Cita
  #13  
Antiguo 26-09-2011
asdbernardo asdbernardo is offline
Miembro
NULL
 
Registrado: sep 2011
Posts: 37
Poder: 0
asdbernardo Va por buen camino
Cita:
Empezado por Caral Ver Mensaje
Hola
En delphi también, con solo un form.Show ya esta, siempre que lo tengas creado al iniciarse el programa.
Pero: Delphi da la opción de crearlo cuando uno desee, no necesariamente al inicio.
Esto lo que hace para que el programa corra mejor al iniciarse.
Saludos

Gracias caral, Ahora si ya me estoy familiarizando.. Ya estoy entiendiendo lo que es el delphi, ahora me toca aprender mas sobre las excepciones, los erroes con eso ... ya que tengo que saber controlar los errores .. pero aun no le llego, estoy con mi aplicacion en el login, sabes que estoy usando Unidac con delphi 2010, y tengo el componente uniconnection activado como true en la conexion para que cuando el login entre de una vez cargue la base de datos.. la cuestion esta que me sale Socketexception cuando digamos por razones ajenas se cae el servidor, o no se puede conectar.... y es por ese mismo problema salta el error socketexcepcion, pero no se como comprobarlo, activarlo en modo codigo, si hay conexion que proceda a colocarlo como true, sino lo hay solamente que muestre el login y me diga que no hay conexion pero la verdad ya tengo tiempo en eso.. y no consigo, he leido sobre el try/except/finally y aun no puedo controlarlo .. jeje si sabes de algo! me cuentas.. Saludos
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
Access Violation Alejo15x API de Windows 2 09-11-2010 02:36:04
access violation chona Varios 2 31-10-2006 01:36:04
Access Violation Carliviris Varios 5 12-05-2006 19:21:45
access violation chilenauta Impresión 15 15-12-2004 19:45:51
Access violation Giasl Varios 6 07-05-2003 12:35:51


La franja horaria es GMT +2. Ahora son las 03:47:41.


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