Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 07-09-2010
Avatar de BPL
BPL BPL is offline
Miembro
 
Registrado: ene 2009
Posts: 47
Poder: 0
BPL Va por buen camino
GotoBookMark

Hola

saben tengo el siguiente problema...
tengo dos dbgrid,
la 1º esta enlazada a la tabla directamente y desde aqui selecciona varios registro, cada vez que selecciono uno se traspasa a la 2º dbgrid que esta enlazada a una rx, incluyo el recno de cada registro seleccionado, ya que despues lo necesitare....

pues bien ahora que tengo la 2º dbgrid llena con el juego de registro que necesito intervenir, aparece mi problema...
he trabajado con el GetBookmark, GotoBookmark pero no logor llegar a los registro en mi tabla que seran los que se deben intervenir....

por favorcito..

Trabajao con Deplhi 7, Motor Advantage, ahhh y tablas DBF...(eso si...a punto de de morir)
Responder Con Cita
  #2  
Antiguo 08-09-2010
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 BPL.

Según entiendo tenés una tabla física asociada a un DBGrid, y una en memoria asociada al segundo DBGrid. Y , una vez pasados los registros de interés al segundo DBGrid, querés desde los mismos acceder a los correspondientes de la tabla física. (al menos eso entendí...)

No trabajo con rxLib, pero te hago un ejemplo usando ClientDataSet para trabajar los datos en memoria, en reemplazo de lo que supongo debe hacer el rx. Para el mismo usé la Tabla Country de DBDEMOS.

Teníamos: un TTable, dos TDataSource, dos TDBGrid y en mi caso un TClientDataSet, usé los eventos OnCellClick en ambos DBGrids.

El ejemplo queda:
Código Delphi [-]
...
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, DB, DBClient, Grids, DBGrids, DBTables;

type
  TForm1 = class(TForm)
    Table: TTable;
    dsTable: TDataSource;
    DBGrid1: TDBGrid;
    DBGrid2: TDBGrid;
    dsClientDataSet: TDataSource;
    ClientDataSet: TClientDataSet;
    ClientDataSetPosic: TIntegerField;
    ClientDataSetName: TStringField;
    ClientDataSetCapital: TStringField;  
    procedure FormCreate(Sender: TObject);
    procedure DBGrid1CellClick(Column: TColumn);
    procedure DBGrid2CellClick(Column: TColumn);
  private
  public
  end;

var
  Form1: TForm1;

