Acceso a un programa

Esta bien este codigo?...procedure TForm1.BitBtn1Click(Sender: TObject);
var
login:string;
password:string;
begin
login:=edit1.text;
password:=edit2.Text;
Table1.Open;
with Table1 do
Locate('Login; Password', vararrayof([login,password]), []);
if Table1.Locate('Login; Password', vararrayof([login,password]), []) then
begin
ModalResult:=mrOk;
Hide;
//Form2.show;
end else
ShowMessage('Login o password incorrecto!');
Edit1.SetFocus;
end;

1 respuesta

Respuesta
1
Me parece que hay cosas que estás haciendo mal, pero no me aclarás bien qué es lo que querés hacer.
¿Qué es el Form2?
Cuál es el form principal?
Estás duplicando innecesariamente la Table1. Locate.
Además, si querés usar el ModalResult, tenés que llamar al Form desde otro, si no, no funciona.
¿Me podes explicar EXACTAMENTE qué es lo que querés hacer y qué tiene cada Form?
Así te podré responder.
Marcelo
Ok, disculpa lo poco clara de mi petición, este es un código que utilizo en un evento onclick de un botón que supuestamente validad el acceso de un usuario a un programa, el form2(form principal), como veras esta comentado así que no se usa directamente a la hora de mostrarme la pantalla principal, eso lo controlo desde las opciones del proyecto en el menu del IDE, y el acceso depende del ModalResult indicado en la Unit del proyecto, en fin, lo que se supone quiero hacer es introducir un login y un password(edit1 y edit2) y al momento del clic, va y los busca en una tabla y si existe ese usuario y el password, entonces me permite el acceso al programa, de lo contrario me muestra un mensaje.
Lo que me mencionas de que duplico el uso de Table1.Locate, creo entenderlo, solo quiero saber si esta bien empleado.
El form2 es mi form principal, pero hago un manejo con el form1(la form del login) desde la unit del proyecto.
Se que la forma de accesar a un programa que pida usuario y contraseña, puede ser muy particular, solo quiero me aconsejes sobre si lo que estoy tratando de hacer es válido para una aplicación de escritorio.
//Unit del proyecto
program Project1;
uses
Forms,
Controls,
Unit1 in 'Unit1.pas' {Form1},
Unit2 in 'Unit2.pas' {Form2},
Unit3 in 'Unit3.pas' {Form3};
{$R *.RES}
begin
Application.Initialize;
Form1:=TForm1.Create(nil);
if Form1.ShowModal <> mrOk then
exit;
Application.CreateForm(TForm2, Form2);
Application.CreateForm(TForm3, Form3);
Form1.Free;//Libero el Form Login
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
//Unit del Form1(login)
procedure TForm1.BitBtn1Click(Sender: TObject);
var
login:string;
password:string;
begin
login:=edit1.text;
password:=edit2.Text;
Table1.Open;
with Table1 do
Locate('Login; Password', vararrayof([login,password]), []);
//Si encuentro login y password
if Table1.Locate('Login; Password', vararrayof([login,password]), []) then
begin
//Entonces oculto el form login y mi form principal se activa
ModalResult:=mrOk;
Hide;
end else
ShowMessage('Login o password incorrecto!');
Edit1.SetFocus;
end;
De antemano agradezco tu tiempo y ayuda...
program Project1;
Uses
Forms,
Controls,
Unit1 in 'Unit1.pas' {Form1},
Unit2 in 'Unit2.pas' {Form2},
Unit3 in 'Unit3.pas' {Form3};
{$R *.RES}
begin
Application.Initialize;
// El formulario principal se crea primero!!!
// O sea, que si vos salís del primer formulario
// de la lista de los CreateForm, el programa termina.
// Además, todos los formularios creados con CreateForm
// no están visibles hasta que se da el Application.Run
// o hasta que no lo muestres con Show o ShowModal.
// Por eso, en tu código es inútil crear otra vez el
// Form1. De la manera que sigue, ya está creado, pero
// no visible.
Application.CreateForm(TForm2, Form2);
Application.CreateForm(TForm3, Form3);
Application.CreateForm(TForm1, Form1);
if Form1.ShowModal <> mrOK then
Application.Terminate;
Form1.Free; // o Form1.Hide;
// Vos en tu código volvés a poner
// CreateForm(TForm1, Form1) ¿para qué hacés el Form1.Free antes
// si después lo volvés a crear?
Application.Run;
end.
// Este es el código del Form1
// Fijate que le agregué otro botón para cancelar
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Db, DBTables;
type
TForm1 = class(TForm)
Edit1: TEdit;
Edit2: TEdit;
Button1: TButton;
Table1: TTable;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);
begin
// Las variables que declarás vos en tu ejemplo son innecesarias
// No es un error, pero acá las saqué
Table1.Open;
if Table1.Locate('Login;Password', VarArrayOf([Edit1.Text, Edit2.Text]), []) then
ModalResult := mrOK
else
begin
ShowMessage('Login o password incorrecto!');
Edit1.SetFocus;
ModalResult := mrNone;
end;
// Cierro la tabla
Table1.Close;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
// Con este botón sí salgo del Form1 con un ModalResult distinto de mrOK
ModalResult := mrCancel;
end;
end.

Añade tu respuesta

Haz clic para o
El autor de la pregunta ya no la sigue por lo que es posible que no reciba tu respuesta.

Más respuestas relacionadas