Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 23-05-2016
JuancaDJ JuancaDJ is offline
Miembro
NULL
 
Registrado: may 2016
Posts: 17
Poder: 0
JuancaDJ Va por buen camino
Usuarios, passwd y listbox??

Hola buenas tardes, tengo la siguiente problematica ya que estoy creando una aplicacion que contiene usuarios y contraseña, esos usuarios estan almacenados en un fichero de texto plano que carga un listbox, y las contraseñas en texto plano tambien que los carga otro listbox, pero ambos listbox estan ocultos, por lo que agregue 2 Edit, uno para usuario y otro para contraseñael tema es el siguiente el codigo me queda asi:

if edit1.text=listbox1.items.string[0] then
if edit2.text=listbox1.items.string[0] then

haga la funcion X y si no, no haga esa funcion, como pueden ver el compara que tanto el usuario y la contraseña esten ubicadas en el mismo orden en los 2 ficheros, o sea fichero usuarios, el primero corresponde a la contraseña ubicada en el primer lugar del fichero passwd

por lo que si tengo 100 usuarios debo estar repitiendo ese codigo 100 veces solo variando el numero del string[]??

PD: No utilizo una Base de datos ya que de momento el ODBC para mysql no he podido bajarlo pues el sitio prohibe las descargas a cuba, pais en el que vivo. Gracias.
Responder Con Cita
  #2  
Antiguo 23-05-2016
rocksoft rocksoft is offline
Miembro
NULL
 
Registrado: may 2016
Posts: 71
Poder: 8
rocksoft Va por buen camino
Hola JuancaDJ,

realmente segun tu descripcion no endiendo lo que pretendes pero me lo puedo imaginar, si ya que tienes dos listbox ocultas, por que no usas un stringlist asi no tienes que ocultar nada.

lo que tienes que hacer es buscar el valor del edit1 en la Stringlist (o listbox), si existe lees el numero de linea[i] con este numero solo tienes que ir a la linea[i] del Listbox2, comparas el valor que encuentas con el edit2 y listo.

para esto te recomiendo usar un Hash o al menos codificar los dos archivos y al importarlos decodificarlos
Responder Con Cita
  #3  
Antiguo 23-05-2016
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.

Me resulta confuso el planteo, no se si entendí lo que buscas...

Si interpreté bién no veo la necesidad de usar dos TListBox, podrías hacer algo similar a esto:
Código Delphi [-]
....
var
  User, Password: TStrings;

procedure TForm1.FormCreate(Sender: TObject);
begin
  User     := TStringList.Create;
  Password := TStringList.Create;
  User.LoadFromFile('Users.txt');
  Password.LoadFromFile('Passwords.txt');
end;

procedure TForm1.btnAceptaClick(Sender: TObject);
var
  ix : Integer;
  pIn,uIn: Boolean;
begin
  ix := User.IndexOf(edUser.Text);
  uIn := ix <> -1;
  if uIn then
    pIn := edPassword.Text = Password[ix];
  if not (pIn and uIn) then
    raise Exception.Create('Nombre de usuario o contraseña incorrectos');
  //...
  //...
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  User.Free;
  Password.Free;
end;

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 24-05-2016 a las 00:33:25.
Responder Con Cita
  #4  
Antiguo 23-05-2016
JuancaDJ JuancaDJ is offline
Miembro
NULL
 
Registrado: may 2016
Posts: 17
Poder: 0
JuancaDJ Va por buen camino
Bueno no conosco cuales son los Stringlist, estoy usando delphi 7, ademas de que la programacion nunca a sido mi mayor trabajo, ya que las redes me ocuparon mucho tiempo pero ahora cambie de trabajo y necesite crear una aplicacion y delphi siempre fue lo que me gusto y usé pero no a niveles muuyy avanzados
Por favor al que posteo ese codigo puede explicarme mas o menos que es?, ya que hay cosas ahi que no entiendo ni se que funsion cumplen. Gracias
Otra cosa eso del hash es buena idea pero igual en esos temas estoy totalmente botado ejeje
Responder Con Cita
  #5  
