PDA

Ver la Versión Completa : Presentación y primera consulta (DBNavigator)


martinlillo
12-09-2011, 13:59:14
Gente, este es mi primer post en este foro. Soy Martín Lillo, de Río Cuarto, Córdoba. Después de agradecerles a todos de ante mano por las ayudas que seguramente recibiré (y espero poder brindar), les hago una primera consulta:
Resulta que cada vez que pongo un DBNavigator, y me pongo a navegar los registros, al llegar al último el botón de "siguiente" sigue habilitado. Clickeo una vez más allí, y se deshabilita, dejándo en el formulario los mismos datos del último registro.
En un sistema que hice, esto realmente molesta, porque hay un botón que opera sobre los datos actuales, y parece ser que los datos del último registro luego de volver a hacer click en "siguiente", no están bien. Por ejemplo, para que se entienda:
1- Estoy en el penúltimo registro. Hago click en "Reporte", y me muestra el reporte.
2- Paso al último registro. Hago click en reporte y me lo muestra. El botón "siguiente" aún está habilitado, pese a estar en el último.
3- Hago click en siguiente. El botón "siguiente" se deshabilita y los datos del formulario son iguales a los del paso 2.
4- Hago click en reporte, y me muestra un reporte vacio.

Apelo a vuestra sabiduría para resolver este dilema.

Saludos!!!!

ecfisa
12-09-2011, 15:41:03
Hola martinlillo y bienvenido a los foros de Club Delphi :)

Si no te entiendo mál, lo que buscas es que el botón siguiente quede deshabilitado al estar situado en el último registro.

Si es así, quizá te pueda servir hacer:

procedure TForm1.DBNavigator1BeforeAction(Sender: TObject;Button: TNavigateBtn);
begin
with TDBNavigator(Sender).DataSource.DataSet do
if RecNo > RecordCount-2 then
Next;
end;



Saludos.

roman
12-09-2011, 15:43:45
Hasta donde sé y recuerdo, tal es el comportamiento normal del DBNavigator. La razón exacta no la sé, pero de alguna manera, cuanda te desplazas por los registros de un dataset, no hay manera directa de ver que hay "más allá", sólo el registro actual, así que, cuando te paras en el último registro, el dataset no sabe que es el último y tienes que avanzar uno más para llegar a la marca de final de archivo.

Cuando dices "Reporte", ¿a qué te refieres? ¿Qué proceso hace ese botón?

// Saludos

roman
12-09-2011, 15:45:18
Perdón , no había visto la respuesta de ecfisa al contestar. Sólo comentar que la solución que propone no siempre funcionará porque no con todos los dataset funciona el RecNo y el RecordCount.

// Saludos

ecfisa
12-09-2011, 15:48:28
Hola román.

Si y no sólo eso, también pensé, al momento de sugerirlo, en que podría estar provocando un posible efecto secundario en algún evento del DataSet.

Pero bueno, la intención era ofrecerle alguna alternativa para que pruebe.

Saludos.

martinlillo
12-09-2011, 15:49:33
Gracias por la data. Voy a probar ese código a ver qué onda.
Respecto al botón "Reporte", es sólo un botón que puse, que te muestra un reporte hecho con Fortes Report. Nada más.
Cuando pruebe les digo si anduvo o no.


Saludos y gracias!

martinlillo
12-09-2011, 16:02:49
No me anduvo. Lo que hace ese código es avanzar registros, y termina dejándome más allá del último, y me hace el mismo chiste. Como estoy en la marca de fin, el reporte no me muestra nada.

Saludos y gracias igual!

ecfisa
12-09-2011, 16:07:52
Hola.
Respecto al botón "Reporte", es sólo un botón que puse, que te muestra un reporte hecho con Fortes Report
Y como supongo, adonde apuntaba roman, ¿ No podés deshabilitar el boton del reporte cuando llegues al final del DataSet ?

De ese modo aunque el boton del DBNavigator esté enabled no se podrá mostrar el reporte.

Saludos.

Casimiro Notevi
12-09-2011, 16:08:33
Hola, bienvenida a clubdelphi, por favor, lee nuestra guía de estilo (http://www.clubdelphi.com/foros/guiaestilo.php), necesitas explicarte mejor para que podamos ayudar. Gracias.

roman
12-09-2011, 16:12:24
Respecto al botón "Reporte", es sólo un botón que puse, que te muestra un reporte hecho con Fortes Report. Nada más.


Pero es que, a mi juicio, ahí es donde está tu problema y es lo que habría que revisar. Aunque llegues al final del dataset, como ya has visto, los controles asociados y el mismo dataset, siguen mostrando los datos de ese último registro, así que no debería tener poblemas para tomar los datos y volver a presentar el reporte.

De todas formas, algo que podrías hacer para evitar que se muestre el reporte en blanco es inhabilitar dicho botón. En el evento AfterScroll del dataset pones:


BotonReporte.Enabled := not DataSet.Eof;


// Saludos

roman
12-09-2011, 16:14:05
Hola, bienvenida a clubdelphi,

Quiero suponer que es bienvenido.

// Saludos

martinlillo
12-09-2011, 17:19:51
Je! Sabía que no iba a ser fácil...
El tema de deshabilitar el botón reporte al llegar a EOF, está bueno, pero tiene un problema estético. En el formulario van a seguir apareciendo los datos del último registro, y el usuario se preguntará: "por qué no puedo ver el reporte?".
En fin, es todo un tema... Seguiré investigando...

Saludos!

PD: Soy bienvenidO, y no bienvenidA.

Casimiro Notevi
12-09-2011, 23:08:19
Quiero suponer que es bienvenido.
// Saludos

PD: Soy bienvenidO, y no bienvenidA.

Yo pienso que eres una persona bienvenida a estos foros :)


Bienvenido a los foros :) :) :)

.

martinlillo
14-09-2011, 13:12:06
Ah bueno! Así pos sí....

Abrazo!