memory tracing and statistics este en off.
noten que he agregado HB_FM_STATISTICS_OFF a la definicio y aun asi esta en on.

Carlos Vargas
Desde Managua, Nicaragua (CA)

Carlos,
Por defecto no lo construye con esa opci贸n en OFF ?
Por lo general nunca se le ponen esas opciones por defecto para no enlentecerlo, por eso creo que no tienes que especificarle nada.
Enrico nos indic贸 recientemente en donde puedes descargar un build de xharbour casi a diario.
Y como yo siempre erre que erre: Y por que no migras a Harbour ? ![]()
Lee esto y entender谩s las razones de las m谩s importantes:
&
Como dice Antonio c谩mbiate a Harbour. Aunque en principio de pereza y sensaci贸n de peligro por tocar c贸digo que funciona merece la pena porque son muy pocos los cambios que hay que hacer. Muy pocos. Y de paso puedes construir en 64 bits una vez que has hecho el cambio a Harbour. Creo que realmente merece la pena.
nError:=oSql:Execute( "select * from clientes",.t.,.t.,,"MYUSER" )nError:=oSql:Exec( "UPDATE clientes SET NOMBRE='CARLOS' WHERE NUM_CLIE=10" )nError:=oSql:Execute( "select * from clientes",.t.,.t.,,"MYUSER" ) )DBUSEAREA( .T.,, "SELECT SUM(ABONO) AS RESULTADO FROM COBROXDIA WHERE FECHA='2014-01-01'", "ABONO" )
? ABONO->RESULTADO // " 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽3500.00"/*-------------------------------------------------------------------------------------------------*/
#include "expats.ch"
/*-------------------------------------------------------------------------------------------------*/
/*Ok*/
PROCEDURE DocuE( cNumEmpl )
聽 聽LOCAL cNombreEmpl
聽 聽PRIVATE oDlgD, oBrwD
聽 聽PRIVATE cSql, aKInfoD
聽 聽IF EMPL->( Eof() )
聽 聽 聽 MsgInfo( "No hay empleados registrados.", "Informaci贸n" )
聽 聽 聽 RETURN
聽 聽ENDIF
聽 聽cSql 聽 聽:= "SELECT * FROM VEMPLEADOD WHERE TIPO='D' AND NUM_EMPL=" + KValToSQL( nNumEmpl )
聽 聽aKInfoD := { cSql, "EMPL_DOC" }
聽 聽IF !KQuery( cSql, NIL, "EMPL_DOC" )
聽 聽 聽 MsgAlert( KErrorText(), "Alerta" )
聽 聽 聽 RETURN
聽 聽ENDIF
聽 聽cNombreEmpl := EMPL->NOMBRECOMP
聽 聽DEFINE DIALOG oDlgD NAME "DLG_DOCUEC" OF oDlgE ICON GetIcon() FONT oFontD
聽 聽REDEFINE GET nNumEmpl ;
聽 聽 聽 ID 101 OF oDlgD ;
聽 聽 聽 WHEN FALSE
聽 聽REDEFINE GET cExpatID ;
聽 聽 聽 ID 102 OF oDlgD ;
聽 聽 聽 WHEN FALSE
聽 聽REDEFINE GET cNombreEmpl ;
聽 聽 聽 ID 103 OF oDlgD ;
聽 聽 聽 WHEN FALSE
聽 聽REDEFINE XBROWSE oBrwD ALIAS "EMPL_DOC" ;
聽 聽 聽 ID 104 OF oDlgD ;
聽 聽 聽 FONT oFontD
聽 聽ADD TO oBrwD DATA EMPL_DOC->NOMBRE+CRLF+EMPL_DOC->DESCRIPCIO 聽TITLE "Nombre de archivo"+FINL+"Descripci贸n" SIZE 350
聽 聽ADD TO oBrwD DATA EMPL_DOC->FECHA 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 TITLE "Fecha" 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽SIZE 070 LEFT
聽 聽WITH OBJECT oBrwD
聽 聽 聽 :MyConfig()
聽 聽 聽 :aCols[ 01 ]:bPaintText := { |oCol, hDC, cText, aCoord| XColDrawText( oCol, hDC, cText, aCoord ) }
聽 聽 聽 :lHScroll 聽 聽 聽:= FALSE
聽 聽 聽 :nHeaderHeight := 36
聽 聽 聽 :nFreeze 聽 聽 聽 := 2
聽 聽 聽 :nDataLines 聽 聽:= 2.5
聽 聽 聽 :nHeaderLines 聽:= 2
聽 聽 聽 :nMarqueeStyle := 7
聽 聽 聽 :bLDblClick 聽 聽:= {|| IIf( !EMPL_DOC->( Eof() ), DocuE_Visualizar(), NIL ) }
聽 聽 聽 :bDropFiles 聽 聽:= {|nRow, nCol, aFiles| DocuE_DragDropFile( aFiles ) }
聽 聽END
聽 聽REDEFINE BUTTONBMP ;
聽 聽 聽 ID 105 OF oDlgD ;
聽 聽 聽 BITMAP "BMS_ADD" ;
聽 聽 聽 TOOLTIP "Agregar documento." ;
聽 聽 聽 ACTION DocuE_Agregar( TRUE )
聽 聽REDEFINE BUTTONBMP ;
聽 聽 聽 ID 106 OF oDlgD ;
聽 聽 聽 BITMAP "BMS_DEL" ;
聽 聽 聽 TOOLTIP "Quitar documento." ;
聽 聽 聽 WHEN !EMPL_DOC->( Eof() ) ;
聽 聽 聽 ACTION DocuE_Borrar()
聽 聽REDEFINE BUTTONBMP ;
聽 聽 聽 ID 107 OF oDlgD ;
聽 聽 聽 BITMAP "BMS_VIEW" ;
聽 聽 聽 TOOLTIP "Visualizar documento." ;
聽 聽 聽 WHEN !EMPL_DOC->( Eof() ) ;
聽 聽 聽 ACTION DocuE_Visualizar()
聽 聽REDEFINE BUTTON ;
聽 聽 聽 ID 201 OF oDlgD ;
聽 聽 聽 ACTION oDlgD:END()
聽 聽ACTIVATE DIALOG oDlgD ON INIT ( DragAcceptFiles( oBrwD:hWnd, TRUE ), 1 )
聽 聽KCloseTbl( "EMPL_DOC" )
RETURN
/*-------------------------------------------------------------------------------------------------*/
/*Ok*/
PROCEDURE DocuE_DragDropFile( aFiles )
聽 聽LOCAL cArchivo 聽 聽 := ""
聽 聽LOCAL cDescripcion := Space( 80 )
聽 聽LOCAL nNumDocu
聽 聽IF Len( aFiles ) > 1
聽 聽 聽 MsgAlert( "Arrastre un archivo a la vez.", "Alerta" )
聽 聽 聽 RETURN
聽 聽ENDIF
聽 聽cArchivo := aFiles[ 01 ]
聽 聽IF !Empty( cArchivo )
聽 聽 聽 IF MsgGet( "Agregar un archivo", "Descripci贸n de archivo", @cDescripcion, "@!", "BM_DOCUMENT" )
聽 聽 聽 聽 聽IF !Empty( cDescripcion )
聽 聽 聽 聽 聽 聽 KSetErrorRT( TRUE )
聽 聽 聽 聽 聽 聽 TRY
聽 聽 聽 聽 聽 聽 聽 聽KBegin()
聽 聽 聽 聽 聽 聽 聽 聽nNumDocu := KIncCont( "CONTROL", "CONT_DOCU" )
聽 聽 聽 聽 聽 聽 聽 聽IF nNumDocu > 0
聽 聽 聽 聽 聽 聽 聽 聽 聽 KInsert( "EMPLEADOS_DOCU", { { "NUM_EMPL" 聽 , nNumEmpl 聽 聽 }, ;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{ "NUM_DOCU" 聽 , nNumDocu 聽 聽 }, ;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{ "TIPO" 聽 聽 聽 , "D" 聽 聽 聽 聽 聽}, ;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{ "FECHA" 聽 聽 聽, Date() 聽 聽 聽 }, ;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{ "DESCRIPCION", cDescripcion } } )
聽 聽 聽 聽 聽 聽 聽 聽 聽 KInsert( "DOCUMENTOS" 聽 聽, { { "NUM_DOCU" 聽 , nNumDocu 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 }, ;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{ "NOMBRE" 聽 聽 , cFileNoPath( cArchivo ) 聽 聽 聽 聽 聽 聽}, ;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{ "ARCHIVO" 聽 聽, HB_StrToHex( FileStr( cArchivo ) ) } } )
聽 聽 聽 聽 聽 聽 聽 聽ENDIF
聽 聽 聽 聽 聽 聽 聽 聽KCommit()
聽 聽 聽 聽 聽 聽 聽 聽KReQuery( aKInfoD )
聽 聽 聽 聽 聽 聽 CATCH oError
聽 聽 聽 聽 聽 聽 聽 聽KRollback()
聽 聽 聽 聽 聽 聽 聽 聽ShowError( oError )
聽 聽 聽 聽 聽 聽 END
聽 聽 聽 聽 聽 聽 KSetErrorRT( FALSE )
聽 聽 聽 聽 聽ENDIF
聽 聽 聽 ENDIF
聽 聽ENDIF
聽 聽oBrwD:Refresh()
RETURN
/*-------------------------------------------------------------------------------------------------*/
/*Ok*/
PROCEDURE DocuE_Agregar()
聽 聽LOCAL cArchivo 聽 聽 := ""
聽 聽LOCAL cDescripcion := Space( 80 )
聽 聽LOCAL nNumDocu
聽 聽cArchivo := cGetFile( "Archivo | *.*", "Seleccione archivo a adjuntar ", 1, GetFolderMyDocuments(), XBL_OPENFILE, XBL_WITHLONGNAME )
聽 聽IF !Empty( cArchivo )
聽 聽 聽 IF MsgGet( "Agregar un archivo", "Descripci贸n de archivo", @cDescripcion, "@!", "BM_DOCUMENT" )
聽 聽 聽 聽 聽IF !Empty( cDescripcion )
聽 聽 聽 聽 聽 聽 KSetErrorRT( TRUE )
聽 聽 聽 聽 聽 聽 TRY
聽 聽 聽 聽 聽 聽 聽 聽KBegin()
聽 聽 聽 聽 聽 聽 聽 聽nNumDocu := KIncCont( "CONTROL", "CONT_DOCU" )
聽 聽 聽 聽 聽 聽 聽 聽IF nNumDocu > 0
聽 聽 聽 聽 聽 聽 聽 聽 聽 KInsert( "EMPLEADOS_DOCU", { { "NUM_EMPL" 聽 , nNumEmpl 聽 聽 }, ;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{ "NUM_DOCU" 聽 , nNumDocu 聽 聽 }, ;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{ "TIPO" 聽 聽 聽 , "D" 聽 聽 聽 聽 聽}, ;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{ "FECHA" 聽 聽 聽, Date() 聽 聽 聽 }, ;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{ "DESCRIPCION", cDescripcion } } )
聽 聽 聽 聽 聽 聽 聽 聽 聽 KInsert( "DOCUMENTOS" 聽 聽, { { "NUM_DOCU" 聽 , nNumDocu 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 }, ;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{ "NOMBRE" 聽 聽 , cFileNoPath( cArchivo ) 聽 聽 聽 聽 聽 聽}, ;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{ "ARCHIVO" 聽 聽, HB_StrToHex( FileStr( cArchivo ) ) } } )
聽 聽 聽 聽 聽 聽 聽 聽ENDIF
聽 聽 聽 聽 聽 聽 聽 聽KCommit()
聽 聽 聽 聽 聽 聽 聽 聽KReQuery( aKInfoD )
聽 聽 聽 聽 聽 聽 CATCH oError
聽 聽 聽 聽 聽 聽 聽 聽KRollback()
聽 聽 聽 聽 聽 聽 聽 聽ShowError( oError )
聽 聽 聽 聽 聽 聽 END
聽 聽 聽 聽 聽 聽 KSetErrorRT( FALSE )
聽 聽 聽 聽 聽ENDIF
聽 聽 聽 ENDIF
聽 聽ENDIF
聽 聽oBrwD:Refresh()
RETURN
/*-------------------------------------------------------------------------------------------------*/
/*Ok*/
PROCEDURE DocuE_Borrar()
聽 聽LOCAL lBorrar 聽:= TRUE
聽 聽LOCAL nNumDocu := 0
聽 聽IF EMPL_DOC->( Eof() )
聽 聽 聽 MsgAlert( "No hay documentos que borrar.", "Alerta" )
聽 聽 聽 RETURN
聽 聽ELSE
聽 聽 聽 IF MsgNoYes( "Desea borrar documento seleccionado?", "Seleccionar" )
聽 聽 聽 聽 聽nNumDocu := EMPL_DOC->NUM_DOCU
聽 聽 聽 聽 聽KSetErrorRT( TRUE 聽)
聽 聽 聽 聽 聽TRY
聽 聽 聽 聽 聽 聽 KBegin()
聽 聽 聽 聽 聽 聽 KExecute( "DELETE FROM EMPLEADOS_DOCU WHERE NUM_DOCU=%1", { nNumDocu } )
聽 聽 聽 聽 聽 聽 KExecute( "DELETE FROM DOCUMENTOS 聽 聽 WHERE NUM_DOCU=%1", { nNumDocu } )
聽 聽 聽 聽 聽 聽 KCommit()
聽 聽 聽 聽 聽 聽 KReQuery( aKInfoD )
聽 聽 聽 聽 聽CATCH oError
聽 聽 聽 聽 聽 聽 KRollback()
聽 聽 聽 聽 聽 聽 ShowError( oError )
聽 聽 聽 聽 聽END
聽 聽 聽 聽 聽KSetErrorRT( FALSE )
聽 聽 聽 ENDIF
聽 聽ENDIF
聽 聽oBrwD:Refresh()
RETURN
/*-------------------------------------------------------------------------------------------------*/
/*Ok*/
PROCEDURE DocuE_Visualizar()
聽 聽IF EMPL_DOC->( Eof() )
聽 聽 聽 MsgAlert( "No hay documentos para visualizar.", "Alerta" )
聽 聽 聽 RETURN
聽 聽ENDIF
聽 聽VisorDocumentos( EMPL_DOC->NUM_DOCU )
RETURN
/*-------------------------------------------------------------------------------------------------*/
/*EOF*/
/*-------------------------------------------------------------------------------------------------*/si se pudiera mejorar SQLMIX (vaya si lo he intentado, he revisado el c贸digo pero mi nivel de c no llega a tanto
ok, revisare y te contacto cuando tenga reunida la info.
mil gracias antonio.