Antiguo 24-05-2016
rocksoft rocksoft is offline
Miembro
NULL
 
Registrado: may 2016
Posts: 71
Poder: 8
rocksoft Va por buen camino
Hola JuancaDJ,

veo que ecfisa te lo dio ya todo masticadito, para un copia y pegar.

Yo te recomiendo que pruebes el codigo y cosa que no sepas que es lo marcas y le das a la ayuda de delphi, te sorprenderas
Responder Con Cita
  #6  
Antiguo 24-05-2016
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola JuancaDJ
Cita:
Empezado por JuancaDJ Ver Mensaje
Bueno no conosco cuales son los Stringlist, estoy usando delphi 7, ...
Cuando usas la propiedad Items de los TListBox, estas usando TStrings ya que dicha propiedad es de ese tipo.

Por eso es que te digo que no necesitas usar dos ListBox ocultos, podes usar directamente dos variables de tipo TStrings, cuentan con los mismos métodos que la propiedad Items de los ListBox ( LoadFromFile, SaveToFile, Add, etc, etc).

El ejemplo que te puse casi cubre todos los aspectos, me faltó agregarle dos líneas que guarden los cambios:
Código Delphi [-]
...
procedure TForm1.FormDestroy(Sender: TObject);
begin
  User.SaveToFile('Users.txt');
  Password.SaveToFile('Passwords.txt');

  User.Free;
  Password.Free;
end;
Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #7  
Antiguo 24-05-2016
JuancaDJ JuancaDJ is offline
Miembro
NULL
 
Registrado: may 2016
Posts: 17
Poder: 0
JuancaDJ Va por buen camino
Bueno ya me llevo el codigo para probarlo a ver que tal me va, pero sigo sin entender esta parte:

Código Delphi [-]
var   ix : Integer;   pIn,uIn: Boolean; 
begin   ix := User.IndexOf(edUser.Text);
 uIn := ix <> -1;   if uIn then     pIn := edPassword.Text = Password[ix];
 if not (pIn and uIn) then
ademas de que
edUser.Text edPassword que son? dos edit que tengo que tener solamente en el formulario?, ya los listbox no los necesitaria con esta opcion¿?

Última edición por JuancaDJ fecha: 24-05-2016 a las 00:39:42. Razón: Resaltar sintaxis de codigo
Responder Con Cita
  #8  
Antiguo 24-05-2016
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola JuancaDJ.

Por favor cuando incluyas código en tus mensaje utiliza TAG's para darle más legibilidad. Te pongo una imágen que explica el uso:


Con respecto a tu última consulta, edUser y edNombre serían los Edits que mencionas en tu primer mensaje. Mientras que los ListBox son innecesarios siendo reemplazados por las variables User y Password de tipo TStrings.

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #9  
Antiguo 24-05-2016
JuancaDJ JuancaDJ is offline
Miembro
NULL
 
Registrado: may 2016
Posts: 17
Poder: 0
JuancaDJ Va por buen camino
Gracias por el dato de las etiquetas para codigos, pues andaba en busca de eso pero no decia code en ningun lado
Y tambien gracias por aclararme eso de los edit y lo innecesario que resultan los listbox, con esta variable, pero podrias explicarme mas o menos

Código Delphi [-]
ix := User.IndexOf(edUser.Text);   uIn := ix <> -1;   if uIn then     pIn := edPassword.Text = Password[ix];   if not (pIn and uIn) then

Gracias
Responder Con Cita
  #10  
Antiguo 24-05-2016
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Perdón, olvidé ese punto

Te comento las líneas de código que te resultan confusas:
Código Delphi [-]
var 
  ix : Integer; // variable que almacenará el índice        
  pIn, uIn: Boolean;  // True si logran el acceso, False de otro modo
begin 
  ix := User.IndexOf(edUser.Text);  // En ix el índice del nombre de usuario o -1 si no existe
  uIn := ix <> -1;   // uIn es verdadero si ix <> -1
  if uIn then   // si el nombre existe -> controlar contraseña
     pIn := edPassword.Text = Password[ix]; // pIn es True si la contraseña ingresada = almacenada
  if not (pIn and uIn) then // si al menos uno de los dos es falso
     // Mostrar error
...
Encontrarás una explicación mas detallada en la ayuda de Delphi (estando el cursor sobre el término deseado presiona F1), además te puede resultar útil:Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #11  
Antiguo 24-05-2016
JuancaDJ JuancaDJ is offline
Miembro
NULL
 
Registrado: may 2016
Posts: 17
Poder: 0
JuancaDJ Va por buen camino
Ahh yap, pero ese codigo hace lo que plantié en la problematica del incio?
o sea tengo 1 fichero de texto plano con 10 usuarios y otro con 10 contraseñas, por al usuario 1 le corresponde la contraseña 1 del fichero passwd, no es que eso va a escanear el fichero de texto y decir de los 10 usuarios si existe el usuario pepito en el puesto 4, y en el fichero passwd existe la contraseña de pepito en el puesto 10, no no es pepito puesto 4 y la contraseña de pepito igual en el puesto 4
Responder Con Cita
  #12  
Antiguo 24-05-2016
rocksoft rocksoft is offline
Miembro
NULL
 
Registrado: may 2016
Posts: 71
Poder: 8
rocksoft Va por buen camino
Justamente

en esta linea esta la magia:
Código Delphi [-]
ix := User.IndexOf(edUser.Text);  // En ix el índice del nombre de usuario o -1 si no existe

la explicación: LINK
Responder Con Cita
  #13  
Antiguo 26-05-2016
JuancaDJ JuancaDJ is offline
Miembro
NULL
 
Registrado: may 2016
Posts: 17
Poder: 0
JuancaDJ Va por buen camino
Muchas gracias, heche a andar el ejemplo que me dieron y me sirvio de maravillas pero tengo un problema, ya que si analizan el primero post, ese usuario necesitaba cumplir con ciertos requisitos, que ya con este codigo me ayudaron mucho, pero una vez que ese usuario era valido, se cargarma un segundo formalario que controlaba el tiempo disponible de ese usuario, es tipo un cibercafe, si tienes tiempo puedes hacer esto o aquello si no no, entonces el segundo form tenia esto:

Código Delphi [-]
procedure TForm2.FormActivate(Sender: TObject);
begin

//usuario 0
//timer1.Enabled:=true;
if form1.Edit1.Text=form1.ListBox1.Items.Strings[0] then
memo1.Lines.LoadFromFile('/veryimport/data/time0.dll');
labeltimer.Caption:=memo1.Lines.Text;

// usuario 1
//timer1.Enabled:=true;
if form1.Edit1.Text=form1.ListBox1.Items.Strings[1] then
memo1.Lines.LoadFromFile('/veryimport/data/time1.dll');
labeltimer.Caption:=memo1.Lines.Text;

end;

end.


procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
//usuario 0
memo1.Lines.Text:=labeltimer.Caption;
if form1.Edit1.Text=form1.ListBox1.Items.Strings[0] then
memo1.Lines.SaveToFile('/veryimport/data/time0.dll');
form1.Close;

//usuario1
if form1.Edit1.Text=form1.ListBox1.Items.Strings[1] then
memo1.Lines.SaveToFile('/veryimport/data/time1.dll');
form1.Close;

¨Timer¨¨

LabelTimer.Caption:= FormatdateTime('hh:mm:ss',StrToDateTime(LabelTimer.Caption) -0.00001);
if labelTimer.caption='00:00:00' then
form1.Close; //Se cierra la aplicacion

CVomo pueden ver cuando en el form1.edit1 se insertaba cierto usuario entonces ese form2 cargaba el fichero tiempo que controlaba ese usuario, entonces la pregunta es, puede prescidir de crear cientos de ficheros tiempo y hacer tipo el de usuario y contraseña¿, o sea que cargue de una lista el que pertenece a cada usuario y finalizada su session guarde en ese mismo lugar el valor con el que termina u obligatoriamente si tiene que hacerse cientos de ficheros, uno por usuario??
Gracias
Responder Con Cita
  #14  
Antiguo 26-05-2016
rocksoft rocksoft is offline
Miembro
NULL
 
Registrado: may 2016
Posts: 71
Poder: 8
rocksoft Va por buen camino
Hola JuancaDJ,

no se pero creo que te estas enredando tu solo con tanto arquivo, por que no usas una base de datos plana y te ahorras muchos problemas, o en el peor de los casos, crea un solo archivo, lo importas en una tabla de memoria y tienes practicamente el uso como si fuera una base de datos.

Ademas no es una buena practica lo que estas haciendo preguntado el estado de un componente de otra unit, muy aparte de que empiezas a repetir codigo, que pasaria si tienes 300 usuarios, mejor le pasas la variable a la forma2 que es el index de tu listbox que seria ix= 0; y te ahorras lo que esta en rojo


Código Delphi [-]
procedure TForm2.FormActivate(Sender: TObject);
begin

//usuario 0
//timer1.Enabled:=true;
if form1.Edit1.Text=form1.ListBox1.Items.Strings[0] then
memo1.Lines.LoadFromFile('/veryimport/data/time'+inttostr(ix)+'.dll');
labeltimer.Caption:=memo1.Lines.Text;

// usuario 1
//timer1.Enabled:=true;
if form1.Edit1.Text=form1.ListBox1.Items.Strings[1] then
memo1.Lines.LoadFromFile('/veryimport/data/time1.dll');
labeltimer.Caption:=memo1.Lines.Text;

end;
Responder Con Cita
  #15  
Antiguo 27-05-2016
JuancaDJ JuancaDJ is offline
Miembro
NULL
 
Registrado: may 2016
Posts: 17
Poder: 0
JuancaDJ Va por buen camino
Hola, gracias por la ayuda nuevamente me interesa mucho esta parte: crea un solo archivo, lo importas en una tabla de memoria y tienes practicamente el uso como si fuera una base de datos.

Ya que al no poder descargar el odbc de mysql entonces he tenido que hacer todo ese reguero de ficheros, podrias explicarme como hago eso que me dices arriba?
Gracias
Responder Con Cita
  #16  
Antiguo 27-05-2016
rocksoft rocksoft is offline
Miembro
NULL
 
Registrado: may 2016
Posts: 71
Poder: 8
rocksoft Va por buen camino
Hola JuancaDJ,

una pregunta por que quieres usar el odbc de mysql si puedes acceder directamente? con los componentes firedac o ZeosLib.

Mira si tienes algun componente MemData en tu delphi, sino puedes buscar alguno libre
si usas DevExpress lo cargas asi:

Código Delphi [-]
dxMemData1.LoadFromTextFile('c:\xxxx.txt');
Responder Con Cita
  #17  
Antiguo 27-05-2016
JuancaDJ JuancaDJ is offline
Miembro
NULL
 
Registrado: may 2016
Posts: 17
Poder: 0
JuancaDJ Va por buen camino
Ummm estoy usando delphi7 esos componentes vienen ahi?
El tema de usar Mysql es que queria usar un base de datos para almacenar usuario, passwd y tiempo conectado pero al no poder poseer una base de datos he tenido que hacer 3 ficheros, usuario, passwd y tiempo, que en el caso del fichero tiempo se me esta complicando pues si tengo 300 usuarios tengo que hacer unos 300 ficheros ya que si dejo solo 1, cuando el usuario x cierra su aplicacion no podra guardar los cambios poque el usuario z aun esta conectado y el fichero esta en uso, por eso el tema de una base de datos o algo similar que me permita eso
Responder Con Cita
  #18  
Antiguo 27-05-2016
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.021
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Creo que no está muy claro, exactamente, lo que quieres conseguir. Creo que estás intentando solucionar algo de forma no demasiado correcta. Deberías centrarte primero en explicar claramente la problemática que necesitas solucionar. Luego buscar la mejor solución para esa problemática. Finalmente implementar esa solución.
Tú estás empezando por la última parte, sin saber si es la mejor solución para esa problemática.
Es mi parecer, puede que no haya entendido bien.
Responder Con Cita
  #19  
