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)
-   -   Tbookmark guarda posición del registro aunque la TAdoTable este en modo Append (https://www.clubdelphi.com/foros/showthread.php?t=72162)

@-Soft 01-02-2011 04:03:21

Tbookmark guarda posición del registro aunque la TAdoTable este en modo Append
 
hola


Necesito de su vasta experiencia y me guien en una inquietud, como dice el titulo "Una variable Tbookmark puede guardar la posición del puntero de un nuevo registro creado por un Append de un TAdoTable".

gracias de antemano.

duilioisola 01-02-2011 14:36:17

Según tengo entendido, TBookmark es solo un puntero al buffer de datos que tenga el TAdoTable.
Por lo tanto, si creas el TBookmark, cierras y abres la tabla y luego vas a donde apunta TBookmark, no necesariamente irás al mismo lugar. Puede ser que alguien haya creado más registros o borrado alguno mientras tenías abierta la tabla.

Yo trato de no utilizar esto a menos que esté seguro de que no se modificarán los datos.

Lo más normal para mi, en entorno multiusuario, es crear mi propio Bookmark.

Código Delphi [-]
var
   Bookmark :string;
[...]
with Tabla do
begin
   {Deshabilito controles para evitar refrescos inecesarios}
   DisableControls;
   {Bookmark suele ser la concatenacion de los campos PK (Primary Key)}
   Bookmark := FieldByName('EJERCICIO').AsString+'-'+FieldByName('NUMERO').AsString+'-'+FieldByName('LINEA').AsString;
   {Cierro y abro}
   Close;
   Open;
   {Mientras no encuentre el registro y no llegue al final de la tabla}
   while ( (Bookmark <> FieldByName('EJERCICIO').AsString+'-'+FieldByName('NUMERO').AsString+'-'+FieldByName('LINEA').AsString) and (not EOF)) ) do
      Next;
   {No hay que olvidarse de activar los controles}
   EnableControls;
end;

@-Soft 02-02-2011 03:40:08

gracias duilioisola

en conclusión no es recomendable tomar la posición de puntero, luego hacer un append, después hacer el post, después cerrar y abrir el TTable o TQuery y por ultimo recuperar el Puntero para que se mantenga en la posición guardada.

si esto es así, no veo otra forma de mantener los cambios al instante para que el usuario los vea reflejados instantáneamente y ademas que el registro no se le pierda en la lista del DBGrid lo que a mi entender es un poco fastidioso cuando terminas de grabar un registro porque a veces al perder la posición el usuario piensa que no se grabo o si no se reflejan los cambios instantáneamente es una tortura.

que me sugieren para evitar esto?

Al González 02-02-2011 06:39:17

Quisiera ayudarte, pero primero necesito entender qué es lo que tú necesitas. Eso no queda muy claro hasta ahora.

¿Podrías explicar cuál es el escenario, situación, problema, etc. con mayor detalle, para entonces ayudarte a encontrar una solución?

¡Gracias!

Al González.

@-Soft 02-02-2011 13:03:26

de acuerdo Al

es sabido por todos en el foro, que cuando estas haciendo una operacion de inserción, modificación y borrado con TAdoTable o TAdoQuery al momento de hacer un Post, los cambios no se ven reflejados inmediatamente al menos que hagas un Close y después un Open. el caso es que cuando se hace esto se pierde la posición del puntero,.


yo soy de los que hago los mantenimientos mostrando primero una lista con los registros en un Grid, encima un Toolbar con los botones para hacer las operación de inserción, borrado, edición, búsqueda, etc.. cuando hago la operación abro una ventana donde registro los campos y acepto los cambios que se deberían reflejarse automáticamente.

lo que e estado haciendo para "SOLUCIONAR ESTO" poner el TAdoTable en Append, luego guardo la posición y después hago post y por ultimo recupero la posición, pero al parecer y según e investigado y no es un método muy recomendable. desearía que me echen una manito con eso para dar calidad y robustez a mi aplicación.

bueno, espero que mas o menos hallas comprendido el caso, es un caso común.

gracias

pacopenin 02-02-2011 14:53:22

Hola.

Yo no trabajo con ADO, pero creo que lo que voy a comentar puede ayudarte.
En ese tipo de mantenimientos utilizo dos Querys :

1. Una para mostrar en el Grid que va casi siempre contra una VISTA (view). Así puedo mostrar en el Grid información de tablas relacionadas (por ejemplo, el nombre del sector al que pertenece, la descripción de la forma de pago, etc).
2. Otra que es la que se vincula con el formulario de Mantenimiento (altas y modificaciones). Cuando es una modificación, hago un SELECT por el ID del registro que tengo en el grid. Para un alta hago una select por id = -1 para tenerla vacía y la pongo en insert /append. Al cerrar el formulario, puedo recargar la Query del grid y utilizar el id de esta tabla para posicionarme si es necesario.

A mi, ésto me va bien y bastante rápido.

Saludos.


La franja horaria es GMT +2. Ahora son las 09:54:58.

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