Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Coloboración Paypal con ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 12-07-2008
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.145
Poder: 36
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Generalmente, los formularios en que se solicita el "registro" a un usuario, se muestran de forma "modal": no permiten hacer nada en el resto de la aplicación, obligando al usuario a hacer "algo" con el formulario que le presentamos. El asunto podría quedar tal que así:

Código Delphi [-]
begin
  with TfrmUserRegistry.Create(nil) do
  try
    if (ShowModal() = mrOk) then
    begin
      // El usuario "aceptó"
    end else begin
      // El usuario "canceló"
    end;
  finally
    Free(); // Liberamos el formulario
  end;
end;

El código anterior crea, muestra y comprueba el resultado de mostrar el formulario "modalmente". Acto seguido, y, en cualquier caso, libera el formulario en cuestión. Ahora bien, tal como yo lo veo, tú deberías comprobar si el usuario proporcionó datos correctos en "El usuario aceptó". Y no hacer "nada" si "El usuario canceló".

Si el usuario "aceptó" comprobarías que los datos que ha proporcionado son válidos. Si lo son... y no quieres que dicho usuario vuelva a ver el formulario, la cosa creo que pasaría por guardar dichos datos en algún sitio. Tú mismo mencionas la base de datos de tu aplicación. Entonces, nos queda que, antes de mostrar el formulario, deberíamos comprobar si el usuario ya se "registró" antes. Algo como:

Código Delphi [-]
begin
  if not UserHaveRegistryData() then
  begin
    with TfrmUserRegistry.Create(nil) do
    try
      if (ShowModal() = mrOk) then
      begin
        // El usuario "aceptó"
      end else begin
        // El usuario "canceló"
      end;
    finally
      Free(); // Liberamos el formulario
    end;
  end;
end;

La idea es que la función (o método) "UserHaveRegistryData()" compruebe que existe información en la base de datos (por ejemplo) que confirme que el usuario ya "registró" la aplicación. Si no lo ha hecho, le mostraremos el formulario para que lo pueda hacer, y, si lo ha hecho... no le mostramos formulario alguno.

Pero, igual es que me he perdido algo, porque, yo creo que esto que digo tú ya lo sabes... ¿No?
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #2  
Antiguo 12-07-2008
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
hola, un comentario tansolo : guardas los datos en una tabla llamada SEGURIDAD? no es algo demasiado evidente
Responder Con Cita
  #3  
Antiguo 12-07-2008
Avatar de BuRtOn
BuRtOn BuRtOn is offline
Miembro
 
Registrado: ene 2008
Ubicación: Bucaramanga
Posts: 215
Poder: 19
BuRtOn Va por buen camino
Saludos david, muchisimas gracias brother, ya tengo la idea, y no , no sabia lo que me estas explicando, pero la pregunta es, tu savez que yo almaceno el ID del disco duro en una base de datos, como hago para comprobar que ese ID que tengo grabado en mi base de datos nunca va a cambiar, como dije anteriormente lo que hago es si das click en el boton serial el te extrae el ID del disco y lo almacena en una tabla y cuando el usuario ejecuta la aplicacion por segunda vez , como te dije el formulario no debe salir, por que se supone que el usuario esta registrado, y si no se registro como tu dices que no deje ejecutar la aplicacion....pero me confundi por algo, que diferencia tiene el primer codigo con el segundo ?? es que nunca habia hecho algo asi, solo hasta ahora, y pues como vez no es que sea un experto en el tema....y donde colocas el comentario de //El usuario ''acepto'', El usuario ''cancelo'' y //Liberar formulario, como es la sintaxis de estos comentarios, con un simple showmodal , osea se colocaria si acepta el usuario Principal.showmodal, o estoy equivocado, y en el que dices liberar formulario?, por favor te agradeceria que me colaboraras David eres el unico que se a hacertado a lo que necesito.....y Muchas gracias por tu tiempo amigo.
Responder Con Cita
  #4  
Antiguo 12-07-2008
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 28
Delphius Va camino a la fama
Hola BuRtOn,
por lo que estoy comprendiendo del tema, tu problema es como determinar si el usuario es registrado o no. Tu problema es del tipo lógico/diseño.

Lo más natural es que al momento en que se ejecuta el aplicativo se dispare una función que se encargue de ello.

Por simplicidad asumamos una función UsuarioRegistrado() que devuelve un boleano:

Código Delphi [-]
function UsuarioRegistrado: boolean;
begin
   // lo que haya que hacer para determinar si está registrado
   // en ocasiones basta con hacer una consulta del tipo:
   // select top 1 ID_REGISTRO from TABLA_REGISTRO
   // Tal vez result vendría a tener una forma como esta:
  result := query1.RecordCount = 1
end;

Bueno, esa función de ejemplo lo que hace es emitir una consulta contra la base de datos en busca de un registro en particular (un ID_Registro).
El algoritmo está diseñado para que siempre y cuando exista un y solo un registro en la tabla TABLA_REGISTRO se de por válido que el usuario se registró.

¿Cuando se ejecuta esta función?
Lo más obvio (y sencillo) podría sugerir en el OnCreate de la forma principal. Se podría hacer algo como esto:

procedure FrmMainOnCreate(Sender: TObject);
begin
UserValido := UsuarioRegistrado;
end;

Siendo UserValido una propiedad, o variable.

Y bueno, nos resta ahora solamente el tema de operar en base a este resultado. Lo más sencillo de hacer es como señala Dec:

Código Delphi [-]
if NOT UserValido
  then begin
           try  
             with TfrmRegistro.Create(nil) do
             ...   
           finally
             TfrmRegistro.Free; 
           end; 
         end;

Ahora bien, ¿que se necesita para que ejecute normalmente la función UsuarioRegistrado? Que haya una conexión establecida.... por tanto, antes de ejecutar dicha función deberá asegurarse de esto.

Que quiero hacerte notar, que tu problema es del tipo lógico. Sugiero que realices una búsqueda en los foros, porque este tema se ha tratado en otras ocasiones.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #5  
Antiguo 12-07-2008
Avatar de BuRtOn
BuRtOn BuRtOn is offline
Miembro
 
Registrado: ene 2008
Ubicación: Bucaramanga
Posts: 215
Poder: 19
BuRtOn Va por buen camino
Saludos delphius....gracias por tu tiempo...pues en si mi problema es como hago, para mostrar el formulario de seguridad solo una vez y listo, que no saliera mas despues que el usuario se registre.....eso es todo....y que siempre haga la comsulta que el ID que esta en la base de datos corresponda al ID de la maquina donde se instalo la aplicacion.....Gracias por tu tiempo prestado Delphius....
Responder Con Cita
  #6  
Antiguo 12-07-2008
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 28
Delphius Va camino a la fama
Cita:
Empezado por BuRtOn Ver Mensaje
Saludos delphius....gracias por tu tiempo...pues en si mi problema es como hago, para mostrar el formulario de seguridad solo una vez y listo, que no saliera mas despues que el usuario se registre.....eso es todo....y que siempre haga la comsulta que el ID que esta en la base de datos corresponda al ID de la maquina donde se instalo la aplicacion.....Gracias por tu tiempo prestado Delphius....
A ver BuRtOn,
Sería oportuno que nos respondas a estas preguntas:
1. ¿Todas tus formas están en Auto-Create o por el contrario la creas por demanda?
2. ¿Es un diseño MDI?
3. ¿En que consiste y como está diseñada la tabla en donde se registrará el ID?
4. ¿Quien crea a quien?
5. ¿Quien libera a quien?
6. ¿Por casualidad haces usos de datamodules?

Sería muy útil que nos detallases mejor tu situación. Dependiendo de como estés estructurando tu diseño se deberá darte alternativas para resolver tus problemas.

No veo donde está el problema BuRtOn. La solución por lo general se lleva haciendo esto:
1. Al momento de ejecutar la aplicación se chequea si el usuario es registrado
2. Si no está regitrado
2.1. "Mostrar" la forma de registro
2.2. En otro caso (si esta registrado) se habilitan el trabajo normalmente.

¿Cuál creo que es tu problema? Que no estás repartiendo bien la lógica:
¿Quien determina si el usuario es registrado? El form principal
¿Quien se encarga de llamar al form de registro? El form principal
¿Quien se encarga de registrar al usuario adecuadamente? El form de registro

Una vez que el usuario ha sido registrado el form se libera. La cuestión es que el form de registro sea crea y/o muestra sólo cuando se comprueba que en la base de datos no existe dicho registro.
Existe (y debería existir) un sólo punto en donde se comprueba la validez de la registración: al momento de crearse el form principal. Y en base a esto, el diseño que tienes debería ser capaz de determinar que hacer.

Como he dicho antes, tu problema es de diseño como de lógica.
Lamentablemente necesitamos que nos detalles mejor tu situación porque asi no te podremos ser de ayuda.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]

Última edición por Delphius fecha: 12-07-2008 a las 16:45:01.
Responder Con Cita
  #7  
Antiguo 12-07-2008
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
como dice Delphius, creo que es un problema de diseño

1.- iniciar aplicación
2.- comprobar si tenemos algun registro de id de disco duro / usuario
2.1.- si no lo tenemos: creamos la form de registro y lo registramos con un user y con el ID de disco duro
2.1.- si lo tenemos, pero es invalido, avisar y salir (posible reinstalación en otro pc)
2.2.- si lo tenemos, y es valido, continuar...
...

creo que esta es tu idea. Siguiendo esta idea, si te fijas, solo habra un único registro, y por lo tanto un único usuario, por lo que no tiene mucho sentido crear un registro de usuarios. Lo mejor seria simplemente, olvidarse del 'usuario'y del form del registro, que es lo que te esta creando confusión pues son innecesarias, y registrar la aplicación con el ID del disco duro.

1.- iniciar aplicación
2.- comprobar si tenemos el id del disco duro (por ejemplo, en un fichero, grabado en un recurso o bien en el registro como indicaba dec)
3.- si no lo tenemos, lo leemos y lo grabamos en nuestro programa (o registro, fichero, etc...)
3.- si lo tenemos, lo recogemos y comparamos con el del disco duro
3.1 - fallo : avisamos y salimos
3.2 - no fallo : se continua...
....

PD: si por el contrario aun quieres que se registren los usuarios (varios de ellos) entonces forzosamente te tiene que aparecer el form de registro o login al principio de la aplicación para comprobarlo con tu base de datos.

PDD : aun, si quieres q tu aplicación corra en varias maquinas, un usuario por maquina, deberia ser algo asi
1.- iniciar aplicación
2.- leer id de disco duro
3.- comprobar en base de datos si existe ese id
3.1 - si no existe : posible nueva instalación. Se abre el form de registro, pidiendo user y el id, y se graba en base de datos
3.2 - si existe se continua

como ves, este ultimo ejemplo registraria una nueva instalación con un nuevo usuario, pero si te fijas no sirve absolutamente de nada, al menos como protección de copia, pues si lo reinstalas en otro pc simplemente te pediria un nuevo usuario y continuaria. si por el contrario la lista de usuarios ya te es conocida, entonces lo mejor seria:

1.- iniciar aplicación
2.- pedir usuario
3.- comprobar usuario en base de datos
3.1.- existe : pedir id
3.1.1.- leer id de disco duro y comparar con la entregada
3.1.1.1.- fallo : aviso y salir
3.1.1.2.- no fallo : continuar normalmente
3.2.- no existe : pedir nuevo usuario o bien avisar y salir

este ultimo caso seria para proteger 'cada pc', para que usuarios que no sean el habitual no tengan acceso (aunque claro esta conociendo el usuario, ya se entraria, por lo que no es tampoco demasiado eficiente).

Creo q lo mejor es que nos digas de q quieres proteger el programa : de copia digamos ilegal o de acceso de usuarios invalidos.

Última edición por coso fecha: 12-07-2008 a las 16:48:21.
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
Abrir un formulario hijo solo una vez Walterdf Varios 5 08-04-2008 17:15:01
dll + mostrar formulario albertoP OOP 1 04-12-2006 08:21:20
mostrar sólo 5 caracteres de un varchar(75) Giniromero Firebird e Interbase 4 19-09-2006 12:37:41
mostrar solo dos decimales clanmilano Varios 1 15-11-2005 23:31:52
mostrar SOLO cliente de los que tengo un sólo registro Giniromero SQL 15 11-06-2004 12:33:19


La franja horaria es GMT +2. Ahora son las 16:47:34.


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