PDA

Ver la Versión Completa : Reposicionar registro grabado


Ricardo Alfredo
23-06-2003, 20:01:39
Hola Amigos, he buscado en los mensajes anteriores esta situacion pero no logro encontrarlo.
Sucede lo siguiente , estoy trabajando con una Ttable , en la cual ingreso datos y cuando grabo me vuelve al principio. Esta TTable la tengo en una form con estilo de registro a registro. Lo que yo deseo es que cuando el usuario grabe un nuevo registro este quede posicionado en el nuevo registro, lo que me sucede ahora es que se me va a otro registro, que aparentemente es el primero grabado en la tabla.

Como puedo solucionar este problemita.


Gracias

marcoszorrilla
23-06-2003, 20:08:50
Estilo de registro a registro?

Qué quieres decir que tienes una rejilla (DbGrid) e introduces los datos a través de la rejilla?

Y que quieres que al dar un alta el puntero se quede sobre dicho registro?

Un saludo.

Ricardo Alfredo
23-06-2003, 20:17:52
Hola, no utilizo dbgrids sino que un registro a la vez, en el caso de los dbgrids no tiene mayor importacia ya que tengo un conjunto de datos a la vista, encambio con los otros componetes, que manejan un registro a la vez (dbedit, dbcombo box, etc), cada vez que doy grabar se me posiciona en el primer registro .
Para solucionar temporalmeten lo que hago es que despues del post uso el fillter y me imagino que debiera ser de otro modo.

marcoszorrilla
23-06-2003, 22:32:16
Perdona pero cuando dices doy a grabar, que código se ejecuta, porque si solamente haces Post, el puntero se queda posicionado en le registro actual.

Un Saludo.

cmgenny
23-06-2003, 23:08:13
Holas

Ricardo Alfredo

No te explicas muy bien pero si lo que quieres es que al insertar un registro nuevo los que estan se queden arriba en el dbgrid y el nuevo sea el que se queda abajo (como en las facturas), lo que tienes que hacer es cambiar post por append.

append inserta un registro al final de la tabla.

si no te ayude explicate mejor quizas podamos entenderte gracias.

Ricardo Alfredo
24-06-2003, 00:36:33
Tengo la siguiente estructura:
Tabla A (MAESTRA)
Tabla B (Detalle B)
Tabla C (Detalle C)

En una form ingreso simultaneamente en estas tres tablas con la siguiente secuencia.
En un PageControl tengo 2 Tabsheet, en el primero los datos de la MAESTRA (Tabla A), en el segundo tengo el tabsheet "separado" en dos ya que tengo otro PageControl.
En la parte fuera de este page tengo los datos de la tabla B (Detalle B) que son prerequisito de la tabla C que esta dentro del segundo PageControl.

Entonce para la tabla B yo ingreso un dato, como este es prerequicito de la tabla C cuando el usuario da un click o pone el foco en el tabsheet del segun pagecontrol yo realizo lo siguiente
if tabla_B.modified then tabla_B.post;

con esto me aseguro que el dato existira cuando trate de ingresar en la tabla C.

Justo cuando realiza esta accion es que me cambia el dato que se visualiza por uno que ya esta grabado, pero el dato que recien ingrese quedo grabado correctamente, sin embargo esto me produce que debo seleccionar el dato grabado nuevamente para que en la tabla C me quede en forma correcta.

He revisado la definicion bien la definicion del MasterFields para descartar que me falte alguna condicion pero esta completa.

Mas o menos esa es la situacion.

__cadetill
24-06-2003, 01:05:44
si solo haces un Post como mencionas, como te dice Marcos, el cursor deberia quedarse en el registro grabado y no irse al principio de la tabla. Seguro que no haces nada en algun evento (como en el AfterPost de la tabla o algo asi)??

Ricardo Alfredo
26-06-2003, 18:37:50
Hola de nuevo, mira no tengo nada an los after de la tabla, pero siguiendo con mas cuidado este problema me percate que solo pasa cuando las claves de la tabla son similares, es decir por ejemplo ingreso una fila con la siguiente clave (todas mis campos claves en este caso son del tivo varchar)

primera fila clave
Unidad Santander

segunda fila clave
Unidad Valdivia

tercera fila clave
Unidad Santiago

en el caso cuando agrego el tercer registro, posterior a realizar el post , se me posiciona en el primer registro, esto "Unidad Santander".

ahora bien revisando existe la instruccion GotoBookmark , que me parece que es para posicionar un dataset, pero no logro enter como utilizarla, si me pueden ayudar con esto por favor

emili
27-06-2003, 13:24:31
Te comprendo perfectamente Ricardo Alfredo.

La solución es guardarse los valores donde quieras posicionarte y luego hacer un FindKey de la clave primaria del registro de dicha tabla.

Seria algo asi:

// antes de guardar el registro insertado
Campo_clave_1:= Tabla.Campo_clave_1.AsVariant // o el tipo que sea;
Campo_clave_2:= Tabla.Campo_clave_2.AsVariant;
Campo_clave_3:= Tabla.Campo_clave_3.AsVariant;

// Seguidamente haces el post
Tabla.post;

// Ahora debes hacer el FindKey
Tabla.FindKey([Campo_clave_1,Campo_clave_2,Campo_clave_3]);



Esto te posicionará en el registro que acabas de insertar.


Saludos a todos!;)