Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 26-07-2007
ManiacPC ManiacPC is offline
Miembro
 
Registrado: jul 2007
Ubicación: Chile
Posts: 14
Poder: 0
ManiacPC Va por buen camino
Resultados de Postgres y Zeos

Buenas,


Tengo una consulta
Tengo un formulario de usuario y contraseña que quiero verificar a traves de la base de datos.

Logré conectar a la base de datos sin problemas, y traer datos mediante el ADD y Exec a un DBGRId.


Pero mi problema es el siguiente, quiero localizar al usuario ingresado
(P.ej: Usuario N° 5) de cierto campo de la base de datos, y no se como traer los datos ejecutando los componentes para compararlos... Se llevarlos al DBGrid como dije, pero si quisiera traer los resultados y compararlos con lo que introdujo el usuario como podria hacerlo?
Como trabajar con el resultset? Encuentro bastante pobre la documentacion que existe sobre Zeos :S y lo único que me ha salvado es este milagroso foro.


Gracias
Responder Con Cita
  #2  
Antiguo 26-07-2007
mamaro mamaro is offline
Miembro
 
Registrado: mar 2004
Posts: 79
Poder: 21
mamaro Va por buen camino
Hola

Para empeza te diré que entiendo muy bien tu pregunta, yo utilizo los componentes Zeos con bases de datos Firebird hace bastante tiempo .. y sí es cierto ... la documentación es bastante pobre ...

Creo que lo que quieres hacer es:
1) Guardar los usuarios y contraseñas dentro de la base de datos.
2) Dependiendo del usuario y clave que ingresa el usuario en un formulario darle acceso a cierto lugares.

¿es así?

Si es así, supongamos que tienes:
1) Un formulario con el nombre FLogIn una caja de edición (edUsuario), y una caja de edición con máscara para la clave (edClave).
2) Un DataModule (que podríamos llamarle DM), con un TZConnection (lo llamamos conexion), y un TZReadOnlyQuery (que llamaremos qValida). En connection del qValida se pone Conexion, y en SQL, lo siguiente:

Código SQL [-]
Select *
from Usuarios
where (usuario= :NOMBRE )
and (clave= :PASS )

(suponiendo que tengas una tabla Usuarios, con campos usuario, y clave ... cada uno adaptarlo a sus necesidades)

IMPORTANTE: Los componentes Zeos tienen un BUG con los parámetros, éstos deben tener un espacio adelante y otro atrás para que funcionen bien (ésto no lo leí en ningún lado ... fué más bien a fuerza de darme la cabeza contra la pared).


En el DataModule:

Código Delphi [-]
...
  public
    function Validar(Usuario,Clave:string):boolean;
  end;

...

function Validar(Usuario,Clave:string):boolean;
begin
  conexion.user:='usuarioadministrador';
  conexion.password:='clavedeadministrador';
  conexion.connect;
  qValida.close; // nos aseguramos que la consult esté cerrada
  qValida.ParamByName('NOMBRE').asstring:=Usuario;
  qValida.ParamByName('PASS').asstring:=Clave;
  qValida.open;

  // aquí van las instrucciones con las que levantás los permisos
  // o lo que sea que quieras hacer

end;

En el FLogIn (por ejemplo):

1) Incluyes el DataModule en la cláusula uses:
Código Delphi [-]
uses ..., DM;

2) En el evento onClick del botón OK:
Código Delphi [-]
procedure TFLogIn.ButtonOKClick(Sender: TObject);
begin
  if (DM.Validar(edUsuario.text,edClave.text)) then 
  begin
    // aquí el usuario está validado, etc....
  end;
end;

Saludos y espero te sirva
Responder Con Cita
  #3  
Antiguo 27-07-2007
ManiacPC ManiacPC is offline
Miembro
 
Registrado: jul 2007
Ubicación: Chile
Posts: 14
Poder: 0
ManiacPC Va por buen camino
De nuevo probando

Hola a todos
Gracias Mamaro por la respuesta,
Creo que me simplificaste horas y dias de busqueda :P
Me has aclarado muxas muxas dudas de todas formas....
He intentado lo que me has dicho, casi le has dado en el clavo a todo....

Pero me arroja un error de que no encuentra:
"ZQuery1 Parameter 'numerovendedor' not found"

Envio el código, a ver si me puedes ayudar a encontrar cual es el error!!!

