Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Un DBGrid díscolo (https://www.clubdelphi.com/foros/showthread.php?t=53334)

gorsan 18-02-2008 22:27:02

Un DBGrid díscolo
 
Hola a todos.
El problema que me ocupa me esta matando y ello porque veo que es la cosa mas tonta del mundo y yo no soy capaz de encontrale la solucion. Así que no me queda mas remedio que abrir este hilo para que el que lo lea se ria un poco de mi. A pesar de ello les comento:
vaya por delante que trabajo con IBX6 y con Delphi 7.
Tengo un DataSet en concreto un IBDataSet en un modulo de datos y en un formulario un DBGrid apuntando a el. En tiempo de ejecucion puedo modificar los datos mostrados en el grid y se guardan los cambios sin problema pero si con los cursores del teclado me voy desplanzando hasta el ultimo registro del grid de ahi no pasa, es decir, no añade un nuevo registro y lo mismo pasa si lo hago desde un ToolButton llamando al metodo append del dataset. Tampoco añade nada y se queda en el ultimo registro de la tabla como anteriormente.
El Grid tiene los siguientes valores a true en la propiedad Options
[dgEditing,dgTitles,dgIndicator,dgColumnResize,dgColLines,dgRowLines,dgTabs,dgConfirmDelete,dgCancelO nExit]
el resto a false. La propiedad del grid ReadOnly esta a false y la propiedad canmodify del dataset debe estar a true porque, como dije, puedo modificar datos. Lo unico que pasa es que no puedo añadir nuevo registro.
¿Alguien me puede dar alguna pista?
Gracias por vuestro tiempo.

gorsan 19-02-2008 20:28:18

¿A nadie se le ocurre que puede pasar para que un DBGrid no haga ni append ni insert pero si permita la modificacion de datos? Les agradeceria por lo menos una pista ...

eduarcol 19-02-2008 20:37:58

si desde otro componente ajeno al dbgrid pero que comparte el mismo origen de datos te da el problema, entonces no busca por el dbgrid, busca por el dataset que de seguro por alli vienen los tiros, lamento no ayudarte mas pero es que no estoy muy puesto en eso de los IBX

gorsan 19-02-2008 21:38:52

Gracias por tu respuesta pero no veo nada raro en el dataset ...

gorsan 20-02-2008 11:31:55

He descubierto que el dataset no añade registro nuevo porque permanece en dsBrowse
Código Delphi [-]
procedure TWCpu.TBAddClick(Sender: TObject);
begin
   TBAdd.Enabled:=False;
   TBEditar.Enabled:=False;
   TBBorrar.Enabled:=False;
   TBGrabar.Enabled:=True;
   TBCancelar.Enabled:=True;
   EBuscar.SetFocus;
   with DMCpu.IBCpu do
    try
       DisableControls;
       Close;
       Open;
       Append;
    finally
       EnableControls;
       if DMCpu.IBCpu.State in [dsBrowse] then ShowMessage('No has añadido un nuevo registro');
    end;
   DBId_inv_cpu.SetFocus;
end;

No entiendo nada

Ivanzinho 20-02-2008 11:59:51

No estoy muy puesto en esto, seguro que cualquiera te puede dar una mejor solución, pero te comento los siguiente por si te puede valer.

Si en el evento AfterInsert le das algún valor a un campo del dataSet éste se pone en estado dsInsert.

Para insertar en el dbgrid, una vez hecho lo anterior, puedes hacerlo con la tecla Ins.

Un saúdo.

gorsan 20-02-2008 14:44:46

Gracias a Ivanzinho he resuelto el problema. El tema estaba en que en el evento afterinsert tenia el siguiente codigo:
Código Delphi [-]
procedure TDMCpu.IBCpuAfterInsert(DataSet: TDataSet);
begin
   IBCpu.Transaction.CommitRetaining;
   IBCpu.Refresh;
end;
con lo que la insercion de un registro en blanco quedaba anulada con un CommitRetaining y luego ademas se refrescaba la tabla. Quitando esas dos lineas de codigo problema solucionado.
Muchas gracias a Ivanzinho por la pista.


La franja horaria es GMT +2. Ahora son las 04:14:28.

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