Ver Mensaje Individual
  #14  
Antiguo 05-06-2007
Avatar de AzidRain
[AzidRain] AzidRain is offline
Miembro Premium
 
Registrado: sep 2005
Ubicación: Córdoba, Veracruz, México
Posts: 2.914
Reputación: 21
AzidRain Va camino a la fama
A mi me funciona esto de forma muy simple:
Pongo este código en el onshow de la ventana principal

Código Delphi [-]
  FLogin := TFLogin.Create(self,Datos.Conexion);
  Flogin.Execute;
  If Not FLogin.LoggedIn  Then Close
  Else
   PonLineaEstado;
FLogin es una ventanita de captura que pide usuario y contraseña, de paso en el mismo objeto guardo los datos de usuario,nivel, nombre, etc. esta ventana le digo al IDE que me la cree automáticamente y ahi la dejo para acceder a los datos del usuario logeado desde cualquier otro lado del programa. Es rudimentario pero me ha funcionado muy bien

Aqui el codigo integro de la unidad FLogin, aclaro que uso Zeos para hacer la conexion a BD MySQL

Código Delphi [-]
unit UFLogin;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Buttons, ExtCtrls, DB, ZAbstractRODataset, ZDataset,
  ZAbstractDataset, Konst, cxButtons, cxLookAndFeelPainters, Udatos,
  ZConnection;

type
  TFLogin = class(TForm)
    Panel1: TPanel;
    Label1: TLabel;
    ELogin: TEdit;
    EPassword: TEdit;
    Label2: TLabel;
    ZUsuarios: TZQuery;
    Image1: TImage;
    BotIngresar: TcxButton;
    constructor Create(owner:TComponent; con:TZConnection);
    procedure BotIngresarClick(Sender: TObject);
  private
    { Private declarations }
    procedure AceptaDatos;
    procedure ResetDatos;
  public
    { Public declarations }
    UsuarioActual  : String;
    NivelActual    : Integer;
    LoggedIn       : Boolean;
    SucursalActual : String;
    NombreActual   : String;
    UBicacionActual : String;
    tries:integer;

   procedure Execute;
 
  end;

var fLogin:TFLogin;
implementation

{$R *.dfm}

constructor TFLogin.Create(owner: TComponent; con: TZConnection);
begin
   inherited create(owner);
   LoggedIN    := FALSE;
   tries := 1;
   ZUsuarios.Connection := con; // le paso la conexion MySQL 
end;

procedure TFLogin.Execute;
var tries:Integer;
Begin

 If ZUsuarios.Connection.Connected Then // ZUsuarios es la tabla
 Begin
       ShowModal
 end
 else
  raise  Exception.Create('La conexión al servidor debe estar disponible');
end;


procedure TFLogin.BotIngresarClick(Sender: TObject);
begin
   If ZUsuarios.Active Then ZUsuarios.Close;
   ZUsuarios.ParamByName('LOGIN').AsString := ELogin.Text;
   ZUsuarios.ParamByName('PASSW').AsString := EPassword.Text;
   ZUsuarios.Open;
   If ZUsuarios.RecordCount> 0 Then
   Begin
     AceptaDatos;
     modalResult := mrOk;
     Close;
   end
   else
   Begin
      MessError('Usuario o Contraseña Incorrecta'); // Sustituir por ShowMessage o algun otro
     If tries=3 Then
     Begin
        modalResult := mrCancel;
        Close;
     end
     else
        ResetDatos;
   end;
end;

procedure TFLogin.AceptaDatos;
begin
   LoggedIN      := TRUE;
   UsuarioActual := ZUsuarios.FieldBYName('LOGIN').AsString;
   NivelActual   := ZUsuarios.FieldBYName('NIVEL').AsInteger;
   SucursalActual:= ZUsuarios.FieldBYName('SUCURSAL').AsString;
   NombreActual  := ZUsuarios.FieldBYName('NOMBRE').AsString;
end;

procedure TFLogin.ResetDatos;
begin
  Elogin.Clear;
  EpassWord.Clear;
  ELogin.SetFocus;
  Inc(tries);
end;

end.

Les repito que a mi me ha funcionado muy bien y obviamente le faltan toques de elegancia pero ahi se los dejo.

Para saber por ejemplo que usuario esta dentro del sistema en cualquier otro lado del programa, solo agrego la unidad al uses y accedo FLogin para conocerlo.
Te anexo el código y el form.
Archivos Adjuntos
Tipo de Archivo: zip UFLogin.zip (5,3 KB, 26 visitas)
__________________
AKA "El animalito" ||Cordobés a mucha honra||

Última edición por AzidRain fecha: 05-06-2007 a las 03:27:03.
Responder Con Cita