FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Cerrar dbf despues de preview
Posts: 607
Joined: Mon Mar 04, 2013 04:32 PM
Cerrar dbf despues de preview
Posted: Tue Jul 13, 2021 03:08 PM
Hola:

En un informe y haciendo caso a Mr. Rao abro el dbf con un nuevo alias para realizar el mismo

activo el boton excel para exportar a esa hoja de calculo. Pero quiero cerrar la base de datos abierta al terminar el informe.

utilizo este codigo.

Code (fw): Select all Collapse
oRepObr:bInit := {|| ListO->(dbgotop()) } // Activa boton Excel en Preview  Da error
   
   ACTIVATE REPORT oRepObr FOR IF( lSoloOpen, ListO->Cerrada = .F., .T. ) .AND. IF( lSoloClose, ListO->Cerrada = .T., .T. ) ;
   .AND. IF( ListO->( ordSetFocus() ) == "CODIGO", ListO->Codigo <= cFinal, ListO->Nombre <= cFinal ) WHILE ListO->( ! Eof() )
   oFont:END()
ENDIF

ListO->(DBCloseArea()) // error.


Este codigo provoca error . ya que al exportar a excel dice que la base de datos no esta abierta.

Como hago para cerrar la base de datos despues de exportar a Excel.?

Gracias por vuestra inestamable ayuda.

Saludos.

Jose.
Fwh 24.07 64 bits + Harbour 64 bits 3.2dev(r2407221137) + MSVC64
Posts: 8515
Joined: Tue Dec 20, 2005 07:36 PM
Re: Cerrar dbf despues de preview
Posted: Tue Jul 13, 2021 04:06 PM
Code (fw): Select all Collapse
DbCloseArea()

脫

( ( ListO )->DBCloseArea() ) 

脫 

CLOSE 聽ListO 

脫 

DBCLOSEALL()


Regards, saludos.
Jo茫o Santos - S茫o Paulo - Brasil - Phone: +55(11)95150-7341
Posts: 607
Joined: Mon Mar 04, 2013 04:32 PM
Re: Cerrar dbf despues de preview
Posted: Tue Jul 13, 2021 06:08 PM

Muchas gracias por tu inter茅s Joao

No me he explicado bien. Mira tengo un browse con una dbf entonces tengo una opci贸n que lanza un di谩logo en el cual se preguntan datos del informe, ah铆 ya se abre la misma dbf con otro alias, se pregunta si queremos
Filtrar por c贸digo por nombre etc si aceptamos se prepara el informe,
En este informe se activa el bot贸n Excel y al acabar el informe se cierra la dbf que hemos abierto para ese informe solamente.

Todo eso Funciona ok. Se activa el bot贸n de Excel , pero colo le des al bot贸n de exportar a Excel te da error de que el alias no existe.
O sea ejecuta la 煤ltima instrucci贸n del c贸digo que he publicado estando en el preview.
es eso lo que no entiendo porque incluso si no cierro la dbf en el c贸digo que llamo al di谩logo sino a continuaci贸n.
O se en el action del bot贸n que llam贸 al di谩logo. Despu茅s de eso cierro la dbf.
Sorprendente tambi茅n me da error. Que el alias no existe.

Espero vuestra inestimable ayuda.

Jose.

No

Enviado desde mi POCOPHONE F1 mediante Tapatalk

Fwh 24.07 64 bits + Harbour 64 bits 3.2dev(r2407221137) + MSVC64
Posts: 1344
Joined: Wed Nov 16, 2005 09:14 PM
Re: Cerrar dbf despues de preview
Posted: Tue Jul 13, 2021 08:38 PM
Jos茅, como defines el reporte completo.
Por lo que veo estar铆a bien, pero tienes un endif que no se nota de donde viene.
Este c贸digo funciona bien para mi:
Code (fw): Select all Collapse
use rubros alias "base01" shared new
SET INDEX TO rubrnom

// Defino el reporte
REPORT oRep TITLE "Reporte de Rubros" FONT  oFont1,oFont2,oFont3 ;
       HEADER OemToAnsi(cTitulo) CENTER ;
       FOOTER "Hoja:" + STR(oRep:npage,3) ,"Fecha:"+DTOC(DATE()) CENTER;
       PREVIEW CAPTION  "Reporte de Rubros"
COLUMN TITLE "Nombre" DATA base01->nombre  SIZE 30 FONT 2 GRID
COLUMN TITLE "Codigo" DATA base01->codigo  SIZE 20 FONT 3 GRID
END REPORT
// Activo el reporte
ACTIVATE REPORT oRep WHILE base01->(!EOF())  ON STARTPAGE oRep:SayBitmap(.1,.1,"LOGO.BMP",1.5,.5) 
CLOSE base01
Posts: 400
Joined: Fri May 11, 2007 08:20 PM
Re: Cerrar dbf despues de preview
Posted: Wed Jul 14, 2021 01:54 AM
jvtecheto wrote:Hola:

En un informe y haciendo caso a Mr. Rao abro el dbf con un nuevo alias para realizar el mismo

activo el boton excel para exportar a esa hoja de calculo. Pero quiero cerrar la base de datos abierta al terminar el informe.

utilizo este codigo.

Code (fw): Select all Collapse
oRepObr:bInit := {|| ListO->(dbgotop()) } // Activa boton Excel en Preview 聽Da error
聽 聽
聽 聽ACTIVATE REPORT oRepObr FOR IF( lSoloOpen, ListO->Cerrada = .F., .T. ) .AND. IF( lSoloClose, ListO->Cerrada = .T., .T. ) ;
聽 聽.AND. IF( ListO->( ordSetFocus() ) == "CODIGO", ListO->Codigo <= cFinal, ListO->Nombre <= cFinal ) WHILE ListO->( ! Eof() )
聽 聽oFont:END()
ENDIF

ListO->(DBCloseArea()) // error.


Este codigo provoca error . ya que al exportar a excel dice que la base de datos no esta abierta.

Como hago para cerrar la base de datos despues de exportar a Excel.?

Gracias por vuestra inestamable ayuda.

Saludos.

Jose.

Y asi haz probado
Code (fw): Select all Collapse
ACTIVATE REPORT oRepObr ...
ON END ListO->(DBCloseArea())
fwh 17.12, harbour 3.2.0, pelles C, bcc7, Ms-Sql
Posts: 607
Joined: Mon Mar 04, 2013 04:32 PM
Re: Cerrar dbf despues de preview
Posted: Wed Jul 14, 2021 09:16 AM
Hola amigos:

Muchisimas gracias a todos por el interes.

Pero creo que incluso con la solucion de Artu01, que parecia la que mas se adaptaba cuando le das al boton de exportar de excel te dice que no existe el alias, o sea la base de datos ya esta cerrada.

Es por lo que deduzco que cuando tenemos el preview en nuestra pantalla ya se ha producido el ON END del informe y si pulsas el boton de excel te da error.
Yo creo que lo normal seria que el ON END se lanzara cuando cierras el preview, pero bueno son opiniones.

de todas formas yo cierro la dbf despues de salir del informe, es por lo que no entiendo que desde el preview la dbf ya esta cerrada.
el codigo es trivial , yo presento un dialogo.

Code (fw): Select all Collapse
STATIC FUNCTION ListObras()
local oDlg, oFont
local oDevice, oRepObr
// etc . ...

dbUseArea( .T., , "Obras", "ListO", .T. )

DEFINE DIALOG oDlg NAME "LISTAOBR" ;
   TITLE "LISTADO DE OBRAS"

  
   REDEFINE BTNBMP ID 750 RESOURCE "ACCEPT" OF oDlg ACTION ( lAcepta := .t., oDlg:END() )
   REDEFINE BTNBMP ID 751 RESOURCE "CANCEL" OF oDlg ACTION oDlg:END()

   ACTIVATE DIALOG oDlg CENTERED

IF lAcepta

     // code....
      DEFINE FONT oFont NAME "Courier New" SIZE 0, - 12
      oDevice := TPrinter():NEW( cCaption, .F., IF( nRdest == 1, .T., .F. ) ) 

      
      REPORT oRepObr TITLE Replicate ( "_", 87 ), "", ;
         Replicate( " ", 36 ) + "LISTADO DE OBRAS" ,Replicate ( "_", 87 ) , "" Left ;
         Header "Pag. " + Str( oRepObr:nPage, 3 ) Right ;
         FOOTER aEmpresa[ 1 ] + " - " + aEmpresa[ 2 ] + " (" + aEmpresa[ 11 ] + ")" ;
         CAPTION cCaption FONT oFont TO DEVICE oDevice

         COLUMN TITLE "Codigo", "Inicio"  DATA ListO->Codigo, DToC( ListO->Inicio )
         COLUMN TITLE "Nombre", "C.I.F."  DATA ListO->Nombre, ListO->Cif
         COLUMN TITLE "Direcci贸n", "Provincia" DATA SubStr( ListO->Direc, 1, 20 ), ListO->Provin
         COLUMN TITLE "Poblaci贸n", "C.Postal" DATA SubStr( ListO->Pobla, 1, 14 ), ListO->Postal
         COLUMN TITLE "Telefono", "Presupuesto" DATA ListO->Tele, ListO->Presup PICTURE "@E 999,999.99"

      END REPORT
      oRepObr:nTitleUpline := 0  // Quita la linea de arriba de los titulos 0
      oRepObr:MARGIN( 4, 5, 2 )
      oRepObr:bInit := {|| ListO->(dbgotop()) }
   
      ACTIVATE REPORT oRepObr FOR IF( lSoloOpen, ListO->Cerrada = .F., .T. ) .AND. IF( lSoloClose, ListO->Cerrada = .T., .T. ) ;
      .AND. IF( ListO->( ordSetFocus() ) == "CODIGO", ListO->Codigo <= cFinal, ListO->Nombre <= cFinal ) WHILE ! ListO->(  Eof() ) 

      oFont:END()
   
   ENDIF

   ListO->(DbcloseArea())  

Return NIL


Deduzco que cuando se muestra el preview ya se ha ejecutado todo el codigo incluso el ListO->(DbCloseArea()) con lo cual la dbf esta cerrada
y al llamar al boton de excel da error que no existe el alias.

yo creo que es un tema de dise帽o del preview , espero una orientacion de los mienbros de Fivetech o que me expliquen como puedo hacer un informe
abriendo la dbf y cerrandola en la misma funcion.

Un abrazo a todos.

Jose.
Fwh 24.07 64 bits + Harbour 64 bits 3.2dev(r2407221137) + MSVC64
Posts: 6983
Joined: Fri Oct 07, 2005 07:07 PM
Re: Cerrar dbf despues de preview
Posted: Wed Jul 14, 2021 10:08 AM
Hello Jos茅,

After working on my | i zi pi zi | HTML Report, I follow all the printing problems in the forum and think about how it could be done with HTML Reports.

I think that using HTML as the report definition language has certain advantages.
The HTML Report Generator saves the entire report as an HTML file before the preview.

I think that this can also solve the EXCEL export. All you have to do is open this file in EXCEL.
This is how my report looks if I open with EXCEL.




Best regards,
Otto


viewtopic.php?f=3&t=40621
Posts: 8515
Joined: Tue Dec 20, 2005 07:36 PM
Re: Cerrar dbf despues de preview
Posted: Wed Jul 14, 2021 01:42 PM
Mira:

Code (fw): Select all Collapse
#Include "Report.Ch"    //-> Classe Para Reportes

STATIC FUNCTION ListObras()

   LOCAL oDlg, oFont
   LOCAL oDevice, oRepObr, ListO, cAlias

   // dbUseArea( .T., , "Obras", "ListO", .T. )

   USE OBRAS INDEX OBRAS NEW SHARED ALIAS OBRAS
   GO TOP

   ListO  := ALIAS()
   // O
   cAlias := ALIAS()

   DEFINE DIALOG oDlg NAME "LISTAOBR" TITLE "LISTADO DE OBRAS"

   REDEFINE BTNBMP ID 750 RESOURCE "ACCEPT" OF oDlg ACTION ( lAcepta := .t., oDlg:END() )
   REDEFINE BTNBMP ID 751 RESOURCE "CANCEL" OF oDlg ACTION oDlg:END()

   ACTIVATE DIALOG oDlg CENTERED

   IF lAcepta

     // code....
      DEFINE FONT oFont NAME "Courier New" SIZE 0, - 12
      oDevice := TPrinter():NEW( cCaption, .F., IF( nRdest == 1, .T., .F. ) )

     
      REPORT oRepObr TITLE Replicate ( "_", 87 ), "", ;
         Replicate( " ", 36 ) + "LISTADO DE OBRAS" ,Replicate ( "_", 87 ) , "" Left ;
         Header "Pag. " + Str( oRepObr:nPage, 3 ) Right ;
         FOOTER aEmpresa[ 1 ] + " - " + aEmpresa[ 2 ] + " (" + aEmpresa[ 11 ] + ")" ;
         CAPTION cCaption FONT oFont TO DEVICE oDevice

         COLUMN TITLE "Codigo", "Inicio"  DATA ListO->Codigo, DToC( ListO->Inicio )
         COLUMN TITLE "Nombre", "C.I.F."  DATA ListO->Nombre, ListO->Cif
         COLUMN TITLE "Direcci贸n", "Provincia" DATA SubStr( ListO->Direc, 1, 20 ), ListO->Provin
         COLUMN TITLE "Poblaci贸n", "C.Postal" DATA SubStr( ListO->Pobla, 1, 14 ), ListO->Postal
         COLUMN TITLE "Telefono", "Presupuesto" DATA ListO->Tele, ListO->Presup PICTURE "@E 999,999.99"

      END REPORT

      oRepObr:nTitleUpline := 0  // Quita la linea de arriba de los titulos 0
      oRepObr:MARGIN( 4, 5, 2 )
      oRepObr:bInit := {|| ListO->(dbgotop()) }
   
      ACTIVATE REPORT oRepObr FOR IF( lSoloOpen, ListO->Cerrada = .F., .T. ) .AND. IF( lSoloClose, ListO->Cerrada = .T., .T. ) ;
      .AND. IF( ListO->( ordSetFocus() ) == "CODIGO", ListO->Codigo <= cFinal, ListO->Nombre <= cFinal ) WHILE ! ListO->(  Eof() )

      oFont:END()
   
   ENDIF

   CLOSE ListO
   CLOSE cAlias

Return NIL


Regards, saludos.
Jo茫o Santos - S茫o Paulo - Brasil - Phone: +55(11)95150-7341
Posts: 607
Joined: Mon Mar 04, 2013 04:32 PM
Re: Cerrar dbf despues de preview
Posted: Fri Jul 16, 2021 07:06 AM
Hola Joao.

Muchas gracias por tu interes, pero igual da error que no existe el alias ListO ( o el que sea) ,
lo que significa que cuando se visualiza el preview se ha ejecutado todo el codigo de la funcion hasta el final
y la dbf ha sido cerrada, y si pulsas el boton de excel como se supone que tiene que usar los datos de la dbf esta cerrada.

No digo que sea un bug pero si se podria redise帽ar el preview para que no ejecutara todo el codigo, solo lo hiciera cuando cierras
el preview

Code (fw): Select all Collapse
ACTIVATE REPORT oRepObr FOR IF( lSoloOpen, ListO->Cerrada = .F., .T. ) .AND. IF( lSoloClose, ListO->Cerrada = .T., .T. ) ;
聽 聽 聽 .AND. IF( ListO->( ordSetFocus() ) == "CODIGO", ListO->Codigo <= cFinal, ListO->Nombre <= cFinal ) WHILE ListO->( ! Eof() ) 

聽 聽ListO->(dbcloseArea())


No se ejecutara el ListO->(DbCloseArea()) , hasta que se cerrara el preview cosa que no ocurre actualmente.

imaginaros que en una funcion que presenta un dialogo se ejecutara todo el codigo de la funcion, en este caso no se
ejecuta el codigo a partir de ACTIVATE DIALOG ... hasta que se cierra el mismo. En el codigo de abajo la condicion de
IF lAcepta se ejecuta cuando cierras el DIALOG.

Code (fw): Select all Collapse
ACTIVATE DIALOG oDlg CENTERED

聽 聽IF lAcepta

聽 聽 聽 IF nRad == 1
聽 聽 聽 聽 聽IF ListO->(Ordsetfocus()) != "CODIGO"
聽 聽 聽 聽 聽 聽 ListO->( ordSetFocus( "Codigo" ) )
聽 聽 聽 聽 聽ENDIF
聽 聽 聽 ELSEIF nRad == 2
聽 聽 聽 聽 聽IF ListO->(Ordsetfocus()) != "NOMBRE"
聽 聽 聽 聽 聽 聽 ListO->( ordSetFocus( "Nombre" ) )
聽 聽 聽 聽 聽ENDIF
聽 聽 聽 聽 聽cInicio := Upper( cInicio )
聽 聽 聽 聽 聽cFinal := Upper( cFinal )
聽 聽 聽 ENDIF
// code ....


u ofrecer una solucion para en una funcion que crea un informe y abrimos la misma dbf que tenemos en el Xbrowse pero con otro
alias podamos utilizar la exportacion a Excel, creo que me explico bien. No se sino es asi me lo indicais.

Mr. Rao, como se haria eso?

Saludos

Jose.
Fwh 24.07 64 bits + Harbour 64 bits 3.2dev(r2407221137) + MSVC64
Posts: 8515
Joined: Tue Dec 20, 2005 07:36 PM
Re: Cerrar dbf despues de preview
Posted: Fri Jul 16, 2021 12:54 PM
Bu茅n dia.

Haga un ejemplo com la DBF, e ZIP todo e ponga en el Mega Upload, para testes, porfa.

https://mega.nz

Regards, saludos.
Jo茫o Santos - S茫o Paulo - Brasil - Phone: +55(11)95150-7341
Posts: 400
Joined: Fri May 11, 2007 08:20 PM
Re: Cerrar dbf despues de preview
Posted: Fri Jul 16, 2021 05:58 PM
jvtecheto wrote:Hola Joao.

Code (fw): Select all Collapse
ACTIVATE REPORT oRepObr FOR IF( lSoloOpen, ListO->Cerrada = .F., .T. ) .AND. IF( lSoloClose, ListO->Cerrada = .T., .T. ) ;
聽 聽 聽 .AND. IF( ListO->( ordSetFocus() ) == "CODIGO", ListO->Codigo <= cFinal, ListO->Nombre <= cFinal ) WHILE ListO->( ! Eof() ) 

聽 聽ListO->(dbcloseArea())


Jose y si solamente dejas
Code (fw): Select all Collapse
ACTIVATE REPORT oRepObr

Tambien se cuelga?
fwh 17.12, harbour 3.2.0, pelles C, bcc7, Ms-Sql
Posts: 400
Joined: Fri May 11, 2007 08:20 PM
Re: Cerrar dbf despues de preview
Posted: Fri Jul 16, 2021 06:13 PM
jvtecheto wrote:

Code (fw): Select all Collapse
STATIC FUNCTION ListObras()
local oDlg, oFont
local oDevice, oRepObr
// etc . ...

dbUseArea( .T., , "Obras", "ListO", .T. )

DEFINE DIALOG oDlg NAME "LISTAOBR" ;
聽 聽TITLE "LISTADO DE OBRAS"

聽 
聽 聽REDEFINE BTNBMP ID 750 RESOURCE "ACCEPT" OF oDlg ACTION ( lAcepta := .t., oDlg:END() )
聽 聽REDEFINE BTNBMP ID 751 RESOURCE "CANCEL" OF oDlg ACTION oDlg:END()

聽 聽ACTIVATE DIALOG oDlg CENTERED

IF lAcepta

聽 聽 聽// code....
聽 聽 聽 DEFINE FONT oFont NAME "Courier New" SIZE 0, - 12
聽 聽 聽 oDevice := TPrinter():NEW( cCaption, .F., IF( nRdest == 1, .T., .F. ) ) 

聽 聽 聽 
聽 聽 聽 REPORT oRepObr TITLE Replicate ( "_", 87 ), "", ;
聽 聽 聽 聽 聽Replicate( " ", 36 ) + "LISTADO DE OBRAS" ,Replicate ( "_", 87 ) , "" Left ;
聽 聽 聽 聽 聽Header "Pag. " + Str( oRepObr:nPage, 3 ) Right ;
聽 聽 聽 聽 聽FOOTER aEmpresa[ 1 ] + " - " + aEmpresa[ 2 ] + " (" + aEmpresa[ 11 ] + ")" ;
聽 聽 聽 聽 聽CAPTION cCaption FONT oFont TO DEVICE oDevice 聽 聽 聽 聽

聽 聽 聽 聽 聽COLUMN TITLE "Codigo", "Inicio" 聽DATA ListO->Codigo, DToC( ListO->Inicio )
聽 聽 聽 聽 聽COLUMN TITLE "Nombre", "C.I.F." 聽DATA ListO->Nombre, ListO->Cif
聽 聽 聽 聽 聽COLUMN TITLE "Direcci贸n", "Provincia" DATA SubStr( ListO->Direc, 1, 20 ), ListO->Provin
聽 聽 聽 聽 聽COLUMN TITLE "Poblaci贸n", "C.Postal" DATA SubStr( ListO->Pobla, 1, 14 ), ListO->Postal
聽 聽 聽 聽 聽COLUMN TITLE "Telefono", "Presupuesto" DATA ListO->Tele, ListO->Presup PICTURE "@E 999,999.99"

聽 聽 聽 END REPORT
聽 聽 聽 oRepObr:nTitleUpline := 0 聽// Quita la linea de arriba de los titulos 0
聽 聽 聽 oRepObr:MARGIN( 4, 5, 2 )
聽 聽 聽 oRepObr:bInit := {|| ListO->(dbgotop()) }
聽 聽
聽 聽 聽 ACTIVATE REPORT oRepObr FOR IF( lSoloOpen, ListO->Cerrada = .F., .T. ) .AND. IF( lSoloClose, ListO->Cerrada = .T., .T. ) ;
聽 聽 聽 .AND. IF( ListO->( ordSetFocus() ) == "CODIGO", ListO->Codigo <= cFinal, ListO->Nombre <= cFinal ) WHILE ! ListO->( 聽Eof() ) 

聽 聽 聽 oFont:END()
聽 聽
聽 聽ENDIF

聽 聽ListO->(DbcloseArea()) 聽

Return NIL


Para que usas oDevice?
Code (fw): Select all Collapse
聽 聽 聽 REPORT oRepObr TITLE Replicate ( "_", 87 ), "", ;
聽 聽 聽 聽 聽Replicate( " ", 36 ) + "LISTADO DE OBRAS" ,Replicate ( "_", 87 ) , "" Left ;
聽 聽 聽 聽 聽Header "Pag. " + Str( oRepObr:nPage, 3 ) Right ;
聽 聽 聽 聽 聽FOOTER aEmpresa[ 1 ] + " - " + aEmpresa[ 2 ] + " (" + aEmpresa[ 11 ] + ")" ;
聽 聽 聽 聽 聽CAPTION cCaption FONT oFont 聽PREVIEW
聽 聽 聽 聽 聽....
聽 聽 聽 聽 聽....
fwh 17.12, harbour 3.2.0, pelles C, bcc7, Ms-Sql
Posts: 607
Joined: Mon Mar 04, 2013 04:32 PM
Re: Cerrar dbf despues de preview
Posted: Fri Jul 16, 2021 06:57 PM

Hola Artu01.

No si no cierro la dbf no se cuelga por supuesto pero lo que yo quiero es en la misma funci贸n abrir la dbf que tengo en el xbrowse pero con otro alias, confeccion贸 el informe, exporto a excel si el usuario quiere y luego cerrar la dbf que he abierto exclusivamente para ese informe. Y en el xbrowse sigo teniendo la dbf abierta y no tengo problemas de refresco.

Y no lo consigo.... :-(

Lo del oDevice es un c贸digo que ten铆a con Fivewin para clipper versi贸n 2.0 imag铆nate m谩s de 20 a帽os. Y que adapte hace 2 a帽os al volver a Fivewin. Y hay partes que voy mejorando poco a poco.
Pero imag铆nate el poder de Fivewin que logre convertir la dll que usaba entonces para los recursos de 16 bits a. Rc y el 90% del c贸digo me compilo.

Gracias por tu inter茅s

Jose.

Enviado desde mi POCOPHONE F1 mediante Tapatalk

Fwh 24.07 64 bits + Harbour 64 bits 3.2dev(r2407221137) + MSVC64

Continue the discussion