Club Delphi  
    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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 18-10-2017
Avatar de The Cid James
The Cid James The Cid James is offline
Miembro
NULL
 
Registrado: jun 2013
Posts: 129
Poder: 11
The Cid James Va por buen camino
Question Seleccionar valor para modificar

Bueno tengo dbgrid con una lista (en este caso muestra los datos de clientes) ahora mi problema es el siguiente.
Quiero que el cliente seleccionado me abra un nuevo form en modo de edición, para cambiar los datos si es que fuera necesario llamando a otro form creado para tal fin ahora el problema que tengo es que solo toma el valor del primer cliente no importa cual sea el cliente que haya marcado en el dbgrid.

Este es el codigo que estoy usando en el boton

Código Delphi [-]
procedure TfListadoCliente.bModificarClick(Sender: TObject);
begin
  fmodulo.tCliente.Active := true;
    if fmodulo.qCliente.Locate('id_cliente', fmodulo.qCliente['id_cliente'], []) = true
  then
    begin
      fmodulo.tCliente.Edit;
      tfcliente.Create(self).ShowModal;
    end;
        fmodulo.tCliente.Active := false;
        fmodulo.qCliente.Refresh;
end;

Lo que en teoría hace es si encuentra el id del cliente me muestra los datos del cliente para poder editarlos, pero como dije solo me busca el valor del primero en la lista no importa cual haya seleccionado.
Desde ya muchas gracias por su tiempo
Responder Con Cita
  #2  
Antiguo 18-10-2017
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.

Si el TDBGrid estuviese enlazado con la tabla cliente (qCliente), sería innecesario todo ese código de posicionamiento, ya que al moverte de fila en el DBGrid lo estas haciendo en la tabla. Se podría decir que el componente DBGrid es una representación visual de los datos de la tabla.

Ahora, si el DBGrid está representando los datos de una consulta en la que intervienen mas de una tabla, por favor explica mas detalladamente la relación DBGrid/Tabla y los campos que intervienen conformando las columnas.

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #3  
Antiguo 18-10-2017
Avatar de The Cid James
The Cid James The Cid James is offline
Miembro
NULL
 
Registrado: jun 2013
Posts: 129
Poder: 11
The Cid James Va por buen camino
De echo efectivamente esta directamente enlazado a la tabla qClientes pero no toma ningún otro valor que no sea el primero del DBGrid
Responder Con Cita
  #4  
Antiguo 18-10-2017
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.

Ahora creo entender... ¿ Estas usando un Query (qCliente) para alimentar el DBGrid y un DataSet (tCliente) para realizar los cambios no ?

Entonces el problema es el siguiente:
Código Delphi [-]
  fmodulo.tCliente.Active := true;
    if fmodulo.qCliente.Locate('id_cliente', fmodulo.qCliente['id_cliente'], []) = true // <== (1)
  then
    begin
      fmodulo.tCliente.Edit;
      tfcliente.Create(self).ShowModal;
    end;
        fmodulo.tCliente.Active := false;  // <=== ¡¡¡  (2) !!!
        fmodulo.qCliente.Refresh;
(1) ¿ El Locate no deberías aplicarlo al DataSet ?
(2) Esa línea elimina el posicionamiento anterior del Locate y el DataSet (tCliente), siempre queda apuntando al primer registro del DataSet.

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #5  
Antiguo 19-10-2017
Avatar de The Cid James
The Cid James The Cid James is offline
Miembro
NULL
 
Registrado: jun 2013
Posts: 129
Poder: 11
The Cid James Va por buen camino
Cita:
Empezado por ecfisa Ver Mensaje
Hola.

Ahora creo entender... ¿ Estas usando un Query (qCliente) para alimentar el DBGrid y un DataSet (tCliente) para realizar los cambios no ?

Entonces el problema es el siguiente:
Código Delphi [-]
  fmodulo.tCliente.Active := true;
    if fmodulo.qCliente.Locate('id_cliente', fmodulo.qCliente['id_cliente'], []) = true // <== (1)
  then
    begin
      fmodulo.tCliente.Edit;
      tfcliente.Create(self).ShowModal;
    end;
        fmodulo.tCliente.Active := false;  // <=== ¡¡¡  (2) !!!
        fmodulo.qCliente.Refresh;
(1) ¿ El Locate no deberías aplicarlo al DataSet ?
(2) Esa línea elimina el posicionamiento anterior del Locate y el DataSet (tCliente), siempre queda apuntando al primer registro del DataSet.

Saludos
1-Como lo aplico al dataset?
2-entonces como cerraría la consulta para que no quede activa?

Gracias por la ayuda
Responder Con Cita
  #6  
Antiguo 19-10-2017
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.

No puedo saber con seguridad la lógica que has implementado, pero suponiendo que fListadoClientes es el form que tiene el DBGrid y el Button, fcliente el form donde se editan los datos y fmodulo el DataModule donde residen qCliente y tCliente, creo que podrías hacer:
Código Delphi [-]
procedure TfListadoCliente.bModificarClick(Sender: TObject);
begin
  fmodulo.tCliente.Active := true;
  if fmodulo.tCliente.Locate('id_cliente', fmodulo.qCliente['id_cliente'], []) then
  begin
    fmodulo.tCliente.Edit;
    fcliente := Tfcliente.Create(Self);
    try
      fcliente.ShowModal;
    finally
      fcliente.Free;
    end;
  end;
  fmodulo.tCliente.Active := false;
  fmodulo.qCliente.Refresh;
end;
Eso tratando de respetar lo mas posible el código original y suponiendo que esa es tu organización...

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #7  
Antiguo 19-10-2017
Avatar de The Cid James
The Cid James The Cid James is offline
Miembro
NULL
 
Registrado: jun 2013
Posts: 129
Poder: 11
The Cid James Va por buen camino
Muchas gracias por tu tiempo, hoy se me complico un poco el día mañana lo pruebo con tiempo y calma
Responder Con Cita
  #8  
Antiguo 20-10-2017
Avatar de The Cid James
The Cid James The Cid James is offline
Miembro
NULL
 
Registrado: jun 2013
Posts: 129
Poder: 11
The Cid James Va por buen camino
Cita:
Empezado por ecfisa Ver Mensaje
Hola.

No puedo saber con seguridad la lógica que has implementado, pero suponiendo que fListadoClientes es el form que tiene el DBGrid y el Button, fcliente el form donde se editan los datos y fmodulo el DataModule donde residen qCliente y tCliente, creo que podrías hacer:
Código Delphi [-]
procedure TfListadoCliente.bModificarClick(Sender: TObject);
begin
  fmodulo.tCliente.Active := true;
  if fmodulo.tCliente.Locate('id_cliente', fmodulo.qCliente['id_cliente'], []) then
  begin
    fmodulo.tCliente.Edit;
    fcliente := Tfcliente.Create(Self);
    try
      fcliente.ShowModal;
    finally
      fcliente.Free;
    end;
  end;
  fmodulo.tCliente.Active := false;
  fmodulo.qCliente.Refresh;
end;
Eso tratando de respetar lo mas posible el código original y suponiendo que esa es tu organización...

Saludos
Funciona de maravilla, ahora es muy distinto a que entienda lo que hace, por lo cual te voy a preguntar que quieren decir estas declaraciones, asi aprendo que hiciste xD y de paso aprendo

Código Delphi [-]
  try 
      fcliente.ShowModal; => esta si entiendo
    finally
      fcliente.Free;
    end;
Responder Con Cita
  #9  
Antiguo 20-10-2017
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.

Se utilizan para garantizar que cuando solicitamos un recurso este sea devuelto, evitando así perdidas de memoria.

Básicamente:
Código:
  pedir un recurso
  intentar usarlo (try)
     usarlo
  finalmente (finally)
     devolver el recurso
  fin
Algunos enlaces como para ampliar:También te recomiendo leer el capítulo 11 de la Cara oculta de Delphi 4 que trata muy bien el tema y que podes descargar desde el FTP de Club Delphi

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 20-10-2017 a las 22:22:34. Razón: Agregar enlace
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
Seleccionar registros que comiencen por un valor string Pedro-Juan SQL 4 29-06-2012 21:04:15
Seleccionar primer registro en la Clausula WHERE para Actualizar Valor. Adrian Murua MySQL 3 28-05-2012 23:52:14
Seleccionar valor en un rango de datos jourdan Firebird e Interbase 4 19-05-2010 08:59:54
Seleccionar un campo dependiendo de su valor Alexis De la Cr MySQL 2 13-11-2008 21:58:44
Metodo Ideal para Modificar un valor a todos los Registros mostrados en un DBGrid Alexis De la Cr MySQL 7 09-04-2008 15:00:00


La franja horaria es GMT +2. Ahora son las 10:52:50.


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