Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   problemas con dbgrid (https://www.clubdelphi.com/foros/showthread.php?t=97977)

sema31 29-01-2026 10:23:10

problemas con dbgrid
 
Buenos días, no se si este es el apartado del foro correcto
estoy trabajando en delhi y con una base de datos de firebird, tengo un dbgrid y me da una causistica que no se como evitar
Me explico, tengo un dbgrid enlazado con una base de datos, hasta ahi sin problemas, en el dbgrid tengo desabilitado el añadir registros
cuando me posiciono en el ultimo registro, si le doy a la fecha de abajo, visualmente estoy en el ultimo registro pero cuando pulso para consultar no me deja, tengo que volver a darle a la fecha arriba para que internamente se posicione en el registro y entonces si me deja consultarlo
He probado con otros dbgrid y me ocurre lo mismo.
no se como evitar que cuando este en el ultimo registro si intento moverme mas abajo no me lo permita

Neftali [Germán.Estévez] 29-01-2026 11:50:16

En estos casos lo más sencillo es que generes un proyecto sencillo de ejemplo, donde se reproduzca el problema (sin datos reales) y lo adjuntes.
Primero, porque muchas veces al hacer lo mismo en un proyecto simple, desaparece el problema y nos damos cuenta del porqué.
Segundo, porque así con ese código los demás pueden ver qué está pasando y corregirlo.

De otra forma no sabemos exactamente porqué está pasando eso, que a primeras ya te digo que no parece un comportamiento normal.

De todas formas, en el botón/acción de [CONSULTAR] habría que ver qué código estás utilizando. Y ver si se pueden usar propiedades como Last, IsEmpty y EOF.
Pero sin ver código, difícil ayudarte...

marco3k 29-01-2026 14:19:45

Cita:

Empezado por sema31 (Mensaje 571792)
Buenos días, no se si este es el apartado del foro correcto
estoy trabajando en delhi y con una base de datos de firebird, tengo un dbgrid y me da una causistica que no se como evitar
Me explico, tengo un dbgrid enlazado con una base de datos, hasta ahi sin problemas, en el dbgrid tengo desabilitado el añadir registros
cuando me posiciono en el ultimo registro, si le doy a la fecha de abajo, visualmente estoy en el ultimo registro pero cuando pulso para consultar no me deja, tengo que volver a darle a la fecha arriba para que internamente se posicione en el registro y entonces si me deja consultarlo
He probado con otros dbgrid y me ocurre lo mismo.
no se como evitar que cuando este en el ultimo registro si intento moverme mas abajo no me lo permita

Cuando dices "no se como evitar que cuando este en el ultimo registro si intento moverme mas abajo no me lo permita", ese comportamiento se evita poniendo el grid en modo sólo lectura, busca en el inspector de propiedades del grid y pon Readonly=True, con esto ese comportamiento desaparece.

Neftali [Germán.Estévez] 29-01-2026 16:18:36

Yo creo que sería mejor hacerlo directamente en la fuente de datos que en el control visual.
En el TClientDataset, Query, Table,... utilizar el evento BeforeInsert (por ejemplo):

Código Delphi [-]
procedure TForm4.ADOQuery1BeforeInsert(DataSet: TDataSet);
begin
  Abort;
end;

sema31 09-02-2026 13:54:06

Buenos días, gracias por contestar


He probado en el evento del dataset.beforeinsert poner abort pero sigue igual, también he probado en las propiedades del dbgrid ponerlo en readonly=true y mismo resultado,


Respecto al código que le he puesto al botón de consulta es

Código Delphi [-]
if QUERY1.Eof then EXIT;
FEDITOR_CONTRATO:=TFEDITOR_CONTRATO.Create(SELF);
FEDITOR_CONTRATO.showmodal;


donde query es una consulta y un componente TpFIBDataset (de las fibplus) enlazado con un dataset
Y Feditor_contrato es el form que se abre cuando realizo la consulta


Si en el dbgrib me posiciono en el ultimo registro y pulso la flecha abajo, ya no me funciona el boton de consulta, entiendo que es porque el puntero de la base de datos esta como si estuviese insertando un registro nuevo y al pulsar en el botom esta sentencia hace su trabajo if QUERY1.Eof then EXIT; No se como evitar que cuando este en el ultimo registro de dbgrid, el puntero se quede ahi




Un saludo

marco3k 12-02-2026 13:51:11

Gracias por hacernos saber. Pero yo uso la forma de poner Readonly=True en el dbgrid, es mas lo implemente en una clase form de consulta y solo uso la clase y no me preocupo de configurar el dbgrid.
Y como mencionas el dbgrid al ponerte al final de los registros de manera predeterminada esta en modo insertar, eso pasa cuando quieras llenar datos directamente del grid, pero yo particularmente lo hago desde un formulario de detalle (lo de llenar datos), asi por que eso lo pongo en Readonly=True.
La curiosidad que me da del porque no te funciona es: ¿si usas el TClientdataset vinculado a un Tdatasource y este con tu dbgrid?, asi lo uso y me funciona.


La franja horaria es GMT +2. Ahora son las 06:32:14.

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