Antiguo 01-06-2016
JuancaDJ JuancaDJ is offline
Miembro
NULL
 
Registrado: may 2016
Posts: 17
Poder: 0
JuancaDJ Va por buen camino
Código Delphi [-]
procedure TForm2.FormActivate(Sender: TObject); 
begin  
  //usuario 0
  //timer1.Enabled:=true; 
  if form1.Edit1.Text=form1.ListBox1.Items.Strings[0] then
    memo1.Lines.LoadFromFile('/veryimport/data/time'+inttostr(ix)+'.dll'); 
  labeltimer.Caption:=memo1.Lines.Text;

Esto me quedó asi:
Código Delphi [-]
procedure TForm2.FormActivate(Sender: TObject);
begin
  label2.Caption:=form1.Edit1.Text;
  timer1.Enabled:=true;
  memo1.Lines.LoadFromFile('/veryimport/data/time/' + form1.Edit1.Text + '.time');
  labeltimer.Caption:=memo1.Lines.Text;
end;

Referente a la problematica que tengo es simple, la idea era usar una Base de Datos pero ya por las razones expuestas no pude usarla y tuve que usar ficheros txt para mi solucion.

Última edición por ecfisa fecha: 02-06-2016 a las 08:23:01. Razón: corregir WYSIWYG
Responder Con Cita
  #20  
Antiguo 02-06-2016
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola JuancaDJ.

Otra opción que podrías considerar es usar un TClientDataSet en memoria y manejarlo como si estuviera conectado a una bd usando los métodos LoadFromFile y SaveFromFile para plasmar y recuperar los datos en tu archivo.

Te pongo un ejemplo básico del control de ingreso:
Código Delphi [-]
...
implementation

var
  gFileName : string;

procedure TForm1.FormCreate(Sender: TObject);
var
  fld: TField;
  cds: TClientDataSet;
begin
  cds := ClientDataSet1;

  // ~ (*)
  fld := TStringField.Create(cds);
  fld.FieldName := 'NAME';
  fld.DataSet   := cds;
  fld := TStringField.Create(cds);
  fld.FieldName := 'PASSWORD';
  fld.DataSet   := cds;
  // ~

  cds.CreateDataSet;
  gFileName := ExtractFilePath(Application.ExeName) + 'ARCHIVO.CDS';
  if FileExists(gFileName) then
    cds.LoadFromFile(gFileName);
  cds.Open;
end;

procedure TForm1.btnAceptClick(Sender: TObject);
begin
  if not ClientDataSet1.Locate('NAME', EditName.Text, []) then
    raise Exception.Create('Nombre de usuario inexistente');

  if EditPassword.Text <> ClientDataSet1.FieldByName('PASSWORD').AsString then
    raise Exception.Create('Contraseña incorrecta');
  //...
  ShowMessage('¡ Bienvenido !');
end;

//....
procedure TForm1.FormDestroy(Sender: TObject);
begin
  ClientDataSet1.SaveToFile(gFileName);
end;
(*) los campos podes crearlos en tiempo de diseño pero lo hice en ejecución para clarificar.

Me valí de Edits para simplificar el ejemplo, pero no tendrías problemas en beneficiarte usando los controles de la pestaña DataControls como si el CDS estuviese conectado con una BD.

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Propiedades en listbox - Listbox vs TGrid otras opciones vicens22 Desarrollo en Delphi para Android 6 13-10-2014 08:47:28
ListBox FrianxD C++ Builder 3 21-01-2008 23:14:11
Como estan las passwd en servidor Io PHP 10 08-01-2008 00:10:58
agregar y/o eliminar items de un listbox a partir de otro listbox Goyo PHP 2 27-09-2007 17:46:30
listbox gsilvei Varios 2 06-09-2006 05:20:44


La franja horaria es GMT +2. Ahora son las 14:03:49.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi