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)
-   -   dbgrid GUARDADO (https://www.clubdelphi.com/foros/showthread.php?t=90633)

ezerusso 29-07-2016 17:12:47

dbgrid GUARDADO
 
hola tengo un problema con el guardado de un registro en una dbgrid asociada a una base de datos access, tengo un ADOconection, un ADOtable un datasourse. 2 botones uno con insert y el otro con post para guardar, el problema es que al guardar el registro en medio de la tabla se gurda al final.. quisera que se guarde donde señale y se quede ahi y no al final..

TiammatMX 29-07-2016 17:56:57

Deja vù..., ví un tema similar recientemente...

¿Y si en lugar de hacer un Post general, si lo que deseas es guardar UN SÓLO REGISTRO, guardas solamente ése registro? O monitorear los registros que hayan cambiado y guardarlos o actualizarlos...

Casimiro Notevi 29-07-2016 18:02:21

Cita:

Empezado por ezerusso (Mensaje 507283)
hola tengo un problema con el guardado de un registro en una dbgrid asociada a una base de datos access, tengo un ADOconection, un ADOtable un datasourse. 2 botones uno con insert y el otro con post para guardar, el problema es que al guardar el registro en medio de la tabla se gurda al final.. quisera que se guarde donde señale y se quede ahi y no al final..

Vale, y no repitas hilos, gracias :)

orodriguezca 30-07-2016 17:08:45

A ver si entendí: lo que pretendes es insertar un registro en una tabla pero que tenga el mismo comportamiento que insertar una línea en medio de un documento en un editor de texto?

Suponiendo que la respuesta es SI hay que tener en cuenta que físicamente los registros se adicionaran de forma natural al final de la tabla. Otra cosa es el orden en que se quieren mostrar esos registros. Considerando lo anterior propongo la siguiente, quizas descabellada, idea:

1. Agregar a la tabla una columna, de tipo caracter, por ejemplo char(15), para ordenar/secuenciar por esa columna.
2. En esa nueva columna colocar el orden en que se mostrarán los registros, por ejemplo:

0001.000.000 (Primer registro)
0002.000.000 (Segundo rergistro)
.
.
.
0100.000.000 (Registro 100)

3. Si posteriormente deseamos insertar un registro nuevo entre los registros 1 y 2 podríamos hacerlo de esta forma:

0001.000.000 (Primer registro)
0001.001.000 (Primer nuevo registro)
0001.002.000 (Segundo nuevo registro)
0002.000.000 (Segundo registro)
.
.
.
0100.000.000 (Registro 100)

4. En algún momento es posible que tengamos demasiadas novedades y sea conveniente "resecuenciar" toda la tabla.

Repito, es solo una idea. Espero no estar MFT.

AgustinOrtu 30-07-2016 18:25:23

Efectivamente, los registros se van guardando siempre al final. Es responsabilidad del programador ordenarlos si hace falta o crear un indice

En Delphi, el metodo TDataSet.Insert para tablas Access, tiene en cuenta los indices

Cita:

For dBASE, FoxPro, and Access tables, the record is physically appended to the dataset at the end. If an index happens to be active, the new record may appear in a position relative to the index, but the record is still actually stored at the end of the table.
Asi que una de dos, o te creas un indice, u ordenas la tabla

Yo agregaria un campo mas, un timestamp, que seria la fecha/hora en la que se crea el registro, y ordenas o indexas por ese campo. Si Acesss no soporta el timestamp, un simple campo DateTime te servira, y cuando insertas el nuevo registro, le grabas la fecha/hora actuales. En Delphi eso lo haces con la funcion Now

roman 01-08-2016 18:05:10

Creo que la respuesta va más por lo que indica orodriguezca. Un timestamp te proporciona un orden temporal de inserción y lo que pide el forista es que el registro quede ordenado en el lugar en que se hace la inserción visualmente en el dbgrid.

No sé yo si podría usarse también un campo float asignando, por ejemplo, el número a la mitad entre el registro anterior y posterior.

LineComment Saludos

ezerusso 02-08-2016 01:22:13

gracias por responder. El usuario roman digamos que me entendio, la idea basicamente es que se visualice en la linea donde estoy agregando los datos en la dbgrid y que al apretar el boton que tiene el insert al guardarse no se desplacen los registros agregados hacia el final de la tabla.


La franja horaria es GMT +2. Ahora son las 09:14:01.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi