como mostrar el total de registros que hay en un grid?
Joel:
1) Reccount() te dará el total de registros de la tabla o cursor, con independencia de si están marcados para borrar (deleted() ) o no.
La información es del registro de cabecera de la tabla, por eso es extremadamente rápido. Pero en algunos casos puede no ser lo que se necesita.
2) El control grid no es un registro. Es un objeto complejo que permite mostrar un cursor o tabla. Tu generas un cursor y lo asocias a un grid para mostrar cierta información. Pero la información está en el cursor y los resultados de cualquier valor que se consulte dependen estrictamente de la posición del puntero de registro.
Ejemplo malo (aunque dé un resultado correcto)
lcTemaPaciente = Thisform.pageFrame1.Page3.Grid2.Column5.Text1.Value
Ejemplo correcto
loGrid = Thisform.pageFrame1.Page3.Grid2
lcCampo = "Tema"
lcTemaPaciente = Evaluate( loGrid.RecordSource + "." + lcCampo)
O, si conoces el nombre del cursor y el campo
lcTemaPaciente = curPaciente.Tema
De paso, esta forma te permte consultar campos del cursor o tabla que no se muestran en el control Grid.
Dicho de otra forma, te permite mostrar en el control grid, solamente la información que es relevante (e inteligible) para el usuario.
Volviendo al contador de registros, para lo que necesitas, la mejor forma es:
* supongamos que tenemos este grid y que hay alguna tabla o cursor asociado a dicho grid.
LOCAL loGrid as Object
loGrid = Thisform.PageFrame1.Page4.Grid1
SELECT COUNT(*) FROM (loGrid.RecordSource) WHERE !DELETED() INTO ARRAY laCount
thisform.Label1.Caption = IIF(_Tally = 0, "0" , transform(laCount[1,1])
A diferencia de utilizar Count for Not Deleted(), el método enunciado no precisa reposicionar el puntero de registro en el cursor asociado.
De otra forma, para que el puntero no quede en EOF(), generando un efecto desconcertante, sería necesario;
SELECT TABLA
lnRecord = Recno()
COUNT FOR !DELETED() TO lnRegistros
IF lnRecord > 0
Go lnRecord
ELSE
go Top
ENDIF
Thisform.label1.Caption=Transform(lnRegistros)
Nota:
La ventaja de utilizar la propiedad RecordSource del grid de que se trata, es que nos independiza de como se llama el cursor o tabla.
Para una clase Grid, el nombre del cursor o tabla asociada es siempre:
lcTablaGrid = This.RecordSource