PDA

Ver la Versión Completa : Un DBGrid díscolo


gorsan
18-02-2008, 22:27:02
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

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:

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.