Ver Mensaje Individual
  #3  
Antiguo 12-11-2009
alquimista_gdl alquimista_gdl is offline
Miembro
 
Registrado: ago 2008
Ubicación: Guadalajara, México
Posts: 78
Reputación: 16
alquimista_gdl Va por buen camino
Hola Al,

Gracias por tu respuesta.

Se trata de un componente grid de DevExpress, de las últimas versiones que muestra los datos de un query. Anteriormente el query base era un simple "select * from z_usuario" y todo bien. Ahora es:

Cita:
select
z_usuario.usuario_id,
z_usuario.zus_usuario,
z_usuario.zus_nombre,
zus_contrasena,
zus_telefono,
zus_email,
zus_localidad,
zus_notas,
zgr_nombre
from z_usuario_grupo_x_v right join z_usuario
on(z_usuario.usuario_id = z_usuario_grupo_x_v.usuario_id)
order by zus_nombre
En el SQLDataSet y ClientDataSet he especificado el campo llave (usuario_id) y los campos que debe actualizar (los que tienen prefijo "zus"). Se trata de una relación N_N entre Usuarios y sus Grupos, y la consulta raíz se hace sobre la tabla de intersección "z_usuario_grupo_x" sobre su vista "z_usuario_grupo_x_v".

Por otro lado, y para indicar a qué tabla se hacen los cambios, en el evento OnGetTableName del Provider, tengo:

Cita:
procedure Tz_DataModule_Seguridad.DataSetProvider_UsuarioGetTableName(
Sender: TObject; DataSet: TDataSet; var TableName: WideString);
begin
if DataSet.Name = 'SQLDataSet_Usuario' then
TableName:= 'Z_USUARIO';

end;
Como me cansé un poco de el DataSet anidado (aunque estaba funcionando perfectamente antes de este cambio), opté por separar los dataset Meastro y Detalle, cada uno con su Provider; los relacionoa pata" vía código, y ahora al oprimir el botón de "Cambiar", sale el error "Key violation"

El error lo está marcando en este contexto:

Cita:
procedure TLista_bd.CambiosExecute(Sender: TObject);
begin
DataSource.DataSet.Refresh; <--- Aquí marca el error
DataSource.DataSet.Edit;
forma.MuestraForma;
DataSource.DataSet.Refresh;
self.Action_ControlBotonesExecute(self);

end;
Este es el método activado para cambiar el registro elegido en el Grid, cuando el usuario oprime el botón "cambiar", en donde DataSource es:

DataSource:= z_DataModule_Seguridad.DataSource_Usuario;


Alguna idea?
Responder Con Cita