Page 1 of 1

database y browse

Posted: Sun May 24, 2009 8:51 pm
by surGom
Hola estoy intrigado con el uso de la clase. Les explico, utilizó mucho esta clase y ningún problema. Uno de los usos que le doy es el de cargar los browses con esta. Bueno hasta aquí no hay problema. Pero hoy quise hacer lo mismo pero con la diferencia que la clase la database la hago en una función principal y el browse lo llamo en otra función en el mismo prg. El problema es que no me muestra nada en el browse. Ahora si abro la base de datos en la función secundaria(en este caso function provee(olbx,lnuevo,oMae)) funciona perfectamente. Alguien sabe el porque de este comportamiento??

Uso fwh 2.6 xharbour 99.61 y borland

Luis

Ejemplo ( no funciona )
FUNCTION Brwprove //principal del programa
LOCAL oLbx
LOCAL oDlg, oSplit := array(2)
LOCAL oRadioButton
LOCAL nOrden:=1
LOCAL onbut := array(6)
LOCAL surge
LOCAL oMae
Local cTitulo := "Listado de proveedores locales"
LOCAL aObj := array(0)
LOCAL oBanpro


if !pasaje("banprove");eturn nil;endif
DATABASE oBanpro
oBanpro:setorder(1)
oBanpro:beof:={||nil}

ETC ETC ETC

REDEFINE BTNBMP oNbut[1] id 102 of oDlg resource "btnagregar","btnagrega1" ACTION provee( oLbx, .T.,oMae,oBanpro ) NOBORDER
*//////////////////////////////////////////////////////////////////*
function provee(olbx,lnuevo,oMae,obanpro)
bla bla bla

REDEFINE LISTBOX oBrw ;
FIELDS (obanpro:calias)->banco, (obanpro:calias)->cbu FIELDSIZES 190,120;
HEADERS "BANCO", "CBU" ID 102 of oFold:adialogs[3] UPDATE

oBrw:bSkip = { | nRecs | obanpro:Skipper( nRecs ) }
oBrw:nLineStyle := 3
oBrw:nClrBackFocus := CLR_CYAN
oBrw:nClrForeFocus := CLR_WHITE
////////////////////////////////////////////////////////////////////
En cambio así sí funciona

FUNCTION Brwprove //principal del programa
LOCAL oLbx
LOCAL oDlg, oSplit := array(2)
LOCAL oRadioButton
LOCAL nOrden:=1
LOCAL onbut := array(6)
LOCAL surge
LOCAL oMae
Local cTitulo := "Listado de proveedores locales"
LOCAL aObj := array(0)
LOCAL oBanpro

ETC ETC ETC

REDEFINE BTNBMP oNbut[1] id 102 of oDlg resource "btnagregar","btnagrega1" ACTION provee( oLbx, .T.,oMae) NOBORDER

ETC ETC ETC

*//////////////////////////////////////////////////////////////////*
function provee(olbx,lnuevo,oMae)

if !pasaje("banprove");eturn nil;endif
DATABASE oBanpro
oBanpro:setorder(1)
oBanpro:beof:={||nil}

bla bla bla


REDEFINE LISTBOX oBrw ;
FIELDS (obanpro:calias)->banco, (obanpro:calias)->cbu FIELDSIZES 190,120;
HEADERS "BANCO", "CBU" ID 102 of oFold:adialogs[3] UPDATE

oBrw:bSkip = { | nRecs | obanpro:Skipper( nRecs ) }
oBrw:nLineStyle := 3
oBrw:nClrBackFocus := CLR_CYAN
oBrw:nClrForeFocus := CLR_WHITE

Re: database y browse

Posted: Mon May 25, 2009 3:25 am
by jrestojeda
Hola amigo...
Prueba poner un GoTop en la apertura de la DBF

Code: Select all | Expand


if !pasaje("banprove");eturn nil;endif
DATABASE oBanpro
oBanpro:setorder(1)
oBanpro:beof:={||nil}
oBanpro:GoTop()
 


Y el LISTBOX sin el Alias.

Code: Select all | Expand


REDEFINE LISTBOX oBrw ;
         FIELDS oBanpro:banco, oBanpro:cbu;
         FIELDSIZES 190,120;
         HEADERS "BANCO", "CBU" ID 102 of oFold:adialogs[3] UPDATE
 


Espero te sirva.
Saludos,

Re: database y browse

Posted: Mon May 25, 2009 11:18 am
by surGom
Sí así lo hago en otra parte ya que hago un filtro de la base para que me muestre sólo los registros del proveedor consultado. Me parece que el problema está en declarar al browse como local, voy a probar en declararlo como estático

Luis

Re: database y browse

Posted: Mon May 25, 2009 11:40 am
by surGom
Bueno acabo de probar y tampoco me funciona... Lo voy a dejar así como está es decir abrir cada vez que consulto un proveedor abriendo la base de datos y cerrandola cuando salgo de la rutina. No es lo correcto pero funciona.

Cuando empezé a programar alguien dijo si funciona no lo toques. No es mi gusto pero estuvedos horas con esto y no hubo caso

Re: database y browse

Posted: Mon May 25, 2009 1:57 pm
by QAZWSX2K
he tenido ese problema antes y lo resolvi pasando el objeto database al programa que hace el browse

Re: database y browse

Posted: Mon May 25, 2009 3:53 pm
by surGom
Sí así lo hice yo también, lo que buscaba era saber si alguien tenía una explicación para esto

Un abrazo
Luis

Re: database y browse

Posted: Mon May 25, 2009 6:17 pm
by Carlos Mora
Una pregunta... Estas seguro que cuando declaras DATABASE oBanPro está seleccionada la dbf que quieres? Que pasa si ponemos un ? Alias() justo antes del DATABASE oBanPro?

Un saludo

Re: database y browse

Posted: Mon May 25, 2009 7:22 pm
by surGom
Carlos así la declaro

if !pasaje("banprove");return nil;endif
DATABASE oBanpro
oBanpro:setorder(1)
oBanpro:beof:={||nil}


Lo extraño que si lo declaro en el primer prg y luego lo paso como variable de la segunda función, no muestra nadaen el browse, (probé llamando un msg y sí me muestra un registro en la segunda función). Si tal cual está arriba lo declaro en la segunda función no hay problemas


Luis

Re: database y browse

Posted: Tue May 26, 2009 8:13 pm
by ADBLANCO
Prueba con :

REDEFINE BTNBMP oNbut[1] id 102 of oDlg resource "btnagregar","btnagrega1" ACTION eval({|| provee( oLbx, .T.,oMae,oBanpro )}) NOBORDER

Re: database y browse

Posted: Tue May 26, 2009 10:55 pm
by surGom
Angel tampoco funciona. Hice un montón de pruebas y no sigue sin funcionar pasando como variable la base. Si la base la abro en el misma función que declaro el browse funciona.

Gracias

Luis