Evitar que una tabla se sature

Hola, de nuevo, haber si puedo explicar bien el problema... Supongamos que tengo una tabla con muchos registros de nombre "documentos", con tantos registros que la tabla llega a pesar 2.4 GB ... Y esto me empieza a crear conflictos con el sistema, en cuestión de la búsqueda, consultas, y el crear y guardar nuevos registros, porque la búsqueda es muy lenta, los registros no se guardan bien, etc... Mi idea es, que de alguna forma el programa vigile el tamaño de la tabla, y supongamos cuando la tabla llegara a pesar 1.5 GB, automáticamente en el próximo registro que se fuera a guardar, el programa creara otra tabla de nombre "documentos" y la tabla anterior (la que se usaba, y que sea llenado 1.5 GB) la renombre a "documentos1"... Para que de ahora en adelante los registros se guarden en esa tabla ("documentos")... ¿se puede hacer eso?
Creo que el problema esta algo complejo... XD
si... No se puede hacer de la 1° forma, tengo otra idea de dividir los documentos deacuerdo a su año y agruparlos en su correspondiente tabla, ejemplo "documentos2001" y asi con los demas años, el problema es que me piden que al terminar por ejemplo el 2008, el usuario pueda crear otra tabla para los documentos del año siguiente (2009)...el problema creo yo, es que se tiene que programar al sistema, para que pueda usar la nueva tabla, ej: "documentos2009".... Tendria que poner en el
form <load>
select x
use documentos2009
Y así de tal forma que lo pueda usar... El sistema, y quisiera saber si alguna manera de no hacer esto, es decir, que todo lo haga el sistema automáticamente ...
espero me puedas ayudar... Saludos

1 Respuesta

Respuesta
1
Claro que se puede, ambas opciones, aunque, personalmente, creo que la segunda opción es mejor, pero igual te explico las dos.
Si quieres que cuando la tabla pese 1.5 GB se cree una nueva entonces tienes que monitorear el tamaño del archivo desde tu programa, lo podrías hacer cuando inicia, utilizando la función <ADIR()>, la cual crea un arreglo con los archivos que cumplan ciertas condiciones y te devuelve algunos datos como el Nombre y el Tamaño de dicho archivo (en bytes). Suponiendo que lo vas a checar en tu programa principal:
** Programa Principal (Arhivo PRG)
cRutaDat = "C:\Programa\Datos\"       && Aquí debe ir la ruta de Datos
IF ADIR(aTablas, cRutaDat + "Documentos*.dbf") > 0
    ASORT(aTablas)
    nUltEle = ALEN(aTablas, 1)
    cUltTabla = aTablas[nUltEle, 1]
    cNueTabla = LTRIM(STR(VAL(SUBSTR(cUltTabla, 11)) + 1))
    cNueTabla = "Documentos" + cNueTabla + ".dbf"
    IF (aTablas[nUltEle, 2] / 1073741824) > 1.5
        USE (cRutaDat + cUltTabla)
        COPY STRUCTURE TO (cRutaDat + cNueTabla)
        USE
    ENDIF
ELSE
    MESSAGEBOX("Tabla no Encontrada.", 16, "Error")
Endif
RELEASE cRutaDat, aTablas, nUltEle, cUltTabla, cNueTabla
En tanto a la segunda, es más sencillo, en este caso yo recomendaría que, también al inicio del programa, cheques la fecha de la computadora y declares una variable pública con el nombre correspondiente de la tabla, algo así:
** Programa Principal (Archivo PRG)
cRutaDat = "C:\Programa\Datos\"       && Aquí debe ir la ruta de Datos
pcNomTabla = "Documentos" + SUBSTR(DTOS(DATE()), 1, 4)
IF !FILE(cRutaDat + pcNomTabla + ".dbf")
    USE (cRutaDat + "Documentos.dbf")
    COPY STRUCTURE TO (cRutaDat + pcNomTabla)
    Use
Endif
RELEASE cRutaDat
Y con esto cada vez que quieras abrir la tabla usarías este comando:
cRutaDat = "C:\Programa\Datos\"
USE (cRutaDat + pcNombTabla)
Chécalo y si tienes alguna duda con el código me dices.
Podrías mostrarme un ejemplo, por que la vdd ahora si no le entiendo
Lo que pasa es que no se como es que estas haciendo tu aplicación, ¿supongo qué tienes un proyecto no?, y en ese proyecto tienes un archivo PRG que es el programa principal, es decir, el que ejecutas cuando quieres correr tu solución, incluso esta marcado con negritas. Si ya sabes de cual hablo, entonces es ahí donde debes poner el código que te mandé, ya sea el del primer ejemplo o el del segundo. Si no tienes ese archivo o no tienes un proyecto, entonces pega este código en donde sea que inicie tu programa, es decir, en donde estén las primeras instrucciones que se ejecutan.
O bien dime que es exactamente lo que no entiendes y explicame un poco más acerca de la forma en la que estas haciendo tu programa, si tienes proyecto o no, si tienes ese archivo principal que te menciono u otras cosas referentes al entorno que estas usando...
Ok... me interesa la 2° solución, y si tengo un prg, pero solo sirve para..."de click para continuar":
http://img368.imageshack.us/my.php?image=entradapx7.png
luego abre el programa principal, que seria este:
http://img352.imageshack.us/my.php?image=principalri0.png
esta es la pantalla de recibidos:
http://img523.imageshack.us/my.php?image=recibidosnb9.png
como puedes ver, ay un container, donde use los consejos que me diste de la busqueda, y tbm los use con otro form... bueno, atras estan unos botones que son, busqueda, guardar, nuevo, vincular archivo, escanear, ver archivo...
... ya leí con más cuidado la 2° solución, y ya lo comprendí, mi duda ahora estaría en crear una carpeta para guardar los archivos (.pdf), que son escañado del año correspondiente ahí.. ej: c:\minutario\recibidos\recibidos2009....lei por ahí que es con el comando MD o MKDIR... y tbm seria para vincular los archivos a dicha carpeta para poder verlos ...
Ojala puedas ayudarme, la vdd, as sido de mucha ayuda, espero no ser muy fastidioso XD... saludos.
No te preocupes. Aunque igual si es una pregunta diferente, sería mejor que cerraras esta y abrieras una nueva, pero por lo pronto te contesto.
Es correcto lo que dices, utiliza cualquiera de los dos comandos <MD> o <MKDIR> para crear una carpeta. Entiendo que lo que quieres es mostrar esas imágenes en tu programa, así que te explico como lo puedes hacer.
** Para crear una Carpeta
MD "C:\Programa\Imagenes\"
Lo más recomendable es que crees una nueva tabla en donde tengas un campo para guardar la ruta de las imágenes, y otro para el nombre, o puede ser el mismo. Después usas un control <img alt="" /> <Image> para mostrar los archivos, solo tendrías que ir cambiando la propiedad <Picture> del control <img alt="" /> para que muestre imágenes diferentes.
Suponiendo que tuvieras una tabla (Archivos) con los campos "No" y "Ruta". Tienes un formulario (Form1) el cual tiene un control <Image> llamado "Image1", dos botones llamados "btnUno" y "btnDos".
Esta es la información de la Tabla Archivos
No Ruta
1              C:\Programa\Imagenes\Imagen01.jpg
2              C:\Programa\Imagenes\Imagen02.jpg
** Evento Click de btnUno
SELECT Archivos
GO 1
ThisForm.Image1.Picture = ALLTRIM(Ruta)
** Evento Click de btnDos
SELECT Archivos
GO 2
ThisForm.Image1.Picture = ALLTRIM(Ruta)
Suerte.
Excelente. Antes de abrir otra pregunta, por ultimo me podrías explicar en el método 2; que es lo que hace la linea:
Use(cRutaDat + "Documentos.dbf") y la linea SUBSTR(DTOS(DATE()), 1,4)
Saludos

Añade tu respuesta

Haz clic para o