Vaciar un diccionario de Datos

Vaciar un diccionario de Datos

Postby JavierVital » Thu Jul 19, 2012 6: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.
User avatar
JavierVital
 
Posts: 105
Joined: Thu Feb 26, 2009 4:08 pm

Re: Vaciar un diccionario de Datos

Postby RSalazarU » Thu Jul 19, 2012 9: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: Select all  Expand view
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.
RSalazarU
 
Posts: 211
Joined: Wed Jul 16, 2008 12:59 pm
Location: Cochabamba-Bolivia

Re: Vaciar un diccionario de Datos

Postby Patricio Avalos Aguirre » 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: Select all  Expand view
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
Patricio Avalos Aguirre
 
Posts: 1059
Joined: Fri Oct 07, 2005 1:56 pm
Location: La Serena, Chile

Re: Vaciar un diccionario de Datos

Postby JavierVital » Fri Jul 20, 2012 2:07 pm

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

Re: Vaciar un diccionario de Datos

Postby JavierVital » Fri Jul 27, 2012 6: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: Select all  Expand view

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

Re: Vaciar un diccionario de Datos

Postby Patricio Avalos Aguirre » Fri Jul 27, 2012 7:33 pm

Javier

yo tambien uso tablas temporales pero no las anexo al DD

te dejo un ejemplo como lo hago

Code: Select all  Expand view
    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
Patricio Avalos Aguirre
 
Posts: 1059
Joined: Fri Oct 07, 2005 1:56 pm
Location: La Serena, Chile

Re: Vaciar un diccionario de Datos

Postby JavierVital » Sat Jul 28, 2012 4: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: Select all  Expand view


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

Re: Vaciar un diccionario de Datos

Postby reinaldocrespo » Tue Jul 31, 2012 1: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: Select all  Expand view

      afiles := AdsDirectory()
 




Reinaldo.
User avatar
reinaldocrespo
 
Posts: 972
Joined: Thu Nov 17, 2005 5:49 pm
Location: Fort Lauderdale, FL


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 10 guests