Código Delphi [-]function TFormPrincipal.Fase1Validar(Usuario,Clave:Integer):boolean; begin DM.ZQuery1.SQL.Clear; DM.ZQuery1.SQL.ADD('SELECT * From vendedores WHERE (numerovendedor= ' + IntToStr(Usuario) + ' ) and (passwordvendedor= ' + IntToStr(Clave) + ' )'); DM.ZQuery1.close; // nos aseguramos que la consult esté cerrada If (DM.ZQuery1.ParamByName('numerovendedor').AsInteger = Usuario) and (DM.ZQuery1.ParamByName('passwordvendedor').AsInteger = Clave) then Application.MessageBox('CORRECTO','Look', MB_OK) Else Application.MessageBox('INCORRECTO','Look', MB_OK); DM.ZQuery1.open; // aquí van las instrucciones con las que levantás los permisos // o lo que sea que quieras hacer end;

En realidad lo que quiero lograr, es queme compruebe el numero del vendedor y la contraseña que seria el mismo numero, para llamarlo lo tengo asi :

Código Delphi [-] Fase1Validar(StrToInt(TxtNumeroVendedor.Text), StrToInt(TxtPasswordvendedor.Text));


Aunque escribiendo esto, me doy cuenta que las conversiones estan de sobra :S

Lo arreglaré para el siguiente post.

En mi tabla VENDEDORES tengo:
numerovendedor
passwordvendedor
nombrevendedor
apellidovendedor

y quiero lograr sacarlos ambos :S
Ojalá no sea mucho el pedir, porque en verdad no se que hacer con este error

Gracias
Responder Con Cita
  #4  
Antiguo 01-08-2007
mamaro mamaro is offline
Miembro
 
Registrado: mar 2004
Posts: 79
Poder: 21
mamaro Va por buen camino
Thumbs up hola

tienes un problema con la consulta, estás tratando de darle valores a un parámetro que no existe ... ésta debería ser la consulta (o algo parecido al menos):

Código Delphi [-]
begin 
  with DM do begin
    ZQuery1.SQL.Clear;
    ZQuery1.SQL.ADD('SELECT * From vendedores WHERE (numerovendedor= :NUM ) and (passwordvendedor= :PASS )'); // linea modificada
  
    ZQuery1.ParamByName('NUM').asinteger:=Usuario; //asignamos el valor para que actúe de filtro
    ZQuery1.ParamByName('PASS').asinteger:=Usuario; //asignamos el valor para que actúe de filtro
    ZQuery1.Open;
  If (ZQuery.RecordCount>0) then     
    // Correcto
  Else
    // Incorrecto
    
    ...

  end;
end;

Los parámetros llevan dos puntos adelante (NUM y PASS), y para saber si los datos que pasaron son correctos debes abrir la consulta (para ver si algún registro concuerda con las variables pasadas).

ahora bien ... ... ¿los usuarios tienen un número como password?

Saludos
Responder Con Cita
  #5  
Antiguo 01-08-2007
mamaro mamaro is offline
Miembro
 
Registrado: mar 2004
Posts: 79
Poder: 21
mamaro Va por buen camino
Cool Aclaración

Para que el código que publicas quede con un formato correcto puedes utilizar los botones que están arriba a la derecha del texto cuando escribes.

El botón que tiene un dibujo igual al icono de este sitio por ejemplo sirve para poner código Delphi, el de la derecha para poner código SQL, etc.

Cada botón te pone dos etiquetas: una de tipo [ALGO] y otra de tipo [/ALGO] dentro de esas dos etiquetas pones el código ... y listo.
Responder Con Cita
  #6  
Antiguo 02-08-2007
ManiacPC ManiacPC is offline
Miembro
 
Registrado: jul 2007
Ubicación: Chile
Posts: 14
Poder: 0
ManiacPC Va por buen camino
Exclamation Gracias!

Hey mamaro, gracias otra vez.
Soy un completo novato en bases de datos con delphi,
habia programado antes haciendo miles de cosas en delphi, pero nunca trabajado con esto :P
Un novato en esto, pero en bases de datos he trabajado mucho conectando de asp y php, etc.

RecordCount es un comando que me serà de mucha ayuda, pero me imagino que tengo que estudiar lo fundamental de como trabajaba básicamente delphi con el odbc y ole para hacerme familiar a la estructura de zeos (esta basada y acoplada en la forma de trabajo con bd de delphi) y lo estoy haciendo, con un tutorial muy bueno de about.com con el controlador postgresql para odbc (un poco tedioso que tenga que pasar por ado, ole, odbc y recibir respuesta recien), aunque funciona a la perfeccion, diria que es el controlador mas estable de postgresql.

Voy a probar con el codigo que me has escrito, ahora entiendo porque dentro del select aparece el :NUM y no ' + :NUM + '

