Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Funcion Locate (https://www.clubdelphi.com/foros/showthread.php?t=58603)

laukri 25-07-2008 13:50:22

Funcion Locate
 
Hola a todos!

Tengo que hacer la administracion de usuarios de mi sistema. Y quiero asignarle distintos permisos a cada uno, el problema es el siguiente:
Cuando el usuario todavia no esta cargado en la tabla permisos, lo agrega y le carga los permisos correspondiente. Ahora, cuando el usuario ya tiene permisos asignados y se los quiero modificar me da error de clave repetida. Lacuestion es que yo uso el locate para posicionarme en el registro del usuario, pero siempre me da "Falso" como si no existiera, pero existe...
pongo el codigo:
Código Delphi [-]
var
  auxUser: String;
begin
  inherited;
  auxUser:= Trim(ds.DataSet.FieldByName('nombre').AsString);
  if TClientDataSet(dsPermisos.DataSet).Locate('IDUSUARIO',auxUser, [loCaseInsensitive]) then
    dsPermisos.DataSet.edit
   else dsPermisos.DataSet.Insert;
  dsPermisos.DataSet.FieldByName('idUsuario').AsString:= auxUser;
  guardarCheck;
  aceptarCambios;
end;
Espero que me puedan ayudar...Gracias

Caro 25-07-2008 14:10:22

Hola laukri

Código Delphi [-]
 auxUser:= Trim(ds.DataSet.FieldByName('nombre').AsString);

Tu campo nombre no debería ser idUsuario, o es que en la otra tabla el IdUsuario es el nombre de la primera.

Saluditos

laukri 25-07-2008 15:10:58

gracias por tu pronta respuesta.
Tengo 2 tablas: usuarios y premisos. en la primera tengo los campos "nombre" y "clave" y en la segunda "idUsuario" y todos los permisos.
Saludos

Caro 25-07-2008 16:07:46

Cita:

Empezado por laukri (Mensaje 303246)
Tengo 2 tablas: usuarios y premisos. en la primera tengo los campos "nombre" y "clave" y en la segunda "idUsuario" y todos los permisos.

Entonces mas o menos tus datos estan así:

Código:

Tabla usuarios
nombre | clave
----------------
Maria  | xxxx
Jose  | xxxx
 
Tabla permisos
idUsuario | DemasCampos
----------------------
Maria    | xxxxxxxxxxx
Jose      | xxxxxxxxxxx

Si es así como estan tus datos, cuando recuperes el nombre de la tabla usuarios en tu variable auxUser y eso le pasas al locate que busca en la tabla permisos, si te debería encontrar al registro. Pero como que no es muy logico que este de esa forma, no tienes un codigo o IdUsuario en tu tabla usuarios??.

Ahora también has la prueba de trabajar directamente con el DataSet que esta asociado a tu DataSource (Tu query o tu table), en vez de hacer ds.DataSet.FieldByName, si fuera un Query entonces haces Query1.FieldByName.

Con que componentes estas trabajando??

Código Delphi [-]
 if TClientDataSet(dsPermisos.DataSet).Locate('IDUSUARIO',auxUser, [loCaseInsensitive]) then

porque haces el Cast a un TClientDataSet??

Saluditos

delphidec 28-07-2008 07:43:58

Hola laukri.

Yo en tu lugar no usaria el campo nombre como clave en la tabla de permisos por la simple razon que puede haber varias peronas de nombre "Juan" por ejemplo. Es ahi donde surge el error de "clave duplicada".
Yo asociaria ambas tablas con campo numerico autoincrement para asegurarme que cada nuevo usuario tienen una clave nueva y distinta al anterior.

Por otro lado el problema del Locate que no te devuleve nada puede venir del Cast que haces cuando realizas la consulta ya que aunque tuvireas 100 usuarios con nombre (y clave) "Juan" deveria traerte el primero que encuentra.

Saludos !

laukri 28-07-2008 11:45:19

GRacias por sus respuesta voy a probar lo que me han marcdo y despues les cuento.
Trabajo con los componentes dbexpress

laukri 28-07-2008 13:54:05

Le agregue un campo a la tabla usuarios y quedo:
Código:

tabla usuarios
idUser | nombre | clave

y anda perfecto....
GRacias a Todos por su ayuda

Código Delphi [-]
begin
  inherited;
  user:= trim(ds.DataSet.FieldByName('idUser').AsString);
  if dsPermisos.DataSet.Locate('idUsuario',user,[loCaseInsensitive]) then
    begin
      activarCheck;
    end;
end;


La franja horaria es GMT +2. Ahora son las 23:44:46.

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