Ver Mensaje Individual
  #1  
Antiguo 24-09-2011
asdbernardo asdbernardo is offline
Miembro
NULL
 
Registrado: sep 2011
Posts: 37
Reputación: 0
asdbernardo Va por buen camino
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.
Responder Con Cita