Tengo el programa guardadito en mis pruebas alternativas con el zeos... y si, bien parece raro que la contraseña sea un nùmero
Pero es un requisito para trabajar rapido en terminales donde solo funcionará el tpv, y es de exclusiva responsabilidad del usuario no equivocarse porque una venta quedaria registrada a otro nombre y por ende no calzará el cierre de caja al final del turno. En el servidor se harán los procesos mas delicados.
Aunque estuve pensando y tengo el algoritmo testeado para encriptar de forma tradicional una cadena de texto y desencriptarla por crypt32. Si quieres te la envio

Gracias mamaro una vez mas, te tengo noticias de nuevo :P
Espero que para la proxima ya esté mas "pulido"
Hey un millon de gracias man
Bye
Responder Con Cita
  #7  
Antiguo 02-08-2007
mamaro mamaro is offline
Miembro
 
Registrado: mar 2004
Posts: 79
Poder: 21
mamaro Va por buen camino
Thumbs up hola

Yo utilizo Zeos hace bastante tiempo y a no ser por ese bug que te comenté .. no tengo quejas, por ahí estube viendo una comparativa de las velocidades de los distintos métodos de acceso a una base de datos, y Zeos (según publican) es una de las alternativas más lentas

...

tras eso he hecho varias pruebas con distintos componentes (que según ahí publican son algo más rápidos), pero la performance global del sistema no se ha visto afectada .. de hecho algunos me complican más la programación que la diferencia de microsegundos que gano en una instrucción

Creo que al final todo es un tema de los componentes con los que te acostumbres a trabajar.

Saludos.

PD: Las pruebas las hice con un motor de datos Firebird (en varias versiones), pero supongo que esto es extrapolable a PostgreSQL.
Responder Con Cita
  #8  
Antiguo 04-08-2007
ManiacPC ManiacPC is offline
Miembro
 
Registrado: jul 2007
Ubicación: Chile
Posts: 14
Poder: 0
ManiacPC Va por buen camino
Smile Logre el primer paso

Joder Mamaro,
Te debo una botella de vino, son de muy buena calidad por aqui jejeje.
Por fin me desaponché, resulto lo querido, deseaba mostrartelo :

Código:
 
 
  if (Usuario <> '') AND (Clave <> '') Then
  Begin
   With DM do begin
    Consulta.Close;
    Consulta.SQL.Clear;
    Consulta.SQL.Add('Select * FROM vendedores ');
    Consulta.SQL.Add('WHERE ( numerovendedor = :PUSUARIO ) ');
    Consulta.SQL.Add('AND ( passwordvendedor = :PCLAVE  )');
    Consulta.Parameters.ParamByName('PUSUARIO').Value := Usuario;
    Consulta.Parameters.ParamByName('PCLAVE').Value := Clave;
    Consulta.Open;
    if (DSConsulta.DataSet.RecordCount = 1) Then
    Begin
       with DSConsulta.DataSet do begin
        with BarraVendedor do begin
        Panels[0].Text := 'Vendedor : ' + FieldByName('nombresvendedor').Value + ' ';
        Panels[0].Text := Panels[0].Text + FieldByName('apellidosvendedor').Value;
        Panels[1].Text := 'Numero : ' + IntToStr(FieldByName('numerovendedor').Value);
        end;
      end;
    end;
   end;
  end
  else
  begin
    Application.MessageBox('Debe ingresar un usuario y contraseña','Advertencia', MB_OK);
    TxtNumeroVendedor.Text := '';
    TxtPasswordVendedor.Text := '';
    TxtNumeroVendedor.SetFocus;
  end;
Te has pasado, tu ayuda me sirvio bastante
Gracias!!!!!!!!!
Responder Con Cita
  #9  
Antiguo 06-08-2007
mamaro mamaro is offline
Miembro
 
Registrado: mar 2004
Posts: 79
Poder: 21
mamaro Va por buen camino
Talking Salud!!

jaja .. bueno .. te diré que por estos lados lo que es bueno es el asado .. cualquier cosa mi correo es maas@montevideo.com.uy.

Saludos.

PD: si me envías un correo ponle Amigo del Club Delphi, o algo así para que no lo elimine.
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
Delphi con Postgres FlacoNet PostgreSQL 11 15-02-2010 16:37:46
Cómo cerrar conexión? Delphi, Zeos y Postgres mangels PostgreSQL 4 16-11-2007 16:00:59
Postgres, Zeos y Delphi 7 quali PostgreSQL 3 15-03-2007 22:41:39
Delphi y Postgres trex2000 Conexión con bases de datos 2 19-09-2006 16:23:38
Conexion xon Postgres nuquen Linux 6 25-06-2003 20:33:08


La franja horaria es GMT +2. Ahora son las 17:17:04.


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