Nuevas funciones harbour para tablas dbf

Post Reply
User avatar
wyerco613
Posts: 73
Joined: Wed Mar 06, 2019 8:28 pm

Nuevas funciones harbour para tablas dbf

Post 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
"Porque Jehová da la sabiduría , Y de su boca viene el conocimiento y la inteligencia Proverbios 2:6"

FWH 1903 + Bcc7 + PellesC + XEdit

Waldemar
Colbún Chile
User avatar
wyerco613
Posts: 73
Joined: Wed Mar 06, 2019 8:28 pm

Re: Nuevas funciones harbour para tablas dbf

Post 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
"Porque Jehová da la sabiduría , Y de su boca viene el conocimiento y la inteligencia Proverbios 2:6"

FWH 1903 + Bcc7 + PellesC + XEdit

Waldemar
Colbún Chile
User avatar
armando.lagunas
Posts: 340
Joined: Mon Oct 05, 2009 3:35 pm
Location: Curico-Chile
Contact:

Re: Nuevas funciones harbour para tablas dbf

Post 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
User avatar
wyerco613
Posts: 73
Joined: Wed Mar 06, 2019 8:28 pm

Re: Nuevas funciones harbour para tablas dbf

Post 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
"Porque Jehová da la sabiduría , Y de su boca viene el conocimiento y la inteligencia Proverbios 2:6"

FWH 1903 + Bcc7 + PellesC + XEdit

Waldemar
Colbún Chile
User avatar
karinha
Posts: 4882
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Re: Nuevas funciones harbour para tablas dbf

Post by karinha »

Code: Select all

#Include "Directry.Ch" 

   AEVAL(DIRECTORY( "CADPROPO.cdx" ),{ |aFILE| FERASE(aFILE[F_NAME]) } )
 
Saludos.
João Santos - São Paulo - Brasil
User avatar
karinha
Posts: 4882
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Re: Nuevas funciones harbour para tablas dbf

Post by karinha »

Code: Select all

   DELETEFILE( "ERROR.LOG"  )
   DELETEFILE( "GILMER.LOG" )
   DELETEFILE( "TRACE.LOG"  )
   DELETEFILE( cDirExe + "GERAPNFE.LOG" )
 
Saludos.
João Santos - São Paulo - Brasil
User avatar
carlos vargas
Posts: 1421
Joined: Tue Oct 11, 2005 5:01 pm
Location: Nicaragua

Re: Nuevas funciones harbour para tablas dbf

Post 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...
Salu2
Carlos Vargas
Desde Managua, Nicaragua (CA)
User avatar
carlos vargas
Posts: 1421
Joined: Tue Oct 11, 2005 5:01 pm
Location: Nicaragua

Re: Nuevas funciones harbour para tablas dbf

Post 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

 
Salu2
Carlos Vargas
Desde Managua, Nicaragua (CA)
User avatar
carlos vargas
Posts: 1421
Joined: Tue Oct 11, 2005 5:01 pm
Location: Nicaragua

Re: Nuevas funciones harbour para tablas dbf

Post 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

 
Salu2
Carlos Vargas
Desde Managua, Nicaragua (CA)
User avatar
karinha
Posts: 4882
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Re: Nuevas funciones harbour para tablas dbf

Post by karinha »

.OR.

Code: Select all

   //SET ORDER TO 0
   // MEMORY ou TEMPORARY
   OrdDestroy( "ARCHTEMP" )  // CLOSE MEMMORY/TEMPORARY
 
Saludos.
João Santos - São Paulo - Brasil
ACC69
Posts: 619
Joined: Tue Dec 12, 2006 7:34 pm
Contact:

Re: Nuevas funciones harbour para tablas dbf

Post 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 .
Post Reply