FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Vaciar un diccionario de Datos
Posts: 105
Joined: Thu Feb 26, 2009 04:08 PM
Vaciar un diccionario de Datos
Posted: Thu Jul 19, 2012 06:38 PM

que tal Saludos a todos
Estoy usando ADS
A alguien se le a presentado que tenga que vaciar su diccionario de datos
desde software de un solo golpe o sea sin saber que tablas tenga, solo vaciarlo
O sacar una lista de las tablas que tenga en el DD

Saludos.

Posts: 211
Joined: Wed Jul 16, 2008 12:59 PM
Re: Vaciar un diccionario de Datos
Posted: Thu Jul 19, 2012 09:22 PM
Javier:

Claro que si, muchas veces, y lo hago de varias formas:

1. Elimino directamente el archivo/diccionario y lo vuelvo a crear.
2. Utilizo la funcion AdsDDRemoveTable( cFile,,,nConnect ) para eliminar la defincion de las tablas (si no recuerdo mal, esta funcion tiene un parametro que te elimina, tambien, fisicamente la tabla).

Un consejo, antes de eliminar hay que desencriptar las tablas, yo lo hago con la siguiente funcion:
Code (fw): Select all Collapse
Function AdsDDDecriptTable( cTable, nConnect )
   if SQL_Ejecuta( "SELECT name, Table_Encryption Encrypted FROM system.tables WHERE name='"+cTable+"'",,nConnect,"DDTABLES" )
      if DDTABLES->( Reccount() > 0 .AND. FIELD->Encrypted .AND. AdsEsPosibleAbrirTabla(cTable) )
         SQL_Ejecuta("EXECUTE PROCEDURE sp_ModifyTableProperty('"+cTable+"','TABLE_ENCRYPTION','FALSE','','')",.T.)
      endif
      DDTABLES->( DBCloseArea() )
   else
      MSGSTOP("Fallo el proceso de desencriptacion de la tabla"+CRLF+PADC("Proceso cancelado",50),"SISTEMA")
      return .F.
   endif
Return .T.


Puedes hacer una funcion similar que en vez de desencriptar elimine la tabla.

Atentamenmte

Rolando.
Cochabamba, Bolivia.
Posts: 1074
Joined: Fri Oct 07, 2005 01:56 PM
Re: Vaciar un diccionario de Datos
Posted: Thu Jul 19, 2012 10:10 PM
Hola

Puedes usar la funcion AdsDirectory(), el cual entrega todas las tablas del diccionario

te adjunto como lo utilizo yo..
Code (fw): Select all Collapse
aIndex := AdsDirectory()
oMeter:nTotal := Len( aIndex )
for i := 1 to len( aIndex )
    cDbf := Left( aIndex[i], len( aIndex[i] )-1 )
    oMeter:cText := "Creando Indice para BD :"+cDbf
    oMeter:Set( i )
    if Netuse( cDbf, .f. )
        if ADSGETNUMINDEXES() > 0
            if !AdsReindex()
                MsgInfo( AdsGetLastError(), "Usuario" )
            endif
        endif
    endif
    USE
next i
dbCloseAll()
Saludos
Patricio

__________________________________________________________________
Version: Harbour 3.2.0dev (r1307082134),Compiler: Borland C++ 5.8.2 (32-bit)
PCode version: 0.3, FWH 13.2
http://www.sialm.cl
Posts: 105
Joined: Thu Feb 26, 2009 04:08 PM
Re: Vaciar un diccionario de Datos
Posted: Fri Jul 20, 2012 02:07 PM

Rolando, Patricio.

Gracias., lo voy a poner en practica y les aviso como quedo lo que quiero hacer.

Saludos.

Posts: 105
Joined: Thu Feb 26, 2009 04:08 PM
Re: Vaciar un diccionario de Datos
Posted: Fri Jul 27, 2012 06:29 PM
Patricio

Lo que queria es quitar todas las tablas del DD y volver a meter las tablas
Te explico por que, lo que pasa es que al crear un temporal el sistema lo mete el DD
y mi DD ya esta lleno de temporales y tiene un tamaño increible.

Entonces esto es lo que hice :

Code (fw): Select all Collapse
    aIndex := AdsDirectory()
    FOR I := 1 TO LEN(aIndex)
        AdsDDRemoveTable(aIndex[I])
    NEXT

**************** Aqui fui metiendo uno por uno de mis archivos asi

       AdsDDAddTable("MONEDAS",".\DATOS\MONEDAS.ADT")


Gracias asi me funciono perfecto y es cuestion de segundos.
Posts: 1074
Joined: Fri Oct 07, 2005 01:56 PM
Re: Vaciar un diccionario de Datos
Posted: Fri Jul 27, 2012 07:33 PM
Javier

yo tambien uso tablas temporales pero no las anexo al DD

te dejo un ejemplo como lo hago

Code (fw): Select all Collapse
    cFileTemp := cNewFileName( cPathTmp + "\TEMPO", "DBF" )

    dbCreate( cFileTemp, ;
                            { { "cod_prod", "c", 15,0},;
                              { "des_prod", "C", 40,0},;
                              { "Stock",    "n", 10,0},;
                              { "cant1",    "n", 10,0},;
                              { "cant2",    "n", 10,0},;
                              { "cant3",    "n", 10,0},;
                              { "cant4",    "n", 10,0},;
                              { "cant5",    "n", 10,0}}, "DBFCDX", .T., "TEMP" )

    INDEX ON FIELD->COD_PROD TAG CODIGO
Saludos
Patricio

__________________________________________________________________
Version: Harbour 3.2.0dev (r1307082134),Compiler: Borland C++ 5.8.2 (32-bit)
PCode version: 0.3, FWH 13.2
http://www.sialm.cl
Posts: 105
Joined: Thu Feb 26, 2009 04:08 PM
Re: Vaciar un diccionario de Datos
Posted: Sat Jul 28, 2012 04:04 PM
Patricio, Saludos.

Yo creo que el sistema los mete al DD por que uso tablas ADT
Y tambien los Temporales los pongo en un Directorio aparte de donde estan las tablas
del sistema.

Code (fw): Select all Collapse
cFile := CreaTemporal()


FUNCTION CreaTemporal
    LOCAL cTemp, aTempora := {}, cCrea
    SELECT INDICES
    DbGoTop()
    LOCATE FOR AllTrim(INDICES->NOMBRE) == "TEMPORAL"
    IF !FOUND()
        MsgAlert("Verifique con el Administrador del Sistema"+CRLF+"No se encuentra el Indice de Temporales...","Alerta!")
        RETURN("")
    ENDIF
    INDICES->(ARlock())
        REPLACE INDICES->INDICE WITH (INDICES->INDICE + 1)
        cTemp := "TM"+Replicate('0',8-Len(AllTrim(Str(INDICES->INDICE)))) + AllTrim(Str(INDICES->INDICE))
        INDICES->(DbCommit())
    INDICES->(DbUnLock())
    cCrea := cTemp //+ ".ADT"
    AADD(aTempora,{"ARTICULO"   ,"C",15,0})
    AADD(aTempora,{"NOMBRE"     ,"C",60,0})
    AADD(aTempora,{"CAJAS"      ,"N",15,4}) //  999,999.99
    AADD(aTempora,{"PIEZAS"     ,"N",15,4}) //  999,999.99
    AADD(aTempora,{"PRECIO"     ,"N",15,4}) //  99,999.99
    AADD(aTempora,{"IMPORTE"    ,"N",15,2}) // 999,999.99
    AADD(aTempora,{"DESCTO"     ,"N",06,2}) //     999.99
    AADD(aTempora,{"IMPDES"     ,"N",09,2}) //  99,999.99
    AADD(aTempora,{"GTOTAL"     ,"N",10,2}) // 999,999.99
    AADD(aTempora,{"SERIES"     ,"C",25,0})
    AADD(aTempora,{"DESCTOA"    ,"N",06,2}) //     999.99
    AADD(aTempora,{"RENGLON"    ,"N",05,0}) //         99
    AADD(aTempora,{"PRECIOA"    ,"N",09,2}) //  99,999.99
    AADD(aTempora,{"CDESCTO"    ,"C",05,0}) //  99,999.99
    AADD(aTempora,{"CANTIDAD"   ,"N",09,2}) //  99,999.99
    AADD(aTempora,{"CODIGO"     ,"C",15,0})
    AADD(aTempora,{"COSTOC"     ,"N",15,4}) //  99,999.99
    AADD(aTempora,{"COSTOP"     ,"N",15,4}) //  99,999.99
    AADD(aTempora,{"PROMO"      ,"L",1,0})
    AADD(aTempora,{"ARTPROMO"   ,"C",15,0})
    AADD(aTempora,{"IMPORTEC"  ,"N",15,4}) //  99,999.99
    AADD(aTempora,{"IMPORTEP"  ,"N",15,4}) //  99,999.99    
    AADD(aTempora,{"FECHA"     ,"D",08,0})
    AADD(aTempora,{"PRECIOT"    ,"N",15,4}) //  99,999.99
    AADD(aTempora,{"IMPORTET"   ,"N",15,2}) // 999,999.99
    DbCreate(cPathTEM+cCrea,aTempora,DbSetDriver())
RETURN cTemp

** cMiRuta := DiskName()+":"+CurDir()
**  cPathTEM := cPathTEM := cMiRuta+"\temporal\"


Es exactamente lo mismo, el detalle que son tablas ADT y creo que por eso los mete al DD
Posts: 990
Joined: Thu Nov 17, 2005 05:49 PM
Re: Vaciar un diccionario de Datos
Posted: Tue Jul 31, 2012 01:14 PM
Javier;

Para conocer que objetos tipo tablas son parte del ADS DD, utiliza el ACE API AdsDirectory() que devuelve un array cargado con las tablas que forman el DD.

Code (fw): Select all Collapse
      afiles := AdsDirectory()




Reinaldo.

Continue the discussion