none
Compactar y Reparar mdb RRS feed

  • Pregunta

  • Hola, me gustaría saber si hay alguna forma de poder reparar y compactar un archivo mdb que está en eso (el de la propia aplicacion)  mediante código, por ejemplo al cerrar la aplicación (Con un MEnsage que te diga si quieres compactar al salir, por jemplo)
    viernes, 28 de mayo de 2010 19:26

Respuestas

  • Busca en la ayuda de M. Access compactrepair. En la ventana Base de datos/opciones/General, hay una casilla si deseas compactar al cerrar.

    He estado buscando información y tengo solo un procedimiento similar en un .exe de Visual Basic, donde me compacta la mdb(la base de datos en sí) con otro nombre. Previo a este paso, la elimino. Te explico por qué.

    Un cliente tiene un sistema adm. que controla la cantina de un colegio (www.guayamuri.com) Le desarrollé unas páginas ASP en un servidor web remoto, al cual entran los clientes y consultan los consumos y saldo actual de sus representados. No podía enviar toda la base de datos del sist. adm. por cuestiones de tamaño y no todas las tablas se usan en la consulta web, asi que desarrollé un procedimiento que toma información de los últimos dos meses de ciertas tablas; esta información la inserto en una mdb temporal, sin datos pero con la estructura lista, la compacto con otro nombre y se envia vía FTP al servidor web.

    he aquí un fragmento del procedimiento:

    ...

    strRuta = "c:\data\geniok.mdb"
    If Dir("c:\data\genio.mdb", vbArchive) <> "" Then
        Kill "c:\data\genio.mdb"
    End If
    adoProc strOrigen, strRuta' proceso donde tomo los datos de ciertas tablas e inserto en la nueva o temporal
    Screen.MousePointer = vbDefault
    'compacto la base de datos para enviarla al servidor"
    DBEngine.CompactDatabase "c:\data\geniok.mdb", "c:\data\genio.mdb" ', , dbEncrypt + dbVersion20

    Call envia 'llamo procedimiento FTP

    ....

    Este esquema hoy día no lo utilizo, ya que tarda demasiado (cerca de 10 minutos) el FTP. Hoy utilizo un objeto explorer el cual está insertado en un formulario.El mismo le apunta a una página dinámica y paso por POST la instrucción SQL con valores; en 3 segundos se envían aprox 1000 registros. Si quieres ver ejemplo, dime para que descargues la mdb y en indico la web para ver los resultados.

    Un saludote

     

     

    sábado, 29 de mayo de 2010 18:24

Todas las respuestas

  • Busca en la ayuda de M. Access compactrepair. En la ventana Base de datos/opciones/General, hay una casilla si deseas compactar al cerrar.

    He estado buscando información y tengo solo un procedimiento similar en un .exe de Visual Basic, donde me compacta la mdb(la base de datos en sí) con otro nombre. Previo a este paso, la elimino. Te explico por qué.

    Un cliente tiene un sistema adm. que controla la cantina de un colegio (www.guayamuri.com) Le desarrollé unas páginas ASP en un servidor web remoto, al cual entran los clientes y consultan los consumos y saldo actual de sus representados. No podía enviar toda la base de datos del sist. adm. por cuestiones de tamaño y no todas las tablas se usan en la consulta web, asi que desarrollé un procedimiento que toma información de los últimos dos meses de ciertas tablas; esta información la inserto en una mdb temporal, sin datos pero con la estructura lista, la compacto con otro nombre y se envia vía FTP al servidor web.

    he aquí un fragmento del procedimiento:

    ...

    strRuta = "c:\data\geniok.mdb"
    If Dir("c:\data\genio.mdb", vbArchive) <> "" Then
        Kill "c:\data\genio.mdb"
    End If
    adoProc strOrigen, strRuta' proceso donde tomo los datos de ciertas tablas e inserto en la nueva o temporal
    Screen.MousePointer = vbDefault
    'compacto la base de datos para enviarla al servidor"
    DBEngine.CompactDatabase "c:\data\geniok.mdb", "c:\data\genio.mdb" ', , dbEncrypt + dbVersion20

    Call envia 'llamo procedimiento FTP

    ....

    Este esquema hoy día no lo utilizo, ya que tarda demasiado (cerca de 10 minutos) el FTP. Hoy utilizo un objeto explorer el cual está insertado en un formulario.El mismo le apunta a una página dinámica y paso por POST la instrucción SQL con valores; en 3 segundos se envían aprox 1000 registros. Si quieres ver ejemplo, dime para que descargues la mdb y en indico la web para ver los resultados.

    Un saludote

     

     

    sábado, 29 de mayo de 2010 18:24
  • Con la parte de Compactar al Cerrar me vale.

    Mi sistema es un poco precario porque donde debo correr la aplicació por motivos de seguridad de la empresa para la que lo hago sus ordenadores no están conectados a ninguna red y tengo que pasar los datos de una aplicacion en Access a otra que estoy desarollando en C# a través de USB (algo poco efectivo, pero es la unica forma). Por eso he dividido la aplicacion en dos partes, en una todos los formularios y codigo y en otra los datos en si.

    Ya he creado un formulario con funciones para elegir la carpeta donde exportar el archivo de los datos y compactarle con ComPactRepair, pero había leido que la aplicacion debe estar cerrada para usar CompactReapir, por eso lo de Compactar al Cerrar.

    domingo, 30 de mayo de 2010 16:35
  • Si, es correcto. Debe estar sin uso la mdb. Hay un pequeño método para hacer salir a los usuarios; imagina que alguien abre la aplicación y sale a entregar un informe. Se trata de colocar en la aplic. un formulario invisible que cada x segundos consulta el campo de una tablita. Si ese valor es true o -1, entonces se muestra un mensaje con un formulario donde se le indica que 'debe guardar los datos en proceso, porque la aplic. está en mantenimiento y será cerrada en x minutos'. Pasado el tiempo, un proc. cierra la aplicación.

    Este formulario oculto se  debe cargar al abrir la aplicación. Por supuesto, si el usuario intenta abrirla nuevamente, un proceso revisa el valor en la tablita y cierra la aplic., sin esperar a cargar el formulario oculto.

    Debes entonces crear otra mdb que te permitirá quitar el interruptor o bloqueo. Aun mas allá, se puede manipular el archivo de bloqueo (.ldb) y ver los usuarios y equipos que actualmente están conectados a la aplicación.

    Atte Carlos

    domingo, 30 de mayo de 2010 21:59
  • Ya veo que se pueden haber muchas cosas si,jeje. Peor bueno en mi caso cmo ni siquiera hay red... solo va a haber un usuario en Access. En la aplicacion en C# si que habra varios pero esa como es SQL Server pos es diferente.
    domingo, 30 de mayo de 2010 22:31