Buen día,
Creo haber solucionado el tema (por lo menos para el uso que pretendía hacer del query ADS).
Hice una pequeña función que añadí a la clase TxBrowse (al final del xBrowse.prg) al que, obviamente, hay que agregar a la lista de compilación.
Esto hace que pueda ordenar creando un índice temporal en cada ocasión de ordenado por columna.
Como creo debe haber algún/os interesado/s, copio el agregado con su correspondiente explicación.
- Code: Select all Expand view
// 22/07/2012 - agregado by Rolando Cerella
// - Agrego "Function OrdenoSQLADSarea(oDbf,cIndex,nCol,oBrw)" para poder hacer un xbrowse a un query ADS tipo "{static}"
// Luego de hacer un query "{static}", en el área activa queda el resultado de este query y esto lo paso a un
// objeto oDbf (Usando la clase TDatabase). esto permite hacerle un xbrowse pero de sólo lectura, no se puede
// editar (se podría actualizar haciendo nuevamente el query y luego "DATABASE oDbf").
// Para listar el resultado del query en una xbrowse se hace primero un query ADS tipo static y luego:
//
// sqlarea->(dbgotop())
// DATABASE oDbf
//
// Para ordenar por columna (cuando se presiona sobre la cabecera), agregué al final de la xBrowse.prg, esta función
// "Function OrdenoSQLADSarea(oDbf,cIndex,nCol,oBrw)" que se invoca así:
//
// nColumna:=OrdenoSQLADSarea(oDbf,cIndex,nCol,oBrw) - los datos que se le pasan son:
// -- oDbf = el objeto database creado
// -- cIndex = en nombre del campo por el que se odenará
// -- nCol = número de la columna que se ordenará
// -- oBrw = objeto del TxBrowse
// ----> RETORNA el nro de columna por el que se ordenó por última vez, quizás convenga tenerlo
// por si hiciera falta luego para otra función.
//
//
// ----------------------------------------------------------------------------------------------------------------------------
Function OrdenoSQLADSarea(oDbf,cIndex,nCol,oBrw)
//cIndex ej. "GARANTIZA"
// nCol = columna que se ordena
local nRecno
nRecno:=oDbf:recno()
oDbf:CreateIndex("TEMP.CDX", cIndex, cIndex)
oDbf:goto(nRecno)
For f = 1 to len(oBrw:aCols)
if f=nCol
oBrw:aCols[f]:cOrder:="A"
else
oBrw:aCols[f]:cOrder:=" "
endif
next
oBrw:refresh()
Return nCol
// ----------------------------------------------------------------------------------------------------------------------------
Como se puede ver, sencillito, pero para mí, rendidor.
Saludos.
Rolando