twbrowse+mysql utilizando recordset é possivel
twbrowse+mysql utilizando recordset é possivel
twbrowse+mysql utilizando recordset é possivel?
Alguem teria um exemplo?
muito obrigado
Alguem teria um exemplo?
muito obrigado
Last edited by MGA on Wed Jul 28, 2010 4:47 pm, edited 2 times in total.
- Ramon Paredes
- Posts: 215
- Joined: Fri Feb 02, 2007 3:38 pm
- Location: Managua, Nicaragua
Re: twbrowse+mysql utilizando recordset é possivel
SGS,
Si es posible, aqui te dejo un pequeÑo ejemplo como guia , altas, bajas y cambios con un Browse de la clase TWbrowse
#Include "FiveWin.ch"
#Include "Ado.ch"
#Include "Report.ch"
//====================
FUNCTION TABLAS()
//====================
Public dTipo[1],dNatural
dNatural :={"Deudora","Acreedora"}
PRIVATE oRs := TOLEAUTO():New("adodb.recordset")
oRs:LockType := adLockOptimistic
oRs:CursorType := adOpenKeyset
oRs:CursorLocation := adUseClient
oRs:ActiveConnection(oCon)
oRs:Source := "Select * from catalogo"
oRs:Open()
Public oDlg,
Public oBtnCancel,oLbx,oBtn
DEFINE DIALOG oDlg RESOURCE 14
REDEFINE LISTBOX oLbx FIELDS oRs:Fields("codigo"):Value, ;
oRs:Fields("nombre"):Value, ;
oRs:Fields("naturaleza"):Value, ;
oRs:Fields("eeff"):Value ,;
oRs:Fields("afectar"):Value ;
FIELDSIZES 100,250,100,250,50 ;
HEADERS "Codigo","Nombre de la Cuenta","Naturaleza","Ubic. EEFF","s/n" ;
COLOR CLR_HBLUE,CLR_WHITE ;
ID 108 of oFld:aDialogs[1]
oLbx:aJustify ={.F.,.F.,.f.,.f.,.f.}
oLbx:bLogicLen = { || oRs:RecordCount }
oLbx:bGoTop = { || oRs:MoveFirst() }
oLbx:bGoBottom = { || oRs:MoveLast() }
oLbx:bSkip = { | nSkip | Skipper( oRs, nSkip ) }
oLbx:cAlias = "ARRAY"
REDEFINE BUTTON ID 102 OF oDlg ACTION( EditC1(.t.,oLbx ), oLbx:Refresh() )
REDEFINE BUTTON ID 103 OF oDlg ACTION( EditC1(.f.,oLbx ),oLbx:Refresh() )
REDEFINE BUTTON ID 104 OF oDlg ACTION( BorrO( oLbx ), oLbx:Refresh() )
REDEFINE BUTTON ID 105 OF oDlg ACTION ( oDlg:End() )
RETURN NIL
//=================================
FUNCTION EditC1(SiNuevo, oLbx )
//=================================
Local oDlg, lSalvar := .f.
IF sinuevo = .t.
oRs:ADDNEW()
oRs:Fields("codigo"):value := SPACE(12)
oRs:Fields("nombre"):value := SPACE(45)
oRs:Fields("naturaleza"):value := SPACE(9)
oRs:Fields("eeff"):value := SPACE(50)
oRs:Fields("afectar"):value := 0
ENDIF
LoadLibrary("BWCC32.DLL")
DEFINE BRUSH oBrush FILENAME "OSXBack.bmp"
DEFINE DIALOG oDlg RESOURCE 23 BRUSH oBrush TRANSPARENT
REDEFINE GET oRs:Fields("codigo"):value ID 101 of oDlg
REDEFINE GET oRs:Fields("nombre"):value ID 102 of oDlg
REDEFINE COMBOBOX oRs:Fields("naturaleza"):value ID 103 of oDlg PROMPTS dNatural
REDEFINE COMBOBOX oRs:Fields("eeff"):value ID 104 of oDlg PROMPTS dTipo
REDEFINE CHECKBOX oRs:Fields("afectar"):value ID 105 of oDlg
REDEFINE BUTTON ID 106 OF oDlg action ( lSalvar := .T. , oDlg:End() )
REDEFINE BUTTON ID 107 OF oDlg ACTION ( lSalvar := .F. , oDlg:End() ) CANCEL
ACTIVATE DIALOG oDlg CENTERED
IF lSalvar
oRs:UPDATE()
IF !empty(oRs:Filter)
oRs:REQUERY()
ENDIF
ELSE
IF SiNuevo
oRs:DELETE()
oRs:REQUERY()
ENDIF
ENDIF
RETURN
//======================================
STATIC FUNCTION SKIPPER( oRs, nSkip )
//======================================
LOCAL nRec := oRs:AbsolutePosition
oRs:Move( nSkip )
IF oRs:EOF()
oRs:MoveLast()
ENDIF
IF oRs:BOF()
oRs:MoveFirst()
ENDIF
RETURN oRs:AbsolutePosition - nRec
//================================
STATIC FUNCTION BORRO( oLbx )
//================================
oRs:Delete()
oRs:Requery()
oLbx:Refresh()
RETURN
// Nota : la estructura de la tabla es la siguiente :
// NOMBRE : CATALOGO
// CODIGO CARACTER 12
// NOMBRE VARCHAR 40
// NATURALEZA CARACTER 10
// EEFF VARCHAR 35
// AFECTAR TYNINT 1
//=======================================================
espero te sea de utilidad,
Desde Managua Nicaragua
Ramon Paredes
Si es posible, aqui te dejo un pequeÑo ejemplo como guia , altas, bajas y cambios con un Browse de la clase TWbrowse
#Include "FiveWin.ch"
#Include "Ado.ch"
#Include "Report.ch"
//====================
FUNCTION TABLAS()
//====================
Public dTipo[1],dNatural
dNatural :={"Deudora","Acreedora"}
PRIVATE oRs := TOLEAUTO():New("adodb.recordset")
oRs:LockType := adLockOptimistic
oRs:CursorType := adOpenKeyset
oRs:CursorLocation := adUseClient
oRs:ActiveConnection(oCon)
oRs:Source := "Select * from catalogo"
oRs:Open()
Public oDlg,
Public oBtnCancel,oLbx,oBtn
DEFINE DIALOG oDlg RESOURCE 14
REDEFINE LISTBOX oLbx FIELDS oRs:Fields("codigo"):Value, ;
oRs:Fields("nombre"):Value, ;
oRs:Fields("naturaleza"):Value, ;
oRs:Fields("eeff"):Value ,;
oRs:Fields("afectar"):Value ;
FIELDSIZES 100,250,100,250,50 ;
HEADERS "Codigo","Nombre de la Cuenta","Naturaleza","Ubic. EEFF","s/n" ;
COLOR CLR_HBLUE,CLR_WHITE ;
ID 108 of oFld:aDialogs[1]
oLbx:aJustify ={.F.,.F.,.f.,.f.,.f.}
oLbx:bLogicLen = { || oRs:RecordCount }
oLbx:bGoTop = { || oRs:MoveFirst() }
oLbx:bGoBottom = { || oRs:MoveLast() }
oLbx:bSkip = { | nSkip | Skipper( oRs, nSkip ) }
oLbx:cAlias = "ARRAY"
REDEFINE BUTTON ID 102 OF oDlg ACTION( EditC1(.t.,oLbx ), oLbx:Refresh() )
REDEFINE BUTTON ID 103 OF oDlg ACTION( EditC1(.f.,oLbx ),oLbx:Refresh() )
REDEFINE BUTTON ID 104 OF oDlg ACTION( BorrO( oLbx ), oLbx:Refresh() )
REDEFINE BUTTON ID 105 OF oDlg ACTION ( oDlg:End() )
RETURN NIL
//=================================
FUNCTION EditC1(SiNuevo, oLbx )
//=================================
Local oDlg, lSalvar := .f.
IF sinuevo = .t.
oRs:ADDNEW()
oRs:Fields("codigo"):value := SPACE(12)
oRs:Fields("nombre"):value := SPACE(45)
oRs:Fields("naturaleza"):value := SPACE(9)
oRs:Fields("eeff"):value := SPACE(50)
oRs:Fields("afectar"):value := 0
ENDIF
LoadLibrary("BWCC32.DLL")
DEFINE BRUSH oBrush FILENAME "OSXBack.bmp"
DEFINE DIALOG oDlg RESOURCE 23 BRUSH oBrush TRANSPARENT
REDEFINE GET oRs:Fields("codigo"):value ID 101 of oDlg
REDEFINE GET oRs:Fields("nombre"):value ID 102 of oDlg
REDEFINE COMBOBOX oRs:Fields("naturaleza"):value ID 103 of oDlg PROMPTS dNatural
REDEFINE COMBOBOX oRs:Fields("eeff"):value ID 104 of oDlg PROMPTS dTipo
REDEFINE CHECKBOX oRs:Fields("afectar"):value ID 105 of oDlg
REDEFINE BUTTON ID 106 OF oDlg action ( lSalvar := .T. , oDlg:End() )
REDEFINE BUTTON ID 107 OF oDlg ACTION ( lSalvar := .F. , oDlg:End() ) CANCEL
ACTIVATE DIALOG oDlg CENTERED
IF lSalvar
oRs:UPDATE()
IF !empty(oRs:Filter)
oRs:REQUERY()
ENDIF
ELSE
IF SiNuevo
oRs:DELETE()
oRs:REQUERY()
ENDIF
ENDIF
RETURN
//======================================
STATIC FUNCTION SKIPPER( oRs, nSkip )
//======================================
LOCAL nRec := oRs:AbsolutePosition
oRs:Move( nSkip )
IF oRs:EOF()
oRs:MoveLast()
ENDIF
IF oRs:BOF()
oRs:MoveFirst()
ENDIF
RETURN oRs:AbsolutePosition - nRec
//================================
STATIC FUNCTION BORRO( oLbx )
//================================
oRs:Delete()
oRs:Requery()
oLbx:Refresh()
RETURN
// Nota : la estructura de la tabla es la siguiente :
// NOMBRE : CATALOGO
// CODIGO CARACTER 12
// NOMBRE VARCHAR 40
// NATURALEZA CARACTER 10
// EEFF VARCHAR 35
// AFECTAR TYNINT 1
//=======================================================
espero te sea de utilidad,
Desde Managua Nicaragua
Ramon Paredes
... Desde la Tierra de lagos y Volcanes......
Re: twbrowse+mysql utilizando recordset é possivel
Ramon,
Muito obrigado por ter respondido.
Realmente o seu exemplo será de muita utilidade!
Eu uso SQLRDD (xharbour), é possível utilizar com o seu exemplo?
ex:
nID:=SR_GetActiveConnection() //Retorna o ID da conexão atualmente ativa
PRIVATE oRs := TOLEAUTO():New("adodb.recordset")
oRs:LockType := adLockOptimistic
oRs:CursorType := adOpenKeyset
oRs:CursorLocation := adUseClient
oRs:ActiveConnection(nID)
oRs:Source := "Select * from catalogo"
Isso é possível ?
Se não, vc poderia me mostrar a parte da conexão do seu codigo?
Muito obrigado Ramon
SGS
Muito obrigado por ter respondido.
Realmente o seu exemplo será de muita utilidade!
Eu uso SQLRDD (xharbour), é possível utilizar com o seu exemplo?
ex:
nID:=SR_GetActiveConnection() //Retorna o ID da conexão atualmente ativa
PRIVATE oRs := TOLEAUTO():New("adodb.recordset")
oRs:LockType := adLockOptimistic
oRs:CursorType := adOpenKeyset
oRs:CursorLocation := adUseClient
oRs:ActiveConnection(nID)
oRs:Source := "Select * from catalogo"
Isso é possível ?
Se não, vc poderia me mostrar a parte da conexão do seu codigo?
Muito obrigado Ramon
SGS
Re: twbrowse+mysql utilizando recordset é possivel
Ola SGS
Tambem uso a SQLRDD e não ha a nescessidade de usar RECORDSET, vc pode usar como um DBF normal, basta utilizar USE <tabela> ALIAS <calias> NEW VIA "SQLRDD"
Qualquer coisa grite.
Tambem uso a SQLRDD e não ha a nescessidade de usar RECORDSET, vc pode usar como um DBF normal, basta utilizar USE <tabela> ALIAS <calias> NEW VIA "SQLRDD"
Qualquer coisa grite.
Jackson Douglas C. Brito
Boa Vista - RR - Brasil
FWH 12.09 Last Build
xHarbour Free
UESTUDIO
SQLRDD
Boa Vista - RR - Brasil
FWH 12.09 Last Build
xHarbour Free
UESTUDIO
SQLRDD
Re: twbrowse+mysql utilizando recordset é possivel
Jackson,
Eu já utilizo assim hoje, porem:
Em um cliente especifico com um cadastro de produtos de mais de 200.000 itens, estamos instalando o sistema local e o banco remoto, do jeito que esta fica muito lento a consulta de produtos, por isso estou testanto o desempenho com RECORDSET.
De qualquer forma obrigado
SGS
Eu já utilizo assim hoje, porem:
Em um cliente especifico com um cadastro de produtos de mais de 200.000 itens, estamos instalando o sistema local e o banco remoto, do jeito que esta fica muito lento a consulta de produtos, por isso estou testanto o desempenho com RECORDSET.
De qualquer forma obrigado
SGS
Re: twbrowse+mysql utilizando recordset é possivel
Ola amigo
Infelizmente para se fazer um BROWSE com 100 mil ou mais registros remotamente fica lento mesmo, isso sendo RECORDSET ou USE normal, vc tera que fazer via consulta e trazer o resultado da consulta, agora tem uma função na SQLRDD que limita o NR de REGISTROS a serem mostrados "só num lembro agora" pois deve servir para o seu proposito
Qualquer coisa grite
Infelizmente para se fazer um BROWSE com 100 mil ou mais registros remotamente fica lento mesmo, isso sendo RECORDSET ou USE normal, vc tera que fazer via consulta e trazer o resultado da consulta, agora tem uma função na SQLRDD que limita o NR de REGISTROS a serem mostrados "só num lembro agora" pois deve servir para o seu proposito
Qualquer coisa grite
Jackson Douglas C. Brito
Boa Vista - RR - Brasil
FWH 12.09 Last Build
xHarbour Free
UESTUDIO
SQLRDD
Boa Vista - RR - Brasil
FWH 12.09 Last Build
xHarbour Free
UESTUDIO
SQLRDD
- Ramon Paredes
- Posts: 215
- Joined: Fri Feb 02, 2007 3:38 pm
- Location: Managua, Nicaragua
Re: twbrowse+mysql utilizando recordset é possivel
SGS,
Efectivamente como te indica miragerr aun con Recordsets tendrias el problema de lentitud, tendrias que crear querys para tus consultas de productos asi dinamizar el proceso a nivel remoto, ahora SQLRDD lo que crea realmente en tablas SQL es un record set cuando haces : USE "MITABLA" NEW SHARED ALIAS "MI_RECORDSET" VIA "SQLRDD" por lo que no ganarias mucho en velocidad usando ADO con ese volumen de registros.
Otra sugerencia es que crees indices condicionales desde codigo antes del recordset que efectivamente SQLRDD te lo permite y entonces ganas velocidad en procesos selectivos ,
Saludos desde Managua, Nicaragua
Ramon Paredes
Efectivamente como te indica miragerr aun con Recordsets tendrias el problema de lentitud, tendrias que crear querys para tus consultas de productos asi dinamizar el proceso a nivel remoto, ahora SQLRDD lo que crea realmente en tablas SQL es un record set cuando haces : USE "MITABLA" NEW SHARED ALIAS "MI_RECORDSET" VIA "SQLRDD" por lo que no ganarias mucho en velocidad usando ADO con ese volumen de registros.
Otra sugerencia es que crees indices condicionales desde codigo antes del recordset que efectivamente SQLRDD te lo permite y entonces ganas velocidad en procesos selectivos ,
Saludos desde Managua, Nicaragua
Ramon Paredes
... Desde la Tierra de lagos y Volcanes......
Re: twbrowse+mysql utilizando recordset é possivel
Obrigado Ramon
Re: twbrowse+mysql utilizando recordset é possivel
Ola Ramon,
Testei a minha base com mais de 200.000 registros com recordset e ficou muito bom, demora um pouquinho para carregar no inicio mais depois é uma maravilha.
Porem, tenho um problema:
Estou usando esta configuração:
oRs:LockType := adLockOptimistic
oRs:CursorType := adOpenDynamic
oRs:CursorLocation := adUseClient
Com esta configuração não estou conseguindo visualizar as alterações feitas por outros usuários. Tenho que fazer mais alguma coisa?
Obrigado
SGS
Testei a minha base com mais de 200.000 registros com recordset e ficou muito bom, demora um pouquinho para carregar no inicio mais depois é uma maravilha.
Porem, tenho um problema:
Estou usando esta configuração:
oRs:LockType := adLockOptimistic
oRs:CursorType := adOpenDynamic
oRs:CursorLocation := adUseClient
Com esta configuração não estou conseguindo visualizar as alterações feitas por outros usuários. Tenho que fazer mais alguma coisa?
Obrigado
SGS
Re: Ramon - twbrowse+mysql utilizando recordset é possivel
Ola amigos
SGS esse é um dos problemas quando vc carrega todos os registros para o CACHE do computador local, ele não atualiza os dados, a não ser que vc recarregue novamente o CACHE, como lhe falei vc esta lidando com SQL que é totalmente diferente de DBF, tambem tive este problema, e tive que mudar minha forma de desenvolver, mais se vc quer que apareçam todos os dados de forma RÁPIDA e que venhan sempre com as alterações igual se faz com DBF, lhe aconcelho a testar o ADS SERVER, esse sim meu amigo, é rápido em tudo, mesmo via remoto, só tem um porem, é caro.
Espero ter ajudado
SGS esse é um dos problemas quando vc carrega todos os registros para o CACHE do computador local, ele não atualiza os dados, a não ser que vc recarregue novamente o CACHE, como lhe falei vc esta lidando com SQL que é totalmente diferente de DBF, tambem tive este problema, e tive que mudar minha forma de desenvolver, mais se vc quer que apareçam todos os dados de forma RÁPIDA e que venhan sempre com as alterações igual se faz com DBF, lhe aconcelho a testar o ADS SERVER, esse sim meu amigo, é rápido em tudo, mesmo via remoto, só tem um porem, é caro.
Espero ter ajudado
Jackson Douglas C. Brito
Boa Vista - RR - Brasil
FWH 12.09 Last Build
xHarbour Free
UESTUDIO
SQLRDD
Boa Vista - RR - Brasil
FWH 12.09 Last Build
xHarbour Free
UESTUDIO
SQLRDD
Re: Ramon - twbrowse+mysql utilizando recordset é possivel
Amigos con Ado se puede solo tienes que paginar el browse , como lo hace google y listo
Saludos
Saludos
Re: Ramon - twbrowse+mysql utilizando recordset é possivel
jbrita,
tem um exemplo?
tem um exemplo?
Re: twbrowse+mysql utilizando recordset é possivel
Amigo aca va una imagen
http://yfrog.com/jwimagennlj
la idea es pagina con botones de paginacion ejemplo
Boton Inicio
Boton Atras
Boton Siguente
Boton Fin
FUNCTION paginar_Adelante(oLbx,oRcs,oTabla,oCbx,cIndice)
*--------------------------------------------------------
Local oOrden:=cIndice[oCbx:nAt]
Local campo
If (oRcs:RecordCount) # 0
oRcs:MoveLast()
campo:=oRcs:Fields(oOrden):value
oRcs:Close()
oRcs:Open("SELECT * FROM "+oTabla+" WHERE "+oOrden+" > '" + Alltrim(campo) +"' ORDER BY "+oOrden+" LIMIT 100", oConexion, 1, 3)
If (oRcs:RecordCount) == 0
oRcs:Close()
oRcs:Open("SELECT * FROM "+oTabla+" Order By "+oOrden+" DESC LIMIT 100", oConexion, 1, 3)
oRcs:Sort:=oOrden
Endif
oRcs:Refresh()
oLbx:refresh(.t.)
oLbx:SetFocus()
Endif
RETURN(.t.)
FUNCTION paginar_Atras(oLbx,oRcs,oTabla,oCbx,cIndice)
*-----------------------------------------------------
Local oOrden:=cIndice[oCbx:nAt]
Local campo
If (oRcs:RecordCount)# 0
oRcs:MoveFirst()
campo:=oRcs:Fields(oOrden):value
oRcs:Close()
oRcs:Open("SELECT * FROM "+oTabla+" WHERE "+oOrden+" < '" + AllTrim(campo) +"' ORDER BY "+oOrden+" desc LIMIT 100", oConexion, 1, 3)
If (oRcs:RecordCount) == 0
oRcs:Close()
oRcs:Open("SELECT * FROM "+oTabla+" Order By "+oOrden+" LIMIT 0,100",oConexion, 1, 3)
Endif
If (oRcs:RecordCount) < 100
oRcs:Close()
oRcs:Open("SELECT * FROM "+oTabla+" ORDER BY "+oOrden+" LIMIT 100",oConexion, 1, 3)
Endif
oRcs:Sort:=oOrden
oRcs:Refresh()
oLbx:refresh(.t.)
oLbx:SetFocus()
Endif
RETURN(.t.)
FUNCTION paginar_Inicio(oLbx,oRcs,oTabla,oCbx,cIndice)
*------------------------------------------------------
Local oOrden:=cIndice[oCbx:nAt]
oRcs:Close()
oRcs:Open("SELECT * FROM "+oTabla+" Order By "+oOrden+" LIMIT 0,100",oConexion, 1, 3)
oRcs:Refresh()
oLbx:refresh(.t.)
oLbx:SetFocus()
RETURN(.t.)
FUNCTION paginar_Fin(oLbx,oRcs,oTabla,oCbx,cIndice)
*---------------------------------------------------
Local oOrden:=cIndice[oCbx:nAt]
oRcs:Close()
oRcs:Open("SELECT * FROM "+oTabla+" Order By "+oOrden+" DESC LIMIT 100", oConexion, 1, 3)
oRcs:Sort:=oOrden
oRcs:Refresh()
oLbx:Refresh(.t.)
oLbx:SetFocus()
RETURN(.t.)
http://yfrog.com/jwimagennlj
la idea es pagina con botones de paginacion ejemplo
Boton Inicio
Boton Atras
Boton Siguente
Boton Fin
FUNCTION paginar_Adelante(oLbx,oRcs,oTabla,oCbx,cIndice)
*--------------------------------------------------------
Local oOrden:=cIndice[oCbx:nAt]
Local campo
If (oRcs:RecordCount) # 0
oRcs:MoveLast()
campo:=oRcs:Fields(oOrden):value
oRcs:Close()
oRcs:Open("SELECT * FROM "+oTabla+" WHERE "+oOrden+" > '" + Alltrim(campo) +"' ORDER BY "+oOrden+" LIMIT 100", oConexion, 1, 3)
If (oRcs:RecordCount) == 0
oRcs:Close()
oRcs:Open("SELECT * FROM "+oTabla+" Order By "+oOrden+" DESC LIMIT 100", oConexion, 1, 3)
oRcs:Sort:=oOrden
Endif
oRcs:Refresh()
oLbx:refresh(.t.)
oLbx:SetFocus()
Endif
RETURN(.t.)
FUNCTION paginar_Atras(oLbx,oRcs,oTabla,oCbx,cIndice)
*-----------------------------------------------------
Local oOrden:=cIndice[oCbx:nAt]
Local campo
If (oRcs:RecordCount)# 0
oRcs:MoveFirst()
campo:=oRcs:Fields(oOrden):value
oRcs:Close()
oRcs:Open("SELECT * FROM "+oTabla+" WHERE "+oOrden+" < '" + AllTrim(campo) +"' ORDER BY "+oOrden+" desc LIMIT 100", oConexion, 1, 3)
If (oRcs:RecordCount) == 0
oRcs:Close()
oRcs:Open("SELECT * FROM "+oTabla+" Order By "+oOrden+" LIMIT 0,100",oConexion, 1, 3)
Endif
If (oRcs:RecordCount) < 100
oRcs:Close()
oRcs:Open("SELECT * FROM "+oTabla+" ORDER BY "+oOrden+" LIMIT 100",oConexion, 1, 3)
Endif
oRcs:Sort:=oOrden
oRcs:Refresh()
oLbx:refresh(.t.)
oLbx:SetFocus()
Endif
RETURN(.t.)
FUNCTION paginar_Inicio(oLbx,oRcs,oTabla,oCbx,cIndice)
*------------------------------------------------------
Local oOrden:=cIndice[oCbx:nAt]
oRcs:Close()
oRcs:Open("SELECT * FROM "+oTabla+" Order By "+oOrden+" LIMIT 0,100",oConexion, 1, 3)
oRcs:Refresh()
oLbx:refresh(.t.)
oLbx:SetFocus()
RETURN(.t.)
FUNCTION paginar_Fin(oLbx,oRcs,oTabla,oCbx,cIndice)
*---------------------------------------------------
Local oOrden:=cIndice[oCbx:nAt]
oRcs:Close()
oRcs:Open("SELECT * FROM "+oTabla+" Order By "+oOrden+" DESC LIMIT 100", oConexion, 1, 3)
oRcs:Sort:=oOrden
oRcs:Refresh()
oLbx:Refresh(.t.)
oLbx:SetFocus()
RETURN(.t.)