Asunto: Ayuda en la creacion de Formulario de login para MySql
Hola a todos. Mi pregunta y gran duda es la siguiente:
Estoy haciendo una aplicacion en la cual existen varios usuarios, algunos con privilegios de realizar consultas e insertar registros, y otros solo con privilegios de realizar consultas. Los privilegios ya los asigne a los diferentes usuarios.
Mi problema es como debo hacer para conectarme a la BBDD creada mediante delphi, pero al inicio mostrar un formulario de logueo, y de acuerdo al usuario, conectarse.
Utilizo ADOQuerys, DataSources, DBGrids, Mediante el puente ODBC.
Desde ya muchas gracias.
Publicado:
Mie Sep 16, 2009 2:10 am
agustinbus Excelente usuario
Registrado: Apr 17, 2009 Mensajes: 38
Asunto:
Nadie sabe????
Publicado:
Vie Sep 18, 2009 5:12 pm
alonsojpd Administrador/Moderador
Registrado: Sep 16, 2003 Mensajes: 2687
Asunto:
agustinbus escribió:
Nadie sabe????
Danos unos días, estamos preparándote, desde el departamento de desarrollo, un formulario de login "modelo", que tal vez te sirva.
Publicado:
Dom Sep 20, 2009 10:39 am
alonsojpd Administrador/Moderador
Registrado: Sep 16, 2003 Mensajes: 2687
Asunto: Re: Ayuda en la creacion de Formulario de login para MySql
Anuncios
agustinbus escribió:
Hola a todos. Mi pregunta y gran duda es la siguiente:
Estoy haciendo una aplicacion en la cual existen varios usuarios, algunos con privilegios de realizar consultas e insertar registros, y otros solo con privilegios de realizar consultas. Los privilegios ya los asigne a los diferentes usuarios.
Mi problema es como debo hacer para conectarme a la BBDD creada mediante delphi, pero al inicio mostrar un formulario de logueo, y de acuerdo al usuario, conectarse.
Utilizo ADOQuerys, DataSources, DBGrids, Mediante el puente ODBC.
Desde ya muchas gracias.
Aquí te ponemos el código para el formulario de Login:
const
//para encriptación de contraseñas en AES
claveEncriptacionTexto = '5f3ddfJ*nt2Ñv7Wp';
implementation
{$R *.dfm}
//encriptar datos
function encriptar (Str, Clave : String) : String;
var
Src: TStringStream;
Dst: TMemoryStream;
Size: Integer;
Key: TAESKey;
ExpandedKey: TAESExpandedKey;
begin
Result:= EmptyStr;
Src:= TStringStream.Create(Str);
try
Dst:= TMemoryStream.Create;
try
// Preparamos la clave, lo ideal es que tenga 32 caracteres
FillChar(Key,Sizeof(Key),#0);
if Length(Clave) > Sizeof(Key) then
move(PChar(Clave)^,Key,Sizeof(key))
else
move(PChar(Clave)^,Key,Length(Clave));
AEsExpandKey(ExpandedKey,Key);
// Guardamos el tamaño del texto original
Size:= Src.Size;
Dst.WriteBuffer(Size,Sizeof(Size));
// Ciframos el texto
AESEncryptStreamECB(Src,Dst,ExpandedKey);
// Lo codificamos a base64
Result:= BinToStr(Dst.Memory,Dst.Size);
finally
Dst.Free;
end;
finally
Src.Free;
end;
end;
//desencriptar datos
function desencriptar (Str, Clave : String): String;
var
Src: TMemoryStream;
Dst: TStringStream;
Size: Integer;
Key: TAESKey;
ExpandedKey: TAESExpandedKey;
begin
Result:= EmptyStr;
Src:= TMemoryStream.Create;
try
Dst:= TStringStream.Create(Str);
try
StrToStream(Str, Src);
Src.Position:= 0;
FillChar(Key,Sizeof(Key),#0);
if Length(Clave) > Sizeof(Key) then
move(PChar(Clave)^,Key,Sizeof(key))
else
move(PChar(Clave)^,Key,Length(Clave));
AESExpandKey(ExpandedKey,Key);
// Leemos el tamaño del texto
try
Src.ReadBuffer(Size,Sizeof(Size));
AESDecryptStreamECB(Src,Dst,ExpandedKey);
Dst.Size:= Size;
Result:= Dst.DataString;
except
Result := '';
end;
finally
Dst.Free;
end;
finally
Src.Free;
end;
end;
//lee un valor booleano de un fichero INI
function leBoolINI (clave, cadena : string;
defecto : boolean) : boolean;
begin
with tinifile.create (changefileext(paramstr(0),'.INI')) do
try
result := readbool (clave, cadena, defecto);
finally
free;
end;
end;
//lee un valor numérico de un fichero INI
function leNumINI (clave, cadena : string;
defecto : Integer) : Integer;
begin
with tinifile.create (changefileext(paramstr(0),'.INI')) do
try
result := ReadInteger (clave, cadena, defecto);
finally
free;
end;
end;
//lee un valor string de un fichero INI
function leCadINI (clave, cadena : string;
defecto : String) : String;
begin
with tinifile.create (changefileext(paramstr(0),'.INI')) do
try
result := ReadString (clave, cadena, defecto);
finally
free;
end;
end;
//escribe un valor string en un fichero INI
procedure esCadINI (clave, cadena : string; valor : String);
begin
with tinifile.create (changefileext(paramstr(0),'.INI')) do
try
WriteString (clave, cadena, valor);
finally
free;
end;
end;
//escribe un valor boolean en un fichero INI
procedure esBoolINI (clave, cadena : string; valor : Boolean);
begin
with tinifile.create (changefileext(paramstr(0),'.INI')) do
try
WriteBool (clave, cadena, valor);
finally
free;
end;
end;
//escribe un valor numérico en un fichero INI
procedure esNumINI (clave, cadena : string; valor : Integer);
begin
with tinifile.create (changefileext(paramstr(0),'.INI')) do
try
WriteInteger (clave, cadena, valor);
finally
free;
end;
end;
procedure TformLogin.bCancelarClick(Sender: TObject);
begin
close;
end;
procedure TformLogin.FormCreate(Sender: TObject);
begin
Height := 193;
opRecordarContrasena.Checked :=
leBoolINI('Base de datos', 'Tipo BD MySQL', false);
txtUsuario.Text :=
leCadINI('Base de datos', 'Tipo BD MySQL - Usuario', '');
if opRecordarContrasena.Checked then
txtContrasena.Text :=
desencriptar (leCadINI('Base de datos', 'Tipo BD MySQL - Contraseña', ''),
claveEncriptacionTexto);
txtBDServidor.Text := leCadINI('Base de datos', 'Tipo BD MySQL - Servidor', '');
txtBDPuerto.Text := leCadINI('Base de datos', 'Tipo BD MySQL - Puerto', '3306');
txtBDBD.Text := leCadINI('Base de datos', 'Tipo BD MySQL - Nombre BD', '');
txtProveedor.Text :=
leCadINI('Base de datos', 'Tipo BD MySQL - Proveedor', 'MSDASQL.1');
txtDriver.Text :=
leCadINI('Base de datos', 'Tipo BD MySQL - Driver ODBC',
'MySQL ODBC 5.1 Driver');
end;
procedure TformLogin.bIniciarClick(Sender: TObject);
var
versionBD : string;
valorParametro1, valorParametro2 : string;
accesoSiDistinta : string;
begin
if (txtUsuario.Text = '') or (txtBDServidor.Text = '') or
(txtBDBD.Text = '') then
begin
MessageDlg('Falta datos por introducir para poder iniciar la sesión.',
mtWarning, [mbok], 0);
txtUsuario.SetFocus;
end
else
begin
esCadINI('Base de datos', 'Tipo BD MySQL - Usuario', txtUsuario.Text);
if opRecordarContrasena.Checked then
esCadINI('Base de datos', 'Tipo BD MySQL - Contraseña',
trim(encriptar (txtContrasena.Text, claveEncriptacionTexto)));
esCadINI('Base de datos', 'Tipo BD MySQL - Servidor', txtBDServidor.Text);
esCadINI('Base de datos', 'Tipo BD MySQL - Puerto', txtBDPuerto.Text);
esCadINI('Base de datos', 'Tipo BD MySQL - Nombre BD', txtBDBD.Text);
esBoolINI('Base de datos', 'Tipo BD MySQL', opRecordarContrasena.Checked);
// Aquí irá el código de carga del formulario principal
// de la aplicación, puesto que ha pasado el proceso de
// inicio de sesión (usuario y contraseña válidos)
MessageDlg('Conectado al servidor MySQL mediante ADO.',
mtInformation, [mbok], 0);
except
on e : exception do
begin
MessageDlg ('No se ha podido conectar con el servidor: [' +
txtBDServidor.Text +
']. Compruebe que el servicio de MySQL está iniciado y que ha ' +
'escrito correctamente el nombre/ip del servidor.' +
chr(13) + chr(13) +
'A continuación la descripción completa del error:' + chr(13) +
e.ClassName + chr(13) + e.Message,
mtError, [mbok], 0);
Exit;
end;
end;
end;
end;
procedure TformLogin.bOpcionesClick(Sender: TObject);
begin
if Height = 340 then
begin
Height := 193;
bOpciones.Caption := 'Opciones >>';
end
else
begin
Height := 340;
bOpciones.Caption := 'Opciones <<';
end;
end;
* Permite modificar las opciones de conexión como: IP del servidor de MySQL, nombre de la base de datos, driver ODBC, proveedor, etc.
* Permite guardar la contraseña del usuario encriptada.
* El usuario puede cambiar los valores de acceso pulsando un botón.
* Las opciones se guardan en un fichero .INI, con esta estructura:
[Base de datos]
Tipo BD MySQL - Usuario=root
Tipo BD MySQL - Contraseña=
Tipo BD MySQL - Servidor=ajpdsoft
Tipo BD MySQL - Puerto=3306
Tipo BD MySQL - Nombre BD=bdajpdsoft
Tipo BD MySQL=0
En el formulario necesitarás los siguientes componentes:
Lógicamente, lo recomendable es que pongas el ADOConnection en un DataModule y los ADOTable y ADOQuery los conectes a este ADOConnection mediante la propiedad "Connection". De esta forma, al abrir el ADOConnection con un usuario y contraseña, todo lo que ejecute se realizará con los permisos que este usuario tenga en MySQL.
Publicado:
Dom Sep 20, 2009 11:26 am
alonsojpd Administrador/Moderador
Registrado: Sep 16, 2003 Mensajes: 2687
Asunto: Re: Ayuda en la creacion de Formulario de login para MySql
Anuncios
Aquí tienes la descarga del formulario de login con ADO y MySQL:
Y aquí tienes otra aplicación gratuita de esta web que utiliza ADO para conexión con Oracle o MySQL utilizando ADO y con personalización del usuario que se utilizará: AjpdSoft Administracion PHP-Nuke - Código fuente Delphi 6
MUUUUUUUUUCHHHHHHIIIISIIIIIMMMASSSSS GRACIIIIASSSS!!!!
Sos un idolooo!!! Te doy un 11 de puntaje como respuesta!!! Otra vez gracias por tu tiempo en responder una pregunta con tal predisposicion!!!
Nunca use AdoConnection. Voy a probar. GRACIAS!!!
Publicado:
Lun Sep 21, 2009 5:35 pm
alonsojpd Administrador/Moderador
Registrado: Sep 16, 2003 Mensajes: 2687
Asunto:
En el siguiente enlace puedes ver un artículo que explica cómo hacer un formulario de login con Delphi y MySQL, también incluye opción de autenticación en servidor LDAP:
Puede publicar nuevos temas en este foro No puede responder a temas en este foro No puede editar sus mensajes en este foro No puede borrar sus mensajes en este foro No puede votar en encuestas en este foro
Visita nuestro nuevo sitio web con programas y contenidos actualizados: Proyecto A