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 15-05-2006
Avatar de Colgueit
Colgueit Colgueit is offline
Miembro
 
Registrado: abr 2006
Ubicación: Lanzarote, España
Posts: 91
Poder: 19
Colgueit Va por buen camino
Numero de fila en DBGrid

Hola,

Antes de nada decir que he estado mirando en el foro hacerca de este tema, y si hay muchas cosas pero no es exactamente lo que busco.

Para ver el numero de fila en un grid he visto en el foro 2 opciones:

1º opcion:
"IntToStr(TStringGrid(DBGridPedidos).Row"
Pero esto no me sirve ya que lo que hace es contar en el grid las filas visibles, es decir si en la tabla tengo 20 filas y veo en el grid 10 solo me va a contar hasta la 10.

2º opcion:
"IntToStr(Tabla.RecNo)"
Así si me cuenta todas las filas de la tabla, pero claro hay un problema, si hago un filter de esa tabla, me sigue contando tambien los datos filtrados, y claro va la cuenta a saltos.

Entonces, ninguna de estas opciones me sirve.
Conclusión de lo que necesito hacer: ¿Como se cual es el numero de fila de todo el recorrido de filas en un DBgrid?

Espero haberme explicado bien, pero si no explico lo que quiero hacer exactamente:
Tengo un grid y abajo quiero poner un campo de texto que muestre "Cliente 5 de 20" , es decir que si me posiciono en la fila 5 del grid , muestre el 5. Esto a priori es facil pero como ya he dicho no me sirve cuando la tabla está filtrada y por eso no me sirve la 2ª opcion.
Tiene que haber alguna forma facil de hacerlo, pero la desconozco,

Espero que alguien me pueda ayudar, antetodo muchas gracias!!!
Responder Con Cita
  #2  
Antiguo 15-05-2006
Avatar de trashky
trashky trashky is offline
Miembro
 
Registrado: abr 2006
Posts: 12
Poder: 0
trashky Va por buen camino
Prueba con
Código Delphi [-]
dbgrid.GetRowCount
haber si te funciona con esto
Responder Con Cita
  #3  
Antiguo 15-05-2006
Avatar de Colgueit
Colgueit Colgueit is offline
Miembro
 
Registrado: abr 2006
Ubicación: Lanzarote, España
Posts: 91
Poder: 19
Colgueit Va por buen camino
Unhappy No funciona..

He intendado probar eso, pero esa función no me aparece . Pongo DbGridArticulos.GetRowCount y da error ([Error] Articulos.pas(122): Undeclared identifier: 'GetRowCount').

A ti si te aparece?.

Gracias por responder Trashky!
Responder Con Cita
  #4  
Antiguo 15-05-2006
Palmiro Palmiro is offline
Miembro
 
Registrado: oct 2005
Ubicación: Argentina - Chaco
Posts: 57
Poder: 19
Palmiro Va por buen camino
Hola.

creo que entendi lo que estas queriendo hacer y la solucion puede ser la siguente....

el numero de filas la puede obtener de la siguiente manera, hasta inclusive despues de haber filtrado la consulta

DataSource.DataSet.RecordCount. // Nro total de registro que tengas en la consulta

y el numero del registro en donde esta ubicado de la siguiente manera

DataSource.DataSet.RecNro // Registro en que estas Ubicado

y por ultimo puede hacer lo siguiente.....

label1.Caption:= 'Registro' + IntToStr(DataSource.DataSet.RecNro) + 'de' IntToStr(DataSource.DataSet.RecordCount)

de esta manera obtendrias saber en que registro de cuantos estas ubicado

esa linea de codigo la puede ubicar en el evento Onclick de un TDBNavegator o algun otro boton que tenga para desplazarte por las diferentes fila de la grilla
__________________
No es lo mejor, pero es lo que hay...
Responder Con Cita
  #5  
Antiguo 15-05-2006
Palmiro Palmiro is offline
Miembro
 
Registrado: oct 2005
Ubicación: Argentina - Chaco
Posts: 57
Poder: 19
Palmiro Va por buen camino
Hola.

creo que entendi lo que estas queriendo hacer y la solucion puede ser la siguente....

el numero de filas la puede obtener de la siguiente manera, hasta inclusive despues de haber filtrado la consulta

DataSource.DataSet.RecordCount. // Nro total de registro que tengas en la consulta

y el numero del registro en donde esta ubicado de la siguiente manera

DataSource.DataSet.RecNro // Registro en que estas Ubicado

y por ultimo puede hacer lo siguiente.....

label1.Caption:= 'Registro' + IntToStr(DataSource.DataSet.RecNro) + 'de' IntToStr(DataSource.DataSet.RecordCount)

de esta manera obtendrias saber en que registro de cuantos estas ubicado

esa linea de codigo la puede ubicar en el evento Onclick de un TDBNavegator o algun otro boton que tenga para desplazarte por las diferentes fila de la grilla

Espero haberte entendido y ayudado.
__________________
No es lo mejor, pero es lo que hay...
Responder Con Cita
  #6  
Antiguo 15-05-2006
Avatar de Colgueit
Colgueit Colgueit is offline
Miembro
 
Registrado: abr 2006
Ubicación: Lanzarote, España
Posts: 91
Poder: 19
Colgueit Va por buen camino
Unhappy Sigue sin funcionar

Antetodo muchas gracias Palmiro.

Pero me pasa igual que con la segunda opcion que comente:
Acabo de probarlo y "IntToStr(DataSource.DataSet.RecNro)" hace lo mismo que "IntToStr(Tabla.RecNo)", es decir, que cuando tengo la tabla filtrada no me muestra la fila correcta en el grid , me muestra la fila correspondiente en la tabla no filtrada .

Bueno habrá que seguir investigando...jeje

Graciasss

Última edición por Colgueit fecha: 15-05-2006 a las 18:43:32.
Responder Con Cita
  #7  
Antiguo 15-05-2006
Avatar de waltergomez
waltergomez waltergomez is offline
Miembro
 
Registrado: may 2006
Posts: 202
Poder: 18
waltergomez Va por buen camino
Si esto te funciona tomate un vinito y brinda por mi. Jaja.

Código Delphi [-]
....
uses BDE;
....

procedure ..............
var i : integer;
begin
  Table1.Filtered := true;
  Check(DbiGetExactRecordCount(Table1.Handle, i));
  ShowMessage(inttostr(i));
end;

Saludos,
Responder Con Cita
  #8  
Antiguo 15-05-2006
Avatar de Colgueit
Colgueit Colgueit is offline
Miembro
 
Registrado: abr 2006
Ubicación: Lanzarote, España
Posts: 91
Poder: 19
Colgueit Va por buen camino
Unhappy nada...

Muchas Gracias waltergomez,
Pero no me voy a poder tomar el vinito todavia ,jeje.

He probado lo que dices y nada, me devuelve el numero total de filas, y lo quiero saber es el numero de la fila seleccionada (que me funcione si la tabla esta filtrada).

He buscado en la ayuda esa funcion y dice esto:
"DbiGetExactRecordCount retrieves the current exact number of records associated with the cursor."
Es decir que devuelve el numero total de filas, hace lo mismo que "tabla.RecordCount".

Pues a seguir investigando...
Continuará ... jeje
Responder Con Cita
  #9  
Antiguo 15-05-2006
Avatar de waltergomez
waltergomez waltergomez is offline
Miembro
 
Registrado: may 2006
Posts: 202
Poder: 18
waltergomez Va por buen camino
Y si usas el evento OnFilterRecord del TTable, para llevar un contador ?
Bueno ahora el vinito me lo tomo yo porque me voy a comer.

Salu2,
Responder Con Cita
  #10  
Antiguo 15-05-2006
Avatar de lpmlpm
lpmlpm lpmlpm is offline
Miembro
 
Registrado: ago 2005
Posts: 136
Poder: 19
lpmlpm Va por buen camino
Y porque no en vez de un TTable usas un TQuery y el filtro que usas lo pones en la sección Where del SQL de esa Query, ahi si te funcionará sin problemas el RecNo.

Para estos casos es que es incómodo el uso de Filtros, pero el SQL siempre lo saca a uno de problemas de una manera elegante

Saludos
__________________
"Lo mejor de no saber hacer nada es que se tiene mucho tiempo libre."
Responder Con Cita
  #11  
Antiguo 15-05-2006
Avatar de Colgueit
Colgueit Colgueit is offline
Miembro
 
Registrado: abr 2006
Ubicación: Lanzarote, España
Posts: 91
Poder: 19
Colgueit Va por buen camino
Unhappy Tampoco

Para waltergomez: Acabo de probar Poniendolo ahi pero tampoco funciona. Gracias otra vez de todas formas.

Para lpmlpm: No me interesa usar Sql ya que uso el grid para modificar datos, tengo campos calculados, los cuales sería engorroso de hacer sin hacer por campos calculados , ademas de tener ya como 20 DBGrids hechos con filtros y cambiarlos ahora imaginate...
Pero Gracias por la idea

¿Tiene que haber alguna forma de hacerlo no?, Joe, llevo horas y horas intentandolo y no doy con ella.

Bueno pues a seguir intentandolo.

Thanks!
Responder Con Cita
  #12  
Antiguo 15-05-2006
luisgutierrezb luisgutierrezb is offline
Miembro
 
Registrado: oct 2005
Ubicación: México
Posts: 925
Poder: 19
luisgutierrezb Va por buen camino
tal vez acabo de dar con la respuesta, a ver si funciona, de la ayuda de delphi:

TDataset

property BufferCount: Integer;

Description

TDataSet maintains an internal cache of records from the underlying database table. For example, if the dataset is used to populate a data-aware grid, the cache includes a record for each row in the grid. BufferCount indicates the size of this cache. An associated TDataLink object determines the value of BufferCount.
Responder Con Cita
  #13  
Antiguo 15-05-2006
Avatar de Colgueit
Colgueit Colgueit is offline
Miembro
 
Registrado: abr 2006
Ubicación: Lanzarote, España
Posts: 91
Poder: 19
Colgueit Va por buen camino
Unhappy uff

Muchas Gracias luisgutierrezb pero he estado probando a ver como puedo usar la propiedad BufferCount y no se como usarla, y he estado buscando por todas partes acerca de la propiedad BufferCount y no he encontrado nada util.

Por lo que dice la ayuda de delphi tiene pinta que puede servir, pero no explica como se usa.

¿Alguien sabe usarla?
¿o sabe de alguna otra forma de hacer lo que planteo?

Joe, ya estoy desesperado, no descubro como se hace
Responder Con Cita
  #14  
Antiguo 15-05-2006
Avatar de waltergomez
waltergomez waltergomez is offline
Miembro
 
Registrado: may 2006
Posts: 202
Poder: 18
waltergomez Va por buen camino
Estas usando base de datos, DBASE, Paradox, Access ?
Responder Con Cita
  #15  
Antiguo 15-05-2006
Avatar de Colgueit
Colgueit Colgueit is offline
Miembro
 
Registrado: abr 2006
Ubicación: Lanzarote, España
Posts: 91
Poder: 19
Colgueit Va por buen camino
Paradox.

A ver si al final se consigue resolver...
Responder Con Cita
  #16  
Antiguo 16-05-2006
Avatar de waltergomez
waltergomez waltergomez is offline
Miembro
 
Registrado: may 2006
Posts: 202
Poder: 18
waltergomez Va por buen camino
Tengo una solucion pero no funciona si usas la barra de scroll. Tampoco me puse a ver muy profundo. Peor es nada

Código Delphi [-]
  TMalditaGrilla = class(TDBGrid)
  public
    FPos : integer;
    procedure Scroll(Distance: Integer); override; // Este metodo es  Progido !!! 
 end;

  TForm1 = class(TForm)
    Database1: TDatabase;
    Table1: TTable;
    DBGrid1: TDBGrid;
    DataSource1: TDataSource;
    Button1: TButton;
    Button2: TButton;
    procedure Button2Click(Sender: TObject);
    procedure DBGrid1DblClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    FMalditaGrilla : TMalditaGrilla;
    FCTR : integer;
  end;



var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button2Click(Sender: TObject);
begin
  Table1.Filtered := false;
  Table1.Filter := 'empno > 20';
  Table1.Filtered := true;
  Table1.First;
