Ordenar Cursores

Tengo un cursor el cual lleno de información usando un botón cualquiera, la información del cursor se muestra en un grid en el mismo instante que se agrega la información pero necesito que la información agregada salga ordenada por una columna especifica ya probé agregando la sentencia index on micursor tal indmicursor después de crear el mismo pero no me funciona, ¿debería funcionar así o tendría que agregar algún ser order en algún lado?

1 Respuesta

Respuesta
1
Espero poder ayudarte:
Es correcto lo de index on en tu consulta.
Cuando agregas un nuevo registro a tu cursor fíjate que hagas un refresh del grid así se acomoda en la posición que necesitas.
Thisform. Grid. Refresh
Además, fíjate que el registro que agregas realmente tenga efecto sobre el indice. Por ejemplo; si una tabla esta indexada por fecha y vos al insertar agregas de la misma fecha, parecerá que no tiene efecto.
Por ejemplo:
10/11/2009 JUAN PEREZ
10/11/2009 ARIEL PEREZ
Quizá cuando agregas esto te parezca que Ariel deba ir delante pero lo que pasa es que el indice es solo por fecha y ante dos datos iguales, el siguiente orden es el de inserción.
Espero haberte ayudado
Gracias por la ayuda sin embargo sigo con el problema mira para ilustrar mejor mi problema te dejo lo que tengo, aquí creo el cursor digamos en algún método de la misma forma,
create cursor partidasAran (nompartida c(30), porcenpagado n(5,2), valor n(10,2))
SELECT partidasAran
INDEX ON valor TAG indvalor
set order to indvalor
with thisformset.partidas.rejilla1
    .recordsourcetype = 1
    .recordsource = 'partidasAran'
    .columncount = 3
    .column1.width = 200
    .column2.width = 150
    .column3.width = 250
    .column1.header1.caption = 'Partida'
    .column2.header1.caption = 'Porcentaje'
    .column3.header1.caption = 'Valor'
    .column1.readonly = .t.
    .column2.readonly = .t.
    .column3.readonly = .t.
endwith
thisform.rejilla1.refresh

Luego en el boton esta este codigo:
select partidasAran
go top
locate for nompartida = xxnumpartida
if found()
    replace valor        with valor + xxvalorpagado
else
    append blank
    replace nompartida      with alltrim(xxnumpartida)
    replace porcenpagado     with xxporcpagado
    replace valor        with xxvalorpagado
endif
thisformset.partidas.rejilla1.Refresh

Gracias de nuevo, este problema me esta quebrando la cabeza!
Saludos,
Me parece que te falta declarar el controlSource de las columnas.
.column1.controlSource="partidasaran.nompartida"
Después de los replace, usá el comando flush para asegurarte que los datos se actualicen físicamente y el indice se actualice también.
Después del endif
Endif
Flush
Espero que funcione. Cualquier cosa me hago un form y lo veo ejecutándose aquí. Un abrazo

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas