Vaciar un diccionario de Datos
- JavierVital
- Posts: 105
- Joined: Thu Feb 26, 2009 4:08 pm
- Contact:
Vaciar un diccionario de Datos
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.
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.
Re: Vaciar un diccionario de Datos
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:
Puedes hacer una funcion similar que en vez de desencriptar elimine la tabla.
Atentamenmte
Rolando.
Cochabamba, Bolivia.
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.
Atentamenmte
Rolando.
Cochabamba, Bolivia.
- Patricio Avalos Aguirre
- Posts: 1028
- Joined: Fri Oct 07, 2005 1:56 pm
- Location: La Serena, Chile
- Contact:
Re: Vaciar un diccionario de Datos
Hola
Puedes usar la funcion AdsDirectory(), el cual entrega todas las tablas del diccionario
te adjunto como lo utilizo yo..
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
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
- JavierVital
- Posts: 105
- Joined: Thu Feb 26, 2009 4:08 pm
- Contact:
Re: Vaciar un diccionario de Datos
Rolando, Patricio.
Gracias., lo voy a poner en practica y les aviso como quedo lo que quiero hacer.
Saludos.
Gracias., lo voy a poner en practica y les aviso como quedo lo que quiero hacer.
Saludos.
- JavierVital
- Posts: 105
- Joined: Thu Feb 26, 2009 4:08 pm
- Contact:
Re: Vaciar un diccionario de Datos
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 :
Gracias asi me funciono perfecto y es cuestion de segundos.
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")
- Patricio Avalos Aguirre
- Posts: 1028
- Joined: Fri Oct 07, 2005 1:56 pm
- Location: La Serena, Chile
- Contact:
Re: Vaciar un diccionario de Datos
Javier
yo tambien uso tablas temporales pero no las anexo al DD
te dejo un ejemplo como lo hago
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
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
- JavierVital
- Posts: 105
- Joined: Thu Feb 26, 2009 4:08 pm
- Contact:
Re: Vaciar un diccionario de Datos
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.
Es exactamente lo mismo, el detalle que son tablas ADT y creo que por eso los mete al DD
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\"
- reinaldocrespo
- Posts: 918
- Joined: Thu Nov 17, 2005 5:49 pm
- Location: Fort Lauderdale, FL
Re: Vaciar un diccionario de Datos
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.
Reinaldo.
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.