end;

procedure TForm1.DBGrid1DblClick(Sender: TObject);
begin
  Check(DbiGetExactRecordCount(Table1.Handle, FCTR));
  showmessage(inttostr(FMalditaGrilla.FPos + 1)+' / '+inttostr(FCTR));
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  FMalditaGrilla := TMalditaGrilla.Create(self);
  FMalditaGrilla.DataSource := DataSource1;
  FMalditaGrilla.FPos := 0;
end;

procedure TMalditaGrilla.Scroll(Distance: Integer);
begin
  inherited Scroll(Distance);
  FPos := FPos + Distance;
end;

Lo que hace uno por un brindis. jajajaj
Responder Con Cita
  #17  
Antiguo 16-05-2006
Avatar de Colgueit
Colgueit Colgueit is offline
Miembro
 
Registrado: abr 2006
Ubicación: Lanzarote, España
Posts: 91
Poder: 19
Colgueit Va por buen camino
Unhappy Y tampoco

Lo he probado minuciosamente, y pasa igual que con todos, en el caso de estar la tabla filtrada no funciona, me da el numero de la fila en la tabla no filtrada. Ya me estoy desesperando bastante jeje.

De todas formas, waltergomez, muchisimas gracias por tu interes y tu ayuda!!!!!!!!!!!!!!!! no se como agredacertelo que creo q con solo darte las gracias me quedo muy corto .

Bueno pues seguire intentandolo, el que la sigue la consigue

Un Saludo!!
Responder Con Cita
  #18  
Antiguo 16-05-2006
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Una pregunta: ¿para qué quieres este número de registro? Como ya habrás notado, aun con un mismo filtrado, tal número cambiará conforme se agreguen, modifiquen o eliminen registros.

// Saludos
Responder Con Cita
  #19  
Antiguo 16-05-2006
Avatar de Colgueit
Colgueit Colgueit is offline
Miembro
 
Registrado: abr 2006
Ubicación: Lanzarote, España
Posts: 91
Poder: 19
Colgueit Va por buen camino
Lo conseguire?

Pues simplemente lo quiero porque quiero mostrar debajo de los DBgrids un campo de texto que ponga "Registro 20 de 100" y cada vez que mueva (calculandolo de nuevo en la propiedad OnDrawColumnCell del grid) que calcule de nuevo el valor, es decir si muevo a la siguiente fila que aparezca "Registro 21 de 100", solo es cuestión de estética, pero me gustaria hacerlo.

En el ejemplo que he puesto el 20 será el registro numero 20 dentro del Grid (pero no solo de los visibles, por eso "TStringGrid(DBGridPedidos).Row no me sirve")

El Numero maximo lo hayo bien, y el numero de registro funciona bien aunque borre, modifique o agregue registros, solo falla en el caso de filtrar la tabla. Ya que lo que quiero en realidad es la posicion del registro en el grid entero (incluidas las filas no visibles).

Pero bueno, ya para dejarlo mas claro, adjunto imagen de lo que estoy haciendo. En la imagen debajo del grid entre las flechas del navegador aparece el contador del que hablo.

Gracias otra vez por vuestro interes.
Archivos Adjuntos
Tipo de Archivo: zip Grid.zip (13,7 KB, 41 visitas)

Última edición por Colgueit fecha: 16-05-2006 a las 03:14:18.
Responder Con Cita
  #20  
Antiguo 16-05-2006
Avatar de Colgueit
Colgueit Colgueit is offline
Miembro
 
Registrado: abr 2006
Ubicación: Lanzarote, España
Posts: 91
Poder: 19
Colgueit Va por buen camino
Unhappy

¿Nadie sabe hacerlo?

Un saludo!
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
Mostrar numero de fila DBGrid danielcordovahe Varios 2 20-09-2005 01:00:21
Fila del DbGrid Rabata Varios 3 08-11-2004 22:18:13
Número de Fila en Report Manager KayserSoze Impresión 1 20-02-2004 20:57:11
numero de fila en dbgrid manu Varios 5 18-12-2003 21:06:14
Numero de fila en TSQLDataSet andre Conexión con bases de datos 2 26-06-2003 16:52:42


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


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