Page 1 of 1

Nuevas funciones harbour para tablas dbf

Posted: Thu Aug 22, 2019 11:47 pm
by wyerco613
Estimados compañeros

Esto viene de la pregunta anterior (ERROR/1003 cFile), me dijeron que existen nuevas funciones (que no conozco):

Necesito crear una tabla con fecha ejemplo: FI032019.DBF luego crear 2 indices cdx RUT y NOMBRE (la fecha es para asociarla con otra tabla que fue pasada de EXCEL a DBF) y debo poder borrar los indices y volver a crearlos (osea el archivo FI032019.CDX) pero debo conservar ta TABLA DBF ya que se puede utilizar más adelante. Cuando utilizaba un puro nombre FINAL.DBF no tenia problemas pero ahora que debo crear tablas de diferente nombre se cae en diferentes partes y las funciones que ocupaba antes no funcionan como FERASE. Si alguien puede ayudar en esto por favor es urgente.

Desde ya muchas gracias.

Waldemar

Re: Nuevas funciones harbour para tablas dbf

Posted: Fri Aug 23, 2019 12:25 pm
by wyerco613
wyerco613 wrote:Estimados compañeros

Esto viene de la pregunta anterior (ERROR/1003 cFile), me dijeron que existen nuevas funciones (que no conozco):

Necesito crear una tabla con fecha ejemplo: FI032019.DBF luego crear 2 indices cdx RUT y NOMBRE (la fecha es para asociarla con otra tabla que fue pasada de EXCEL a DBF) y debo poder borrar los indices y volver a crearlos (osea el archivo FI032019.CDX) pero debo conservar ta TABLA DBF ya que se puede utilizar más adelante. Cuando utilizaba un puro nombre FINAL.DBF no tenia problemas pero ahora que debo crear tablas de diferente nombre se cae en diferentes partes y las funciones que ocupaba antes no funcionan como FERASE. Si alguien puede ayudar en esto por favor es urgente.

Desde ya muchas gracias.

Waldemar
Estimados Compañeros

Disculpa que insista pero veo que varios han visto el asunto pero nadie comenta quizás la pregunta es muy fácil, disculpen pero no programo hace muchos años así que me falta mucho para ponerme al día y debo entregar un programa para ayer (muchos estamos en ese caso).

Agradeciendo su aporte, muchas gracias.

Waldemar

Re: Nuevas funciones harbour para tablas dbf

Posted: Fri Aug 23, 2019 12:32 pm
by armando.lagunas
waldemar:

coloca el trozo de programa en donde realizas la acción, es mas fácil ver el código y sugerir correcciones que entender lo que quieres hacer.

espero tu respuesta

Saludos

Re: Nuevas funciones harbour para tablas dbf

Posted: Fri Aug 23, 2019 4:58 pm
by wyerco613
armando.lagunas wrote:waldemar:

coloca el trozo de programa en donde realizas la acción, es mas fácil ver el código y sugerir correcciones que entender lo que quieres hacer.

espero tu respuesta

Saludos
Estimado aquí el código:

Code: Select all

*****************************************************************************************************************
antes lo hacia para una pura tabla y ahí funcionaba bien pero con diferentes tablas se cae :
*****************************************************************************************************************

   //FErase( ".\TMP\FINAL.DBF" )
   //FErase(".\TMP\FINAL.CDX")

   aCampos := { { "NUM","N",4,0 }, { "RUT","C",10,0 }, { "NOMBRE","C",40,0 } }

   nLargo := Len( aBen )  // aBen?? que es?

   FOR i = 1 TO nLargo
      Aadd( aCampos, { aBen[i], "N", 10, 0 } )
   NEXT

   Aadd( aCampos, { "SALDO", "N", 10, 0 } )
   Aadd( aCampos, { "TOTAL", "N", 10, 0 } )

   DBCreate( ".\FINAL\" + cFile, aCampos )

   //DBCreate(".\FINAL\"+cFile+".DBF",aCampos)
   MsgInfo( cFile )

   DBUSEAREA( .T. , , ".\FINAL\" + cFile )
   //DBUSEAREA(.T.,,".\FINAL\"+cFile+".DBF")

   ordCreate( ".\FINAL\" + cFile, "RUT", "(cFile)->RUT", {|| ( cFile )->RUT } )
   ordCreate( ".\FINAL\" + cFile, "NOMBRE", "(cFile)->NOMBRE", {|| ( cFile )->NOMBRE } )

   ( cFile )->( OrdSetFocus( 2 ) )

Armando ya no me funciona y funciones como FErase no borran los archivos CDX que necesito.

Saludos Waldemar

Re: Nuevas funciones harbour para tablas dbf

Posted: Fri Aug 23, 2019 5:31 pm
by karinha

Code: Select all

#Include "Directry.Ch" 

   AEVAL(DIRECTORY( "CADPROPO.cdx" ),{ |aFILE| FERASE(aFILE[F_NAME]) } )
 
Saludos.

Re: Nuevas funciones harbour para tablas dbf

Posted: Fri Aug 23, 2019 5:40 pm
by karinha

Code: Select all

   DELETEFILE( "ERROR.LOG"  )
   DELETEFILE( "GILMER.LOG" )
   DELETEFILE( "TRACE.LOG"  )
   DELETEFILE( cDirExe + "GERAPNFE.LOG" )
 
Saludos.

Re: Nuevas funciones harbour para tablas dbf

Posted: Fri Aug 23, 2019 6:01 pm
by carlos vargas
Esiste una forma de crear indices temporales sin necesidad de estarlos borrando luego.
INDEX ON <indexExpr> ;
[TAG <cIndexName>] ;
[TO <cIndexFile>] ;
[FOR <lForCondition>] ;
[WHILE <lWhileCondition>] ;
[ALL] ;
[NEXT <nNumber>] ;
[RECORD <nRecNo>] ;
[REST] ;
[EVAL <bBlock>] ;
[EVERY <nInterval>] ;
[UNIQUE] ;
[ASCENDING|DESCENDING] ;
[USECURRENT] ;
[ADDITIVE] ;
[CUSTOM] ;
[NOOPTIMIZE] ;
[TEMPORARY] ;
[USEFILTER] ;
[EXCLUSIVE]
como puede ver hay una clausula TEMPORARY que permite esta funcionalidad
yo lo use mucho cuando usaba sqlrrd el cual me permitia traerme en una tabla dbf temporal los registros de una consulta, en esa tabla craba los indices termporales...

Re: Nuevas funciones harbour para tablas dbf

Posted: Fri Aug 23, 2019 6:07 pm
by carlos vargas

Code: Select all

FUNCTION DBCreateMEM( cFile, aStruct, cRDD, lKeepOpen, cAlias )
   LOCAL lCreateDBMem := TRUE

   DEFAULT cRDD := "DBFCDX", lKeepOpen := TRUE, cAlias := "MEMTMP"

   TRY
      DBCreate( "mem:" + cFile, aStruct, cRDD, lKeepOpen, cAlias )
   CATCH
      lCreateDBMem := FALSE
   END

RETURN lCreateDBMem

/*-------------------------------------------------------------------------------------------------*/

PROCEDURE DBDropMEM( cFile )
RETURN DBDrop( "mem:" + cFile )

/*-------------------------------------------------------------------------------------------------*/

FUNCTION TmpCursorName()
RETURN  "_" + Upper( HB_NumToHex( HB_MilliSeconds(), 10 ) )

/*-------------------------------------------------------------------------------------------------*/
#ifdef __XHARBOUR__

#pragma BEGINDUMP

#include <windows.h>
#include "hbapi.h"
#include "hbdate.h"

HB_FUNC( HB_MILLISECONDS )
{
   hb_retnint( ( HB_MAXINT ) hb_dateMilliSeconds() );
}

#pragma ENDDUMP

#endif

 

Re: Nuevas funciones harbour para tablas dbf

Posted: Fri Aug 23, 2019 6:12 pm
by carlos vargas
puede usar asi...

Code: Select all

   REQUEST DBFCDX

   PROCEDURE Main()
      LOCAL cTable := TmpCursorName()
      LOCAL aStruct := { ;
               { "MYCHAR", "C", 25, 0 }, ;
               { "MYNUM"  , "N",  8, 0 }, ;
               { "MYDATE"     , "D",  8, 0 }, ;
               { "MYLOGICAL"  , "L",  1, 0 }, ;
               { "MYMEMO1"    , "M", 10, 0 }, ;
               { "MYMEMO2"    , "M", 10, 0 }  ;
            }

      DbCreate( cTable, aStruct, "DBFCDX", .T., "MYALIAS" )

       INDEX ON MYCHAR TAG MYCHAR TEMPORARY

      Browse()

      SET INDEX TO //index close and delete

   RETURN

 

Re: Nuevas funciones harbour para tablas dbf

Posted: Fri Aug 23, 2019 7:07 pm
by karinha
.OR.

Code: Select all

   //SET ORDER TO 0
   // MEMORY ou TEMPORARY
   OrdDestroy( "ARCHTEMP" )  // CLOSE MEMMORY/TEMPORARY
 
Saludos.

Re: Nuevas funciones harbour para tablas dbf

Posted: Fri Aug 23, 2019 7:54 pm
by ACC69
wyerco613 wrote:Estimados compañeros

Esto viene de la pregunta anterior (ERROR/1003 cFile), me dijeron que existen nuevas funciones (que no conozco):

Necesito crear una tabla con fecha ejemplo: FI032019.DBF luego crear 2 indices cdx RUT y NOMBRE (la fecha es para asociarla con otra tabla que fue pasada de EXCEL a DBF) y debo poder borrar los indices y volver a crearlos (osea el archivo FI032019.CDX) pero debo conservar ta TABLA DBF ya que se puede utilizar más adelante. Cuando utilizaba un puro nombre FINAL.DBF no tenia problemas pero ahora que debo crear tablas de diferente nombre se cae en diferentes partes y las funciones que ocupaba antes no funcionan como FERASE. Si alguien puede ayudar en esto por favor es urgente.

Desde ya muchas gracias.

Waldemar

Hola mi estimado yo lo hago de esta manera al crear mis archivos emporales...te paso el codigo sencillo...

Code: Select all

FIELD CUENTAS, SEGNEG, REFERE

 CtaIni  := SUBS(CtaInif,1,4)+SUBS(CtaInif,6,4)+SUBS(CtaInif,11,4)+SUBS(CtaInif,16,4)
 CtaFin  := SUBS(CtaFinf,1,4)+SUBS(CtaFinf,6,4)+SUBS(CtaFinf,11,4)+SUBS(CtaFinf,16,4)
 cMA_Ini := SUBS(nMA_Ini,3,2)+SUBS(nMA_Ini,1,2)
 cMA_Fin := SUBS(nMA_Fin,3,2)+SUBS(nMA_Fin,1,2)

 ***********************************************************************************
 *----- Traspasando cuentas integración de saldos general en archivo temporal -----*
 ***********************************************************************************

 S91     := "EMP"+TSTR(xEMP)+TRIM("\R_INTS"+nStation)+".DBF"
 Ind1Tmp1:= "R_INTS"+nStation
 Ind1Tmp2:= "R_INTSN"
 nReg    := 1

 IF FILE(S91)
     *S91->(DbCloseArea())

     FERASE(S91)
     FERASE("EMP"+TSTR(nNumEmp)+"\"+Ind1Tmp1+".CDX")
 ENDIF

 IF !FILE(S91)
     CreaDbf1 := {{"TIPO   " , "C" ,  2 , 0 }  ,; // 1
                  {"NUMPOL " , "N" ,  5 , 0 }  ,; // 2
                  {"FHAMOV " , "D" ,  8 , 0 }  ,; // 3
                  {"CUENTAS" , "C" , 16 , 0 }  ,; // 4
                  {"SEGNEG"  , "N" ,  4 , 0 }  ,; // 5
                  {"REFERE " , "C" , 10 , 0 }  ,; // 6
                  {"CONCEP " , "C" , 60 , 0 }  ,; // 7
                  {"SALCARG" , "N" , 12 , 2 }  ,; // 8
                  {"SALCRED" , "N" , 12 , 2 }  ,; // 9
                  {"SALDOS"  , "N" , 12 , 2 }  ,; //10 Sdo de factura a pagar
                  {"IMPBS1"  , "N" , 12 , 2 }  ,; //11 Base 1
                  {"TASA1"   , "N" , 12 , 2 }  ,; //12 Tasa 1
                  {"IVA_1"   , "N" , 12 , 2 }  ,; //13 IVA 10%
                  {"IMPBS2"  , "N" , 12 , 2 }  ,; //14 Base 2
                  {"TASA2"   , "N" , 12 , 2 }  ,; //15 Tasa 2
                  {"IVA_2"   , "N" , 12 , 2 }  ,; //16 IVA 15%
                  {"T_0"     , "N" , 12 , 2 }  ,; //17 Tasa 0
                  {"T_EXENT" , "N" , 12 , 2 }  ,; //18 Exento
                  {"OTROS"   , "N" , 12 , 2 }  ,; //19 Otros
                  {"IMPBS3"  , "N" , 12 , 2 }  ,; //20 Otras tasas
                  {"T_Otras" , "N" , 12 , 2 }  ,; //21 IVA x 0
                  {"RET_IVA" , "N" , 12 , 2 }  ,; //22 Ret IVA
                  {"RET_ISR" , "N" , 12 , 2 }  ,; //23 Ret ISR
                  {"TOTFAC"  , "N" , 12 , 2 }  ,; //24 Importe total por factura
                  {"REG    " , "N" ,  3 , 0 }}    //25

     DbCreate(S91,CreaDbf1)

     USE (S91) ALIAS S91 EXCLUSIVE // NEW SHARED

     INDEX ON CUENTAS+REFERE               TAG (Ind1Tmp1) FOR !DELETED()
     INDEX ON STR(SEGNEG,4)+CUENTAS+REFERE TAG (Ind1Tmp2) FOR !DELETED()

     S91->(DbSetIndex(Ind1Tmp1))
     S91->(OrdSetFocus(1))
 ELSE
     USE (S91) ALIAS S91 EXCLUSIVE  // NEW SHARED

     ZAP

     INDEX ON CUENTAS+REFERE               TAG (Ind1Tmp1) FOR !DELETED()
     INDEX ON STR(SEGNEG,4)+CUENTAS+REFERE TAG (Ind1Tmp2) FOR !DELETED()

     S91->(DbSetIndex(Ind1Tmp1))
     S91->(OrdSetFocus(1))
 ENDIF

Y aqui al final puedes cerrar la base de datos CloseDbf() tu propia funcion y eliminar tus archivos.

Es opcional a tu gusto mi estimado.

Code: Select all

FERASE(S91)
     FERASE("EMP"+TSTR(nNumEmp)+"\"+Ind1Tmp1+".CDX")

Saludos .