Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 25-07-2008
Avatar de laukri
laukri laukri is offline
Miembro
 
Registrado: dic 2007
Posts: 38
Poder: 0
laukri Va por buen camino
Question 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
Responder Con Cita
  #2  
Antiguo 25-07-2008
Avatar de Caro
*Caro* Caro is offline
Moderadora
 
Registrado: jul 2004
Ubicación: Cochabamba, Bolivia
Posts: 2.544
Poder: 22
Caro Va por buen camino
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
__________________
Disfruten cada minuto de su vida a lado de sus seres queridos como si fuese el ultimo, uno nunca sabe lo que puede pasar.
Responder Con Cita
  #3  
Antiguo 25-07-2008
Avatar de laukri
laukri laukri is offline
Miembro
 
Registrado: dic 2007
Posts: 38
Poder: 0
laukri Va por buen camino
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
Responder Con Cita
  #4  
Antiguo 25-07-2008
Avatar de Caro
*Caro* Caro is offline
Moderadora
 
Registrado: jul 2004
Ubicación: Cochabamba, Bolivia
Posts: 2.544
Poder: 22
Caro Va por buen camino
Cita:
Empezado por laukri Ver Mensaje
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
__________________
Disfruten cada minuto de su vida a lado de sus seres queridos como si fuese el ultimo, uno nunca sabe lo que puede pasar.
Responder Con Cita
  #5  
Antiguo 28-07-2008
delphidec delphidec is offline
Registrado
 
Registrado: jul 2008
Ubicación: Argentina
Posts: 5
Poder: 0
delphidec Va por buen camino
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 !
Responder Con Cita
  #6  
Antiguo 28-07-2008
Avatar de laukri
laukri laukri is offline
Miembro
 
Registrado: dic 2007
Posts: 38
Poder: 0
laukri Va por buen camino
GRacias por sus respuesta voy a probar lo que me han marcdo y despues les cuento.
Trabajo con los componentes dbexpress
Responder Con Cita
  #7  
Antiguo 28-07-2008
Avatar de laukri
laukri laukri is offline
Miembro
 
Registrado: dic 2007
Posts: 38
Poder: 0
laukri Va por buen camino
Wink

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;
Responder Con Cita
Respuesta



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
Todo sobre la función Locate Alexandro Conexión con bases de datos 7 24-05-2008 18:19:33
Locate mauqu Varios 9 06-08-2007 17:27:20
Cómo se usa la función Locate? Javi2 Varios 4 25-04-2007 10:52:00
Pregunta sobre la funcion LOCATE()? Luis Alberto Varios 6 16-12-2005 00:02:55
Error con la funcion "locate" de una tabla tannyk Tablas planas 1 01-02-2005 07:07:41


La franja horaria es GMT +2. Ahora son las 09:39:09.


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