Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   como regresar a la pantalla de login personalizada al tener un error dbexpress (https://www.clubdelphi.com/foros/showthread.php?t=34728)

Arturo 18-08-2006 20:50:56

como regresar a la pantalla de login personalizada al tener un error dbexpress
 
saludos uso dbexpress en delphi 7 y mysql 5.0 de los cual tengo una forma personalizada para ingresar al sistema, la cuestion es como le puedo hacer cuando un usuario se equivoque en el usuario o en el password y le de un error y le regrese a la misma pantalla para ingresarlos, ya que el siguiente codigo expuesto me da un error del odbc con el usuario que quise entrar, y al dar aceptar, me deja entrar a la pantalla principal, aunque no se conecte pero eso seria fatal.
creo que si hay un error lo mejor es que se cierre completamente con el application.terminate o bien volver a la pantalla de acceso.
Código PHP:

Fusuario:=Edit1.Text;
  
fpsw:=Edit2.Text;
 
  
with BD.SQLConnection do
  
begin
   Connected 
:= false;
   try
    
BD.SQLConnection.Params.Values['Database']:='DSN=BDEquipos;UID='Fusuario ';''PWD='+fpsw ';' 'DB=equipos;HOSTNAME=localhost';
  
Except
    on E
exception do begin
      ShowMessage
('Error al intentar abrir la base de datos.' + ^+
                  
'Confirme a Sistemas.');
     
Application.Terminate;
     
end;
   
end
  end


gracias.

vtdeleon 19-08-2006 02:27:44

No he usado mucho DbExpress pero:

1) Que error te da?
2) Que valor tiene ^M? (curiosidad)
3) Cuando activas la conección (SQLConnection)?
4) Para cerrar aplicacion FormPrincial.Close;

Saludos

Lepe 19-08-2006 11:55:28

Creo que sería bueno utilizar la metodología normal de excepciones:

- Tal y como haces, controlar la excepción, mostrar el mensaje y despues, en lugar de Application.Terminate, escribe "raise;", Esto hará que se levante la excepción producida de nuevo.

- Añade un ApplicationsEvents en tu forma principal, y en el evento OnException, vuelve a controlar ese error. Ahora en ese evento si puedes cerrar todas las ventanas que tengas y lanzar el login.

Podrías pensar... pues que lio, simplemente en el try.. except que tengo ahora cierro la ventana y muestro el login... pero tardarás 2 segundos en darte cuenta que en ese mismo try ... except necesitas hacer comprobaciones que requieren añadir otros "uses", necesitas variables que estan en otro sitio y puede que mucho más.

Saludos y espero te sirva.

jacanche 19-08-2006 20:46:32

Bueno, puedes intentar modificar el codigo de la ventana donde solicitas el nombre de usuario y contraseña, supongo que tienes mas o menos algo parecido a lo que se muestra abajo.
Se agrega una variable privada en la forma y una constante en la implementacion con las cuales se lleva la cuenta de cuantas veces se intenta el acceso, si se llega al numero maximo se termina la aplicación, asi como si le das click al boton cancelar.

Código Delphi [-]
unit Username;

interface

uses
  SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,
  Forms, Dialogs, StdCtrls, ExtCtrls, jpeg, Buttons;

type
  TUserNameDlg = class(TForm)
    UserNameEdit: TEdit;
    OkBtn: TBitBtn;
    CancelBtn: TBitBtn;
    procedure OkBtnClick(Sender: TObject);
    procedure CancelBtnClick(Sender : TObject);
    procedure FormCreate(Sender: TObject);
  private
    Tries : byte;
    function TryAgain : TModalResult;
  public
  end;

var
  UserNameDlg: TUserNameDlg;

implementation

{$R *.DFM}

const
   MAX_TRIES = 3;

procedure TUserNameDlg.OkBtnClick(Sender: TObject);
begin
  Fusuario:=Edit1.Text;
  fpsw:=Edit2.Text;
 
  with BD.SQLConnection do
  begin
   Connected := false;
   try
    BD.SQLConnection.Params.Values['Database']:='DSN=BDEquipos;UID='+ Fusuario + ';'+ 'PWD='+fpsw + ';' + 'DB=equipos;HOSTNAME=localhost';
  Except
    on E: exception do begin
      ShowMessage('Error al intentar abrir la base de datos.' + ^M +
                  'Confirme a Sistemas.');
     if Tries then //Esto permite que se intente 3 veces el acceso a la base de datos
          Tries := Tries +1
        else
          Application.Terminate;
     end;
   end
  end;  

end;

procedure TUserNameDlg.CancelBtnClick(Sender : TObject);
begin
  Application.Terminate;
end;

procedure TUserNameDlg.FormCreate(Sender: TObject);
begin
   Tries := 1;
end;


La franja horaria es GMT +2. Ahora son las 05:25:56.

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