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)
-   -   Chequear Conexion mysql antes de abrir la aplicacion (https://www.clubdelphi.com/foros/showthread.php?t=75888)

asdbernardo 24-09-2011 20:21:06

Chequear Conexion mysql antes de abrir la aplicacion
 
Buenas forista del club delphi..

Ante todo un cordial saludo, vengo con otras duditas .. jeje espero me puedan sacar de ellas..

en primer lugar... estoy trabajando con mysql remoto, con el complemeto unidac de devart en delphi 2010, todo trabaja bien salvo a que cuando el servidor se cae, digamos lo apago, e intento logear me da un error de clientsocket excepcion, pero creo que es porque activo el componente a UniConnection1 que es conexiondb a true de manera manual, y como no lo consigue me marca ese error, que me recomiendan hacer? he estado intentando varias cosas logicas y lo que leo, pero no consigo dar con eso, ya que viene siendo una validacion digamos asi.. porque si no hay conexion al servidor debe mostrar el formulario y en un label que tengo alli colocarme Desconectado pero no llega hasta alli.

les dejo el codigo a ver

Código:

unit Login;

interface

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

type
  TfrmLogin = class(TForm)
    UniConnection1: TUniConnection;
    UniTable1: TUniTable;
    UniDataSource1: TUniDataSource;
    MySQLUniProvider1: TMySQLUniProvider;
    btnaceptar: TButton;
    qry: TUniQuery;
    txtusu: TEdit;
    txtpass: TEdit;
    btnsalir: TButton;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    lblintentos: TLabel;
    lblverifique: TLabel;
    lblconexion: TLabel;
    lblinfoserve: TLabel;
    qryLogin_Usuario: TStringField;
    qryLogin_password: TStringField;
    UniSQLMonitor1: TUniSQLMonitor;
    procedure btnaceptarClick(Sender: TObject);
    procedure btnsalirClick(Sender: TObject);
    procedure txtusuKeyPress(Sender: TObject; var Key: Char);
    procedure txtpassKeyPress(Sender: TObject; var Key: Char);
    procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
    procedure FormCreate(Sender: TObject);
    procedure UniConnection1Error(Sender: TObject; E: EDAError;
      var Fail: Boolean);

  private
    { Private declarations }

  public
    { Public declarations }

  end;

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

uses Principal;

{$R *.dfm}

procedure TfrmLogin.btnaceptarClick(Sender: TObject);
begin
qry.SQL.Clear;
qry.SQL.Add(' select Login_Usuario');
qry.SQL.Add(' , Login_Password');
qry.SQL.Add(' from Login');
qry.SQL.Add(' where Login_Usuario = Upper(:UserLogin)');
qry.SQL.Add(' and ');
qry.SQL.Add(' Login_Password = PASSWORD( PASSWORD( PASSWORD(:UserPassword)))');
qry.Params[0].Value := UpperCase(Trim(txtusu.Text));
qry.Params[1].Value := Trim(txtpass.Text);
qry.Open;
{Showmessage('Open DB');
ShowMessage('RecordCount is ' + IntToStr(qry.RecordCount));
 }
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.btnsalirClick(Sender: TObject);
begin
close;
 end;






procedure TfrmLogin.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
      begin
  if MessageDlg('¿Estas Seguro Que Desea Salir del Login del Programa?', mtConfirmation, [mbOk, mbCancel], 0) = mrCancel then CanClose := False;
end;



procedure TfrmLogin.FormCreate(Sender: TObject);
begin

if UniConnection1.Connected = false then
 begin
 lblconexion.Caption := 'Desconectado';
 txtusu.Enabled:= false;
 txtpass.Enabled:= false;
 btnaceptar.Enabled:= false;

 end
 else
 begin
 lblconexion.Caption := 'Conectado';
 lblconexion.Font.Color:= clGreen;
 txtusu.Enabled:= true;
 txtpass.Enabled:= true;
 btnaceptar.Enabled:= true;

 end;
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 este es el project source

Código:

program Project1;

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


{$R *.res}
    var
    Respuesta: integer;
    comparacion: integer;
begin
  Application.Initialize;
  Application.Title := 'WB System';
  frmlogin := Tfrmlogin.Create(Application); //Cuando salta el error de que no                                         
                                                            hay error se para aca. cuando le  doy BREAK

  frmprincipal := Tfrmprincipal.Create(Application);
    try
    Respuesta := frmLogin.ShowModal;
      if Respuesta = mrOK then
        begin
      Application.Run;
        end;
  finally
    frmLogin.Free;
  end;
end.


asdbernardo 26-09-2011 07:41:26

Gracias, Tema resuelto! Despues de investigar y mirar tanto.. pude resolverlo... con el try / except..
Código Delphi [-]
    try    
        frmlogin := Tfrmlogin.Create(Application);
        frmlogin.uniconnection1.connected :=true;
    except
    on E: Exception do
      frmlogin.uniconnection1.connected :=false;
    end;

Y desactivandole las notificaiones de excepciones del delphi en tools / options / debugger options / embarcadero lenguage / desmarcar notify on lenguage exceptions.

Con eso solventado el problema,

Gracias gente.!


La franja horaria es GMT +2. Ahora son las 21:20:40.

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