implementation  {$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
 ClientDataSet.CreateDataSet;
 ClientDataSet.Open
end;

{ Pasar registros a ClientDataSet (memoria) }
procedure TForm1.DBGrid1CellClick(Column: TColumn);
begin
  ClientDataSet.Append;
  ClientDataSetPosic.Value:= Table.RecNo; // agregado por que decís necesitarlo despues
  ClientDataSetName.Value:= Table.FieldByName('Name').AsString;
  ClientDataSetCapital.Value:= Table.FieldByName('Capital').AsString;
end;

{ Posicionarse en la tabla física }
procedure TForm1.DBGrid2CellClick(Column: TColumn);
begin
  Table.Locate('Name',VarArrayOf([ClientDataSetName.Value]),[])
  // Ya estamos posicionado en la tabla y en el registro
  // correspondiente
end;
...

Creo que lo que buscas está en el procedimiento DBGrid2CellClick. Espero aportarte alguna ayuda.

Saludos.

Última edición por ecfisa fecha: 08-09-2010 a las 01:00:23.
Responder Con Cita
  #3  
Antiguo 08-09-2010
Avatar de BPL
BPL BPL is offline
Miembro
 
Registrado: ene 2009
Posts: 47
Poder: 0
BPL Va por buen camino
ecfisa... hola....

NO , el locate ni el Findkey, ni nada por el estilo me sirve los datos no son unicos, ningun campo.
Por eso solo tengo que hacerlo con ir al recno....
de lo contario tendria que crear un nuevo campo y darle un numero unico , y eso no quiero....

Por si hay dudas, esto es lo que necesito
desde la primera grilla (conectada al datasouce) lanzo 5 registros, y aparecen en la segunda grilla y estando aqui necesito intervenirlo la tabla cada uno de esos 5...

creo que la solucion va por gotoBookMark...¿?


ojala tengas algo sobre esto.... que me pueda ayudar...
Responder Con Cita
  #4  
Antiguo 08-09-2010
cloayza cloayza is offline
Miembro
 
Registrado: may 2003
Ubicación: San Pedro de la Paz, Chile
Posts: 913
Poder: 23
cloayza Tiene un aura espectacularcloayza Tiene un aura espectacular
En vez de utilizar una segunda Grilla podrias utilizar un TListBox...

Este ejemplo esta usando la tabla country del DBDemos...

Código Delphi [-]
{Cada vez que se hace un doble click sobre la grilla se agrega al ListBox, el Pais y el Puntero al registro...}
procedure TForm1.DBGrid1DblClick(Sender: TObject);
begin
ListBox1.Items.AddObject(Table1.fieldbyname('NAME').AsString,Pointer(Table1.GetBookmark));
end;

{Cada vez que hago click sobre un item del TListBox lo dirigo al registro correspondiente...}
procedure TForm1.ListBox1Click(Sender: TObject);
begin
     Table1.GotoBookmark(ListBox1.Items.Objects[ListBox1.ItemIndex]);
end;

Ten en cuenta que debes implementar las validaciones correspondientes.

Saludos
Responder Con Cita
  #5  
Antiguo 08-09-2010
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
Ahora me queda un poco más claro... hacés selección múltiple.

Busca en la ayuda de delphi 'SelectedRows', viene un ejemplo que quizá te pueda orientar.

Aunque sinceramente, creo que agregar un campo autoincremental, no ocupa tanto y te ahorraría dolores de cabeza...

Saludos.

Última edición por ecfisa fecha: 08-09-2010 a las 20:16:08.
Responder Con Cita
  #6  
Antiguo 08-09-2010
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 BPL.

Como no me gusta dejar las cosas a medias, te implemento un ejemplo.

Los componentes: 2 TDBGrid, 2 TButton, 1 TTable (Country/DBDEMOS), 1 ClientDataSet.

Para el ejemplo en ambos DBGrids esta dgMultiSelect = True.
Un botón copia al ClientDataSet y el otro obtiene todas las posiciones en la tabla de los datos copiados:

Código Delphi [-]
type
  TForm1 = class(TForm)
    tb: TTable;
    dsCtry: TDataSource;
    ClientDataSet: TClientDataSet;
    dsCDS: TDataSource;
    DBGrid1: TDBGrid;
    DBGrid2: TDBGrid;
    CDSName: TStringField;
    CDSCapital: TStringField;
    CDSContinent: TStringField;
    CDSArea: TFloatField;
    CDSPopulation: TFloatField;
    btnPasar: TButton;
    btnObtener: TButton;
    procedure FormCreate(Sender: TObject);
    procedure btnPasarClick(Sender: TObject);
    procedure btnObtenerClick(Sender: TObject);
  private
    FLstBM: TStrings;
  public
  end;

var
  Form1: TForm1;

implementation {$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  ClientDataSet.CreateDataSet;
  ClientDataSet.Open;
end;

procedure TForm1.btnPasarClick(Sender: TObject);
var
  i: Integer;
begin
  if DBGrid1.SelectedRows.Count > 0 then
  begin
    FLstBM:= TStringList.Create; // Crear lista
    with DBGrid1.DataSource.DataSet do
      for i:= 0 to DBGrid1.SelectedRows.Count -1 do
      begin
        GotoBookmark(pointer(DBGrid1.SelectedRows.Items[i]));
        FLstBM.Add(tb.Bookmark); // Guardar Bookmarks
        with ClientDataSet do
        begin
          Append;
          CDSName.Value:= tb.FieldByName('Name').AsString;
          CDSCapital.Value:= tb.FieldByName('Capital').AsString;
          CDSContinent.Value:= tb.FieldByName('Continent').AsString;
          CDSArea.Value:= tb.FieldByName('Area').AsFloat;
          CDSPopulation.Value:= tb.FieldByname('Population').AsFloat;
        end;
      end;
   end;
end;

procedure TForm1.btnObtenerClick(Sender: TObject);
var
  i: Integer;
begin
  if DBGrid2.SelectedRows.Count > 0 then
  begin
    with DBGrid2.DataSource.DataSet do
     for i:= 0 to DBGrid2.SelectedRows.Count -1 do
     begin
        GotoBookmark(pointer(DBGrid2.SelectedRows.Items[i]));
        // Aca obtenes los 'n' BookMarks de la Tabla
        tb.BookMark:= FLstBM[i];
        // A partir de aca haces lo que gustes...
        ShowMessage(tb.FieldByName('Name').AsString);
     end;
     FLstBM.Free;  // Liberar lista
  end;
end;

Saludos.

Última edición por ecfisa fecha: 08-09-2010 a las 20:57:17.
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
GotoBookMark en TClientDataSet jzginez Conexión con bases de datos 0 30-08-2006 17:11:25
Ayuda de Delphi - Gotobookmark juanchi Conexión con bases de datos 4 21-02-2004 18:43:51


La franja horaria es GMT +2. Ahora son las 20:31:55.


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