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;
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.
- Anónimoahora mismo
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.