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.