Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Seleccionar registro de un DBGrid (https://www.clubdelphi.com/foros/showthread.php?t=64329)

radenf 27-03-2009 02:41:50

Seleccionar registro de un DBGrid (Solucionado)
 
Estimados amigos:

Una vez más recurro a su sabiduría y comprensión.
Tengo en un Form un DBGrid que apunta a una tabla (Personas). Desde este form llamo a otro form de manera modal, que posee un buscador utilizando un ADOQuery el que me entrega datos de otra tabla (Caracteres) que se encuentra en una relación maestro-detalle con la primera. Quisiera que en el evento oncellclick del form de búsqueda se activara el registro correspondiente del DBGrid del form principal y se cerrara el de búsqueda.
¿Puede alguien por favor ayudarme con el código necesario?

Saludos y muchas gracias

Neftali [Germán.Estévez] 27-03-2009 11:04:01

Desde el form1 llamas al segundo de esta forma:

Código Delphi [-]
  // Show
  Form2.ShowModal;
  // Recuperamos el texto o lo que quiereas del segundo form
  // Nos aseguraremos de que no se haya destruido (*1*)
  Edit1.Text := Form2.RetVal;
  // Lo liberamos nosotros (*2*)
  Form2.Free;

En el form2 creamos una propiedad para guaradar el dato:

Código Delphi [-]
      property RetVal:string read FRetVal write FRetVal;

Al cerrar el segundo form, guardamos el valor para luego consultarlo

Código Delphi [-]
  // Nos guardamos el valor en la propiedad para que luego lo consulte form1
  Self.FRetVal := Edit1.Text;
  // cerrar
  ModalResult := mrOk;

Muy imprtante que no se destruya el form2 al cerrar, ya que el form1 debe consultar el valor (*1*) y ya se encargará de destruirlo form1 (*2*)

Código Delphi [-]
procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Action := caHide;
end;

Creo que eso es lo que necesitas, en tu caso deberás quedarte con la referencia al registro selecionado y al volvar activarlo en tu Grid.

Un saludo.

radenf 27-03-2009 12:12:42

Gracias Neftali ,lo voy a probar.
Me queda una duda. Tú haces referencias a Edit1, pero yo quiero seleccionar desde un DBGrid con el evento oncellclick. ¿Cómo acoplo ambos?

Saludos y muchas gracias

Neftali [Germán.Estévez] 27-03-2009 12:39:09

En tu caso te quedas con el dato relevante del registro (Clave foránea de latabla personas, por ejemplo) que te permitirá localizar el registro seleccionado en la primera.
Al volver, deberás hacer esa búsqueda.

radenf 29-03-2009 15:33:47

Estimado Neftali :

No logro hacer funcionar lo que me has propuesto.
¿No existe otro modo para activar en un grid lo seleccionado en otro?

Sludos y gracias

radenf 29-03-2009 23:52:41

He logrado extraer los datos que me entrega la consulta con Query del FormBuscador en un Edit en el Form principal mediante el siguiente código:

Código Delphi [-]
FormPrincipal.Edit1.Text:=Query1.FieldbyName('Nombre').AsString;
¿Cómo puedo hacer la operación inversa y que los datos del Edit se representen en el DBGrid del Form principal, ya que son los mismos?

Saludos y gracias

radenf 30-03-2009 02:07:00

He logrado solucionar mi problema.
Adjunto el código por si pudiera servir a alguien más. Mi programa compila y ejecuta lo requerido sin problemas. Si hubiese algún error en este código, agradezco las correcciones.

Código Delphi [-]
procedure TBuscador.DBGrid1CellClick(Column: TbsColumn);
begin
FormPrincipal.Tabla1.Edit;
FormPrincipal.Tabla1.Locate('Nombre',Query1.FieldValues['Nombre'],[]);
Buscador.Close;
end;

Agradezco la ayuda prestada por Neftali que puso una luz en el camino.

Saludos a todos

paladincubano 01-04-2009 18:13:51

Cita:

Empezado por radenf (Mensaje 343143)
He logrado solucionar mi problema.
Adjunto el código por si pudiera servir a alguien más. Mi programa compila y ejecuta lo requerido sin problemas. Si hubiese algún error en este código, agradezco las correcciones.

Código Delphi [-]procedure TBuscador.DBGrid1CellClick(Column: TbsColumn); begin FormPrincipal.Tabla1.Edit; FormPrincipal.Tabla1.Locate('Nombre',Query1.FieldValues['Nombre'],[]); Buscador.Close; end;


Agradezco la ayuda prestada por Neftali que puso una luz en el camino.

Saludos a todos

Para Localizar un registro en la tabla no es necesario abrirla para la edicion.
FormPrincipal.Tabla1.Edit; está de mas. Puede traerte problemas.

radenf 01-04-2009 19:30:41

Gracias paladincubano , voy a seguir tu consejo y corregir mi código.

Saludos


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

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi