Ir al contenido


Foto

formulario login, modificar para dar la opción de loguearse a más de uno


  • Por favor identifícate para responder
3 respuestas en este tema

#1 robert01

robert01

    Advanced Member

  • Miembros
  • PipPipPip
  • 162 mensajes
  • LocationArgentina

Escrito 22 marzo 2011 - 08:42

Hola amigos

Estoy haciendo un programa en Lazarus, este tiene guarda en una tabla de una base de datos firebird el nombre de usuario y contraseña. Necestito ahce una modificación para que más de un usuario pueda usar el programa.
El acceso a la base de datos es a través de componentes mercury (son muy parecidos a ibx pero están disponibles para Lazarus también, bajo windows y Linux)
Pongo el código del formulario Login y del formulario Usuarios que permite para modificar, ingresar nuevos, borrar usuarios



delphi
  1. unit Ulogin;
  2.  
  3. {$MODE Delphi}
  4.  
  5. interface
  6.  
  7. uses
  8.   LCLIntf, LCLType, LMessages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  9.   Dialogs, StdCtrls;
  10.  
  11. type
  12.   TFrmLogin = class(TForm)
  13.     Button1: TButton;
  14.     Button2: TButton;
  15.     Label1: TLabel;
  16.     Edit1: TEdit;
  17.     Label2: TLabel;
  18.     Edit2: TEdit;
  19.     procedure Button1Click(Sender: TObject);
  20.     procedure Button2Click(Sender: TObject);
  21.     procedure FormShow(Sender: TObject);
  22.   private
  23.     { Private declarations }
  24.   public
  25.     { Public declarations }
  26.   end;
  27.  
  28. var
  29.   FrmLogin: TFrmLogin;
  30.   tentativas:integer;
  31. implementation
  32.  
  33. uses uDM, UPrincipal;
  34.  
  35. {$R *.lfm}
  36.  
  37. procedure TFrmLogin.Button1Click(Sender: TObject);
  38. begin
  39.   if (dm.tblUsuario.Locate('USU_NOMBRE',edit1.Text,[])) and (dm.tblUsuario.FieldByName('USU_PASS').AsString = Edit2.Text) then
  40.   begin
  41.     FrmPrincipal.ShowModal;
  42.     FrmLogin.Close;
  43.   end
  44.   else
  45.   begin
  46.     tentativas := tentativas + 1;
  47.     if tentativas > 3 then
  48.       Application.Terminate;
  49.       ShowMessage('¡Login o contraseña erróneos, ingrese nuevamente!');
  50.       Edit1.Clear;
  51.       Edit2.Clear;
  52.       Edit1.SetFocus;
  53.     end;
  54.  
  55. end;
  56.  
  57. procedure TFrmLogin.Button2Click(Sender: TObject);
  58. begin
  59.   application.Terminate;
  60. end;
  61.  
  62. procedure TFrmLogin.FormShow(Sender: TObject);
  63. begin
  64.   edit1.SetFocus;
  65. end;
  66.  
  67. end.   





delphi
  1. unit UUsuario;
  2.  
  3. {$MODE Delphi}
  4.  
  5. interface
  6.  
  7. uses
  8.   LCLintf, LCLType, LMessages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  9.   Dialogs, StdCtrls, DB, MaskEdit, DBCtrls, Grids, DBGrids;
  10.  
  11. type
  12.   TFrmUsuario = class(TForm)
  13.     btnModificar: TButton;
  14.     btnBuscar: TButton;
  15.     btnEliminar: TButton;
  16.     btnRegistrar: TButton;
  17.     btAceptar: TButton;
  18.     btnCancelar: TButton;
  19.     Label4: TLabel;
  20.     DBEdit1: TDBEdit;
  21.     DataSource2: TDataSource;
  22.     Label5: TLabel;
  23.     DBEdit2: TDBEdit;
  24.     Label1: TLabel;
  25.     Edit1: TEdit;
  26.     DBGrid1: TDBGrid;
  27.     btnSalir: TButton;
  28.     procedure btnModificarClick(Sender: TObject);
  29.     procedure btnRegistrarClick(Sender: TObject);
  30.     procedure btnEliminarClick(Sender: TObject);
  31.     procedure btAceptarClick(Sender: TObject);
  32.     procedure btnCancelarClick(Sender: TObject);
  33.     procedure btnSalirClick(Sender: TObject);
  34.   private
  35.     { Private declarations }
  36.   public
  37.     { Public declarations }
  38.   end;
  39.  
  40. var
  41.   FrmUsuario: TFrmUsuario;
  42.  
  43. implementation
  44.  
  45. uses uDM, UPrincipal;
  46.  
  47. {$R *.lfm}
  48.  
  49. procedure TFrmUsuario.btnModificarClick(Sender: TObject);
  50. begin
  51.  
  52.   DM.TblUsuario.Edit;
  53.   Application.MessageBox('Usuario registrado con éxito...','Software',MB_ICONINFORMATION);
  54.  
  55.  
  56. end;
  57.  
  58. procedure TFrmUsuario.btnRegistrarClick(Sender: TObject);
  59. begin
  60.  
  61.   dm.tblUsuario.Append;
  62.   dbedit1.SetFocus;
  63.  
  64. end;
  65.  
  66. procedure TFrmUsuario.btnEliminarClick(Sender: TObject);
  67. begin
  68.  
  69.   if MessageDlg('¿Está seguro que quiere eliminar este registro?',
  70.     mtConfirmation, [mbYes, mbNo], 0) = mrYes then
  71.   begin
  72.     dm.tblUsuario.Delete;
  73.   end else
  74.   begin
  75.     dm.tblUsuario.Cancel;
  76.   end;
  77.  
  78.  
  79. end;
  80.  
  81. procedure TFrmUsuario.btAceptarClick(Sender: TObject);
  82. begin
  83.   DM.dbSG.Open;
  84.   DM.TblUsuario.Active:=True;
  85.   if (DBedit2.Text=edit1.Text) then
  86.   begin
  87.     dm.tblUsuario.Post;
  88.   end
  89.   else
  90.   begin
  91.     ShowMessage('Su contraseña no coincide');
  92.     dbedit2.SetFocus;
  93.   end;
  94.   DM.TblUsuario.Refresh;
  95.   DM.TblUsuario.Close;
  96.   DM.dbSG.Close;
  97.   DM.TblUsuario.Active:=False
  98. end;
  99.  
  100. procedure TFrmUsuario.btnCancelarClick(Sender: TObject);
  101. begin
  102.   dm.tblUsuario.Cancel;
  103. end;
  104.  
  105. procedure TFrmUsuario.btnSalirClick(Sender: TObject);
  106. begin
  107.   FrmPrincipal.show;
  108. end;
  109.  
  110. end.



Esto anda para un usuario y tiene errores, si alguien tiene unos minutos y puede echarle un vistazo le quedaré agradecido y lo invitaré con una cerveza virtual

La tabla de la base de datos tiene dos campos

USU_NOMBRE

y

USU_PASS

Saludos

  • 0

#2 TiammatMX

TiammatMX

    Advanced Member

  • Miembros
  • PipPipPip
  • 1.750 mensajes
  • LocationUniverso Curvo\Vía Láctea\Sistema Solar\Planeta Tierra\América\México\Ciudad de México\Xochimilco\San Gregorio Atlapulco\Home

Escrito 22 marzo 2011 - 09:51

Nomás por ser útil de alguna forma...



delphi
  1. procedure OnCreateFormaPrincipal(sender:TObject);
  2. var
  3.   formalogin : TFormaLogin;
  4. begin
  5.   formalogin := TFormaLogin.Create(Self);
  6.   formalogin.ShowModal;
  7.   if formalogin.ModalResult = mrYes then
  8.     ShowMessage('Usuario conectado');
  9. end;



Creo que ésta forma de realizar la entrada de los usuarios es más elegante y óptima.
  • 0

#3 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6.295 mensajes
  • LocationArgentina

Escrito 23 marzo 2011 - 08:43

Hola Robert01, a mi me queda la duda de si cuando dices que se permita loguearse más de un usuario te refieres a que si en una misma máquina cliente exista la posibilidad de tener dos "sesiones" abiertas.

De ser así lo veo un tanto complicado, a menos que se tengan dos instancias de la aplicación y cada una con su respectivo usuario. La otra forma (una sola instancia, dos sesiones) posiblemente requiera de un tanto de astucia. La pregunta elemental es ¿Y cómo le hacemos para identificar a uno del otro? Si fueran de distintos perfiles (como por ej, Administrador vs Técnico) en principio bastaría con comprobar esto, pero si no existe esto del perfil o si ambos son del mismo allí si está un tanto lioso.

Sino queda la posibilidad de que el usuarioA cierre y luego inicie usuarioB.

Saludos,
  • 0

#4 robert01

robert01

    Advanced Member

  • Miembros
  • PipPipPip
  • 162 mensajes
  • LocationArgentina

Escrito 23 marzo 2011 - 03:27

Hola Delphius

Perdón por la confusión que hay en el texto, se trata de que más de un usuario pueda acceder al programa, yo borré una parte porque la consideraba errónea.



delphi
  1. procedure TFrmLogin.Button1Click(Sender: TObject);
  2. begin
  3.   if (dm.tblUsuario.Locate('USU_NOMBRE',edit1.Text,[])) and (dm.tblUsuario.FieldByName('USU_PASS').AsString = Edit2.Text) then
  4.   begin
  5.     if not(edit1.Text='admin') then
  6.     begin
  7.       FrmPrincipal.Usuarios1.Visible:=false;
  8.     end;
  9.     FrmPrincipal.ShowModal;
  10.     FrmLogin.Close;
  11.   end
  12.   else
  13.   begin
  14.     tentativas := tentativas + 1;
  15.     if tentativas > 3 then
  16.       Application.Terminate;
  17.       ShowMessage('¡Login o contraseña erróneos, ingrese nuevamente!');
  18.       Edit1.Clear;
  19.       Edit2.Clear;
  20.       Edit1.SetFocus;
  21.     end;
  22.  
  23. end; 




Pero mirando bien es correcta, sólo permite al administrador acceder a la posibilidad de modificar, agregar o borrar usuarios.
Lo que si me parece que no anda bien es donde se modifica, registra o borra un usuario.

Saludos

  • 0




IP.Board spam blocked by CleanTalk.