Vaciar un diccionario de Datos

Post Reply
User avatar
JavierVital
Posts: 105
Joined: Thu Feb 26, 2009 4:08 pm
Contact:

Vaciar un diccionario de Datos

Post by JavierVital »

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.
RSalazarU
Posts: 177
Joined: Wed Jul 16, 2008 12:59 pm
Location: Cochabamba-Bolivia
Contact:

Re: Vaciar un diccionario de Datos

Post by RSalazarU »

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: Select all

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.
User avatar
Patricio Avalos Aguirre
Posts: 1028
Joined: Fri Oct 07, 2005 1:56 pm
Location: La Serena, Chile
Contact:

Re: Vaciar un diccionario de Datos

Post by Patricio Avalos Aguirre »

Hola

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

te adjunto como lo utilizo yo..

Code: Select all

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
User avatar
JavierVital
Posts: 105
Joined: Thu Feb 26, 2009 4:08 pm
Contact:

Re: Vaciar un diccionario de Datos

Post by JavierVital »

Rolando, Patricio.

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

Saludos.
User avatar
JavierVital
Posts: 105
Joined: Thu Feb 26, 2009 4:08 pm
Contact:

Re: Vaciar un diccionario de Datos

Post by JavierVital »

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: Select all

    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.
User avatar
Patricio Avalos Aguirre
Posts: 1028
Joined: Fri Oct 07, 2005 1:56 pm
Location: La Serena, Chile
Contact:

Re: Vaciar un diccionario de Datos

Post by Patricio Avalos Aguirre »

Javier

yo tambien uso tablas temporales pero no las anexo al DD

te dejo un ejemplo como lo hago

Code: Select all

    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
User avatar
JavierVital
Posts: 105
Joined: Thu Feb 26, 2009 4:08 pm
Contact:

Re: Vaciar un diccionario de Datos

Post by JavierVital »

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: Select all


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
User avatar
reinaldocrespo
Posts: 918
Joined: Thu Nov 17, 2005 5:49 pm
Location: Fort Lauderdale, FL

Re: Vaciar un diccionario de Datos

Post by reinaldocrespo »

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: Select all

      afiles := AdsDirectory()
 


Reinaldo.
Post Reply