Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Como realizar un logout o Desconectar usuario (https://www.clubdelphi.com/foros/showthread.php?t=79744)

steelha 07-08-2012 00:11:09

Como realizar un logout o Desconectar usuario
 
Hola, el siguiente hilo es para ver como me pueden ayudar hacer que un usuario ya logueado pueda desconectarse y presentar de nuevo la pantalla de login la cual se ejecuta al inicio de la aplicación, en un hilo anterior ya me habían ayudado con la parte del login (muchas gracias por todo). Uso delphi 7, y utilizo los ADO components para conexion con Access.

roman 07-08-2012 02:37:23

Bueno, no sé cómo hayas hecho para el Login, y, a decir verdad, no es muy buena idea presuponer que todos nos vamos a acordar de tus mensajes anteriores, pues no leemos todos.

Algo que podría funcionar es que dejes tu archivo DPR parecido a este:

Código Delphi [-]
program Project1;

uses
  Controls, Forms,
  Unit1 in 'Unit1.pas' {frmMain},
  Unit2 in 'Unit2.pas' {frmLogin};

{$R *.res}

begin
  Application.Initialize;

  frmLogin := TfrmLogin.Create(Application);

  while frmLogin.ShowModal = mrOk do
  begin
    Application.CreateForm(TfrmMain, frmMain);
    frmMain.ShowModal;
  end;

  //Application.Run;
end.

Aparentemente funciona, pero no sé si pueda presentar algún problema. Este esquema presupone que tu formulario de Login es el que se encarga de corroborar que los datos que proporciona el usuario son correctos.

steelha 07-08-2012 02:56:36

Gracias y disculpa por no especificar aca dejo los codigos

source:

Código Delphi [-]
program prIglesia;

uses
  Forms,
  Windows,
  Controls,
  uPrincipal in 'uPrincipal.pas' {frmprincipal},
  ufrmlogin in 'ufrmlogin.pas' {frmLogin},
  ufrmstatus in 'ufrmstatus.pas' {frmStatus},
  uDataModulo in 'uDataModulo.pas' {dmConcilio: TDataModule},
  ufrmiglesia in 'ufrmiglesia.pas' {frmiglesia},
  ufrmcargos in 'ufrmcargos.pas' {frmcargos},
  ufrmmiembros in 'ufrmmiembros.pas' {frmmiembros},
  ufrmconsultaestatus in 'ufrmconsultaestatus.pas' {frmconsultaestatus},
  ufrmconsultaiglesias in 'ufrmconsultaiglesias.pas' {frmconsultaiglesia},
  ufrmconsultamiembros in 'ufrmconsultamiembros.pas' {frmconsultamiembro},
  ufrmRegistrar in '..\..\Generador Seriales\Activador\ufrmRegistrar.pas' {frmRegistrar},
  ufrmUsuarios in 'ufrmUsuarios.pas' {frmusuarios};

{$R *.res}

begin
  Application.Initialize;

  frmRegistrar := TfrmRegistrar.Create(Application);
  if frmRegistrar.mxProtector.IsRegistered = False then
    frmRegistrar.ShowModal;

  if frmRegistrar.mxProtector.IsRegistered  then
  begin
    frmLogin := TfrmLogin.Create(Application);
    frmLogin.ShowModal;
    if mrOk = 1 then
    begin
      frmLogin.Hide; // o LoginForm.Hide
      Application.CreateForm(Tfrmprincipal, frmprincipal);
      Application.CreateForm(TfrmRegistrar, frmRegistrar);
      Application.CreateForm(TfrmStatus, frmStatus);
      Application.CreateForm(TdmConcilio, dmConcilio);
      Application.CreateForm(Tfrmiglesia, frmiglesia);
      Application.CreateForm(Tfrmcargos, frmcargos);
      Application.CreateForm(Tfrmmiembros, frmmiembros);
      Application.CreateForm(Tfrmconsultaestatus, frmconsultaestatus);
      Application.CreateForm(Tfrmconsultaiglesia, frmconsultaiglesia);
      Application.CreateForm(Tfrmconsultamiembro, frmconsultamiembro);
      Application.CreateForm(Tfrmusuarios, frmusuarios);
    end;
  end;
  Application.Run;
end.

Principal:
Código Delphi [-]
unit uPrincipal;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Menus, ComCtrls, jpeg, ExtCtrls, IniFiles;

type
  Tfrmprincipal = class(TForm)
    imgfondo: TImage;
    StatusBar1: TStatusBar;
    MainMenu1: TMainMenu;
    Mantenimiento1: TMenuItem;
    I1: TMenuItem;
    N1Status1: TMenuItem;
    N3Cargos1: TMenuItem;
    N4Miembros1: TMenuItem;
    Consultas1: TMenuItem;
    N1EstatusCargos1: TMenuItem;
    N2Iglesias1: TMenuItem;
    N3Miembros1: TMenuItem;
    N1: TMenuItem;
    N0CuentasdeUsuarios1: TMenuItem;
    Salir1: TMenuItem;
    CerrarSeccin1: TMenuItem;
    procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
    procedure N1Status1Click(Sender: TObject);
    procedure I1Click(Sender: TObject);
    procedure N3Cargos1Click(Sender: TObject);
    procedure N4Miembros1Click(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure N1EstatusCargos1Click(Sender: TObject);
    procedure N2Iglesias1Click(Sender: TObject);
    procedure N3Miembros1Click(Sender: TObject);
    procedure N0CuentasdeUsuarios1Click(Sender: TObject);
    procedure Salir1Click(Sender: TObject);
    procedure CerrarSeccin1Click(Sender: TObject);
  private
    { Private declarations }
    nivel_usuario : Integer;
    logueado      : Integer;
  public
    { Public declarations }
  end;

var
  frmprincipal: Tfrmprincipal;

implementation

uses ufrmlogin,ufrmstatus,ufrmiglesia, ufrmcargos,uDataModulo,
  ufrmmiembros, ufrmconsultaestatus, ufrmconsultaiglesias,
  ufrmconsultamiembros, ufrmUsuarios;

{$R *.dfm}

procedure Tfrmprincipal.FormCloseQuery(Sender: TObject;
  var CanClose: Boolean);
begin
      dmConcilio.conConcilio.Close;
      dmConcilio.conConcilio.Free;
end;

procedure Tfrmprincipal.N1Status1Click(Sender: TObject);
begin
    frmstatus.ShowModal;
end;

procedure Tfrmprincipal.I1Click(Sender: TObject);
begin
  frmiglesia.ShowModal;
end;

procedure Tfrmprincipal.N3Cargos1Click(Sender: TObject);
begin
  frmcargos.Showmodal;
end;

procedure Tfrmprincipal.N4Miembros1Click(Sender: TObject);
begin
  frmmiembros.Showmodal;
end;

procedure Tfrmprincipal.FormShow(Sender: TObject);
begin
  imgfondo.Picture.LoadFromFile(ExtractFilePath(Application.ExeName)+'\imagen\fondo.jpg');
  nivel_usuario := frmLogin.nivel;

  N0CuentasdeUsuarios1.Enabled := False;

  case nivel_usuario of
    0:begin
          Mantenimiento1.Enabled := False;
          Consultas1.Enabled     := False;
      end;
    1..4:begin
          N1Status1.Enabled     := False;
          N3Cargos1.Enabled     := False;
          N4Miembros1.Enabled   := False;
          I1.Enabled            := False;
      end;
    5..8:begin
          N1Status1.Enabled     := True;
          N3Cargos1.Enabled     := True;
          N4Miembros1.Enabled   := True;
          I1.Enabled            := True;
      end;
    9:begin
          N0CuentasdeUsuarios1.Enabled := True;
      end;
  end;
  Salir1.Enabled  := True;
  logueado        := 0;
end;

procedure Tfrmprincipal.N1EstatusCargos1Click(Sender: TObject);
begin
  frmconsultaestatus.Showmodal;
end;

procedure Tfrmprincipal.N2Iglesias1Click(Sender: TObject);
begin
  frmconsultaiglesia.Showmodal;
end;

procedure Tfrmprincipal.N3Miembros1Click(Sender: TObject);
begin
  frmconsultamiembro.Showmodal;
end;

procedure Tfrmprincipal.N0CuentasdeUsuarios1Click(Sender: TObject);
begin
  frmusuarios.ShowModal;
end;

procedure Tfrmprincipal.Salir1Click(Sender: TObject);
begin
  Self.Close;
end;

procedure Tfrmprincipal.CerrarSeccin1Click(Sender: TObject);
begin
    Mantenimiento1.Enabled := False;
    Consultas1.Enabled     := False;
    N1Status1.Enabled      := False;
    N3Cargos1.Enabled      := False;
    N4Miembros1.Enabled    := False;
    I1.Enabled             := False;
    CerrarSeccin1.Enabled  := False;
    N0CuentasdeUsuarios1.Enabled := False;

    logueado := 1;
    frmLogin.ShowModal;
end;
end.

Login:

Código Delphi [-]
unit ufrmlogin;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, jpeg, ExtCtrls, RzForms, StdCtrls, IniFiles, DB, ADODB;

type
  TfrmLogin = class(TForm)
    RzFormShape1: TRzFormShape;
    Label1: TLabel;
    Label2: TLabel;
    edUsuario: TEdit;
    edClave: TEdit;
    btEntrar: TButton;
    btCerrar: TButton;
    ADOConnection: TADOConnection;
    qryUsuario: TADOQuery;
    qryUsuarioUserID: TWideStringField;
    qryUsuarioPassword: TWideStringField;
    qryUsuarioUsuario: TWideStringField;
    qryUsuarioLevel: TSmallintField;
    qryUsuarioActivo: TBooleanField;
    procedure btCerrarClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure btEntrarClick(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    { Private declarations }
  public
    { Public declarations }
    usuario : string;
    nivel   : Integer;
  end;

var
  frmLogin: TfrmLogin;

implementation

{$R *.dfm}

procedure TfrmLogin.btCerrarClick(Sender: TObject);
begin
  Application.Terminate;
end;

procedure TfrmLogin.FormCreate(Sender: TObject);
var
    ini   : TIniFile;
    provider : string;
    source   : string;
    security : string;
    password : string;
    jet       : string;
    rutadb   : string;
    rutapr   : string;
    user     : string;
    fechalg  : string;
    cadenacn : string;
begin
  provider:= '';
  source  := '';
  security:= '';
  password:= '';
  jet      := '';
  rutadb  := '';
  user    := '';
  fechalg := '';
  cadenacn:= '';

  usuario := '';
  nivel   := 0;

  //Obtener Ruta donde se ejecuta la aplicacion
  rutapr := ExtractFilePath(Application.ExeName);

  //Verificar que exista el archivo de configuracion
  If not FileExists('Iglesia.ini') then
  Begin
    ShowMessage('Error en la aplicación, no existe componente principal de configuracion');
    Application.Terminate;
  end;

  //Crear o Abrir Archivo INI
  ini := TIniFile.Create(rutapr+'Iglesia.ini');

  //Leer Archivo INI
  provider:= ini.ReadString('DB','provider','');
  source  := ini.ReadString('DB','source','');
  security:= ini.ReadString('DB','security','');
  password:= ini.ReadString('DB','password','');
  jet      := ini.ReadString('DB','jet','');
  rutadb  := ini.ReadString('DB','ruta','');
  user    := ini.ReadString('LOGIN','user','');
  fechalg := ini.ReadString('LOGIN','fecha','');

  edUsuario.Text := user;

  //Liberar recurso INI
  FreeAndNil(ini);

  //Conectar a DB con los datos obtenidos desde el ini
  cadenacn:=  'Provider='+provider+';'+
              'Data Source='+source+';'+
              security;

  ADOConnection.Connected := False;
  ADOConnection.ConnectionString := cadenacn;
  ADOConnection.Connected := True;
end;

procedure TfrmLogin.btEntrarClick(Sender: TObject);
var
    ini   : TIniFile;
    provider : string;
    source   : string;
    security : string;
    password : string;
    jet       : string;
    rutadb   : string;
    rutapr   : string;
    user     : string;
    fechalg  : string;
    cadenacn : string;
begin
  provider:= '';
  source  := '';
  security:= '';
  password:= '';
  jet      := '';
  rutadb  := '';
  user    := '';
  fechalg := '';
  cadenacn:= '';
  usuario := '';

  qryUsuario.Close;
  qryUsuario.SQL.Text := 'SELECT * FROM tblusuarios Where userid='+QuotedStr(Trim(edUsuario.Text))+' AND password='+QuotedStr(Trim(edClave.Text));
  qryUsuario.Open;
  If qryUsuario.RecordCount < 1 then
    begin
      ShowMessage('Usuario ó Clave erronea, intente de nuevo');
      edUsuario.SetFocus;
    end
  else
    If qryUsuarioActivo.Value = True then
      begin
        usuario := qryUsuarioUsuario.Text;
        nivel   := qryUsuarioLevel.Value;

        //Modificar Archivo INI
        ini := TIniFile.Create(rutapr+'Iglesia.ini');
        ini.WriteString('LOGIN','user',usuario);
        ini.WriteDateTime('LOGIN','fecha',now);

        edUsuario.Text := user;

        //Liberar recurso INI
        FreeAndNil(ini);

        Self.Close;
      end
    else
      begin
        ShowMessage('Usuario no está Activo, verifique un Administrador');
        edUsuario.SetFocus;
      end;
end;

procedure TfrmLogin.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  qryUsuario.Close;
  ADOConnection.Close;
  qryUsuario.Free;
  ADOConnection.Free;
end;

end.

Ok, en la opción nueva que he colocado Cerrar sección, lo que hago es que deshabilito todas las opciones del menú y luego presento (frmlogin.showmodal) la pantalla de login pero al cerrarse da un error : Project priglesia.exe raised exception class eaccessviolation with message 'Access violation at address 004ADFEA in module 'priglesia.exe'. Read of address 00000000. process stopped. use step or run to continue'. El curso se posiciona en la linea después del formshow.modal del login cuando se hace por segunda ves.


La franja horaria es GMT +2. Ahora son las 02:03:39.

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