FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Error usando TDBF en ventanas MDICHILD Solucionado
Posts: 257
Joined: Tue May 16, 2006 04:46 PM
Error usando TDBF en ventanas MDICHILD Solucionado
Posted: Sat Jul 02, 2011 12:51 AM
Amigos, tengo el siguiente problema

Mi aplicacion abre un browse y cuando se le da doble clic a un renglon abre una ventana MDICHILD que contiene un dialogo NOWAIT que muestra la informacion completa del renglon que se selecciono.

Abro 2 ventas desde el browse de diferentes registros y al cerrar la 1ra me marca un error.

Aqui parte de codigo de la ventana que se abre:
Code (fw): Select all Collapse
FUNCTION PRUEBA(RALS)
 LOCAL SeleAct:=SELECT(),oWndA,oDlgA,TituVent,oBtnXDef,YaExiste:="N",BAceptar:=.F.,X
 PUBLIC oTDBF,aTDBF
 RELEASE M->oTDBF,M->aTDBF //Anula la variables privadas

 //Abre los archivos requeridos
 ArTarA[CH_ES_CONCEPTO]:=AbreArchivo('Concepto') //Abre archivo de Conceptos
 ArTarA[CH_ES_GANADO]  :=AbreArchivo("Ganado")   //Archivo para la tarjeta
 DBSELECTAREA(ArTarA[CH_ES_GANADO])
 DATABASE M->oTDBF //Para usar oTDBF:LOAD() y oTDBF:SAVE()
 M->oTDBF:LOAD()
 //Define la ventana que contendra el dialogo
 DEFINE WINDOW oWndA MDICHILD OF oWnd ;
   FROM 0,0 TO 24,79 COLOR CLR_BLACK,CLR_WHITE ;
   VSCROLL HSCROLL ; //Estas instrucciones trabajan en conjunto con TScrWnd en el ON INIT de oWndA
   HELPID "Tarejeta_Animal"
  oWndA:bGotFocus:={||oDlgA:SetFocus()} //Pasa el control a Dialogo
  //Define el dialogo que estara dentro de la ventana
  DEFINE DIALOG oDlgA RESOURCE "TAR_ANI" OF oWndA HELPID "Tarejeta_Animal"
   //Botones
   REDEFINE BTNBMP oBtnXDef FILE DirSist+"BAceptar.BMP" ID 151 OF oDlgA ;
    ACTION (BAceptar:=.T.,oDlgA:END()) PROMPT "" TOOLTIP 'Actualizar los datos modificados y salir'
   REDEFINE BTNBMP FILE DirSist+"BCancelar.BMP" ID 161 OF oDlgA ;
    ACTION (BAceptar:=.F.,oDlgA:END()) PROMPT "" TOOLTIP "Salir ignorando los cambios efectuados"
   //Datos de identificacion
   REDEFINE SAY VAR M->oTDBF:Regi ID 3 OF oDlgA UPDATE //Registro
   REDEFINE SAY VAR M->oTDBF:Letr ID 5 OF oDlgA UPDATE //Letra
   REDEFINE GET M->oTDBF:Aret ID 10 OF oDlgA UPDATE MESSAGE "Color y/o numero del arete (crotal)" //Arete
   REDEFINE GET M->oTDBF:Nomb ID 11 OF oDlgA UPDATE MESSAGE "Nombre del animal segun su familia" //Nombre
   REDEFINE GET M->oTDBF:Tatu ID 12 OF oDlgA UPDATE MESSAGE "Tatuaje o Microchip de identificacion" //Tatuaje
  ACTIVATE DIALOG oDlgA NOWAIT ;
   ON INIT (oDlgA:Move(0,0)) ; //Coloca el dialogo al inicio de la ventana
   VALID(oWndA:End(),.T.) //Al cerrar el dialogo cierra la ventana

 ACTIVATE WINDOW oWndA ;
  ON INIT (oWndA:SetSize(oDlgA:nWidth,oDlgA:nHeight) ; //Hace la ventana del mismo tamaño que el dialogo
           ,TScrWnd():New(oWndA,1,5,1,70),oWndA:Paint() ) ; //Controla las barras del Scroll 
  VALID (IIF(BAceptar,(M->oTDBF:SAVE(),TarA_Cierra(ArTarA)),NIL),DBSELECTAREA(SeleAct),.T.) //En su caso graba los datos y Cierra los archivos
RETURN(NIL)


y aqui el error que me aparece al cerrar la 1er ventana:
Code (fw): Select all Collapse
Application
===========
   Path and name: C:\acs\VTA\TOROS\prg.act\Toros.Exe (32 bits)
   Size:   820,736 bytes
   Time from start: 0 hours 0 mins 37 secs 
   Error occurred at: 01/07/2011, 19:43:45
   Error description: Error BASE/1004  No exported method: EVAL
   Args:
     [   1] = U   
     [   2] = O   TDATABASE

Stack Calls
===========
   Called from:  => EVAL(0)
   Called from: .\source\classes\DATABASE.PRG => TDATABASE:FIELDGET(618)
   Called from: .\source\classes\DATABASE.PRG => TDATABASE:ARET(824)
   Called from: C:\ACS\VTA\TOROS\PRG.ACT\PRG\TARJETA.PRG => (b)PRUEBA(76)
   Called from: source\rtl\tget.prg => TCLIPGET:VARGET(985)
   Called from: source\rtl\tget.prg => TCLIPGET:SETFOCUS(855)
   Called from: .\source\classes\TGET.PRG => TGET:LOSTFOCUS(1239)
   Called from: .\source\classes\CONTROL.PRG => TGET:KILLFOCUS(883)
   Called from: .\source\classes\CONTROL.PRG => TCONTROL:HANDLEEVENT(1456)
   Called from: .\source\classes\TGET.PRG => TGET:HANDLEEVENT(597)
......


Alguna idea de que es lo que pasa? Agradecere cualquier sugerencia
RodolfoRBG
FWH 1307, xHarbour123 BCC582
rodolfoerbg@gmail.com
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: Error usando TDBF en ventanas MDICHILD
Posted: Sat Jul 02, 2011 06:02 AM

Rodolfo,

En el VALID de la ventana parece que estas cerrando la base de datos: TarA_Cierra(ArTarA)

Prueba a quitarlo,

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 257
Joined: Tue May 16, 2006 04:46 PM
Re: Error usando TDBF en ventanas MDICHILD Solucionado
Posted: Sat Jul 02, 2011 07:43 PM
En efecto maestro,

Probe tu sugerencia y ya no aparece el error. Cada vez que abre una ventana abre los mismos archivos pero con un alias diferente y la idea es cerrarlos al abandonar la ventana pues de lo contrario quedarian muchisimos archivos abiertos. Entonces, en donde debo poner la instruccion de cerrar los archivos? Poner la instruccion despues de activar la ventana, al ser NOWAIT los cerraria inmediatamente, por eso los habia colocado en el valid de la ventana.

Actualizacion:

Ya lo solucione colocando la instruccion en el VALID del oDLG despues de cerrar la ventana en lugar de en el VALID de la oWnd.
Code (fw): Select all Collapse
  ACTIVATE DIALOG oDlgA NOWAIT ;
   ON INIT (oDlgA:Move(0,0)) ; //Coloca el dialogo al inicio de la ventana
   VALID(oWndA:End(),IIF(BAceptar,(M->oTDBF:SAVE(),TarA_Cierra(ArTarA)),NIL),DBSELECTAREA(SeleAct),.T.) //Al cerrar el dialogo cierra la ventana, graba cambios y cierra archivos

 ACTIVATE WINDOW oWndA ;
  ON INIT (oWndA:SetSize(oDlgA:nWidth,oDlgA:nHeight) ; //Hace la ventana del mismo tamaño que el dialogo
           ,TScrWnd():New(oWndA,1,5,1,70),oWndA:Paint() ) //Controla las barras del Scroll 
RETURN(NIL)
RodolfoRBG
FWH 1307, xHarbour123 BCC582
rodolfoerbg@gmail.com
Posts: 10733
Joined: Sun Nov 19, 2006 05:22 AM
Re: Error usando TDBF en ventanas MDICHILD
Posted: Sun Jul 03, 2011 05:55 AM

Best place to close data in case of MDICHILD window is to assign all close operations to oWnd:bPostEnd data.

oWnd:bPostEnd := { || <all clean up routine> }

Regards



G. N. Rao.

Hyderabad, India
Posts: 257
Joined: Tue May 16, 2006 04:46 PM
Re: Error usando TDBF en ventanas MDICHILD Solucionado
Posted: Sun Jul 03, 2011 06:27 AM

Thanks Rao

RodolfoRBG
FWH 1307, xHarbour123 BCC582
rodolfoerbg@gmail.com

Continue the discussion