![]() |
Compactar MDB con contraseña
Alguien sabe como compactar una base de datos de access con contraseña, ya tengo el codigo de compactacion este se encuentra en los trucos de club, este compacta muy bien las bases de datos que no tienen contraseña, pero las que si tienen nada mas no las repara y compacta.....
alguien me podria decir cual es el truco..... :) Saludos y gracias.....;) |
Hola PgraciaP, yo he probado el codigo para compactar bases de datos mdb q hay en el foro y me ocurrio lo mismo con una bd con contraseña...la funcion que usas para compactar tiene un parametro el cual es para introducir la contraseña de la bd...si quieres mas detalles busca en la ayuda de VBA de Access 97 hay lo encontre yo. Esq ahora mismo no me acuerdo de como es exactamente pero si quieres me lo dices y te mando un ejemplo.
|
Aunque pese informarlo, tuve que abrir Visual Basic para ver como lo había hecho ya hace unos años, pero obviamente en Visual Basic es mucho mas natural utilizar DAO, ahí va el código, lo probé y funciona, hay que tener en cuenta que el password es Case Sesitive.
Código:
uses |
Respuesta a compactar una mdb con contraseña
Nota importante hay que poner en cualquiera de las clausulas USES, comobj.
Con esto ya algunos tendremos como terminar nuestro, proposito de compactar las bases de datos con contraseña. Para compactar una Base de Datos en Access var Dir: string; // contiene el directorio // en dónde se encuentra el fichero de datos function GetEngine(var DbEngine: Variant): Boolean; begin Result := False; try DbEngine := CreateOleObject('Dao.DbEngine.35'); // Para Access'97 except try DbEngine := CreateOleObject('Dao.DbEngine.36'); // Para Access 2000 except ShowMessage('No es posible inicializar el DAO.'#13 + 'Microsoft DAO debe de estar instalado en este equipo.'#13 + 'Para instalarlo, debes saber que forma parte de '+ 'MS Access, Visual Basic, MS Office, etc.'); Exit; end; end; Result := VarType(DbEngine) = VarDispatch; end; function CompactDataBaseDao(DbAccessName: String): Boolean; var DbEngine: Variant; TmpFile: String; begin Result := False; if Dir = '' then Exit; TmpFile := Dir + 'TmpAccess.Mdb'; if Pos( '.MDB', UpperCase(DbAccessName)) = 0 then DbAccessName := DbAccessName + '.MDB'; if not FileExists(DbAccessName) then Exit; try if not GetEngine(DbEngine) then Exit; if FileExists(TmpFile) then DeleteFile(TmpFile); // Antes de compactar la Base de Datos, ésta se repara. DbEngine.CompactDataBase(DbAccessName, TmpFile); DeleteFile(DbAccessName); RenameFile(TmpFile, DbAccessName); // En caso de caida del sistema aquí, tendremos la base compactada en TmpFile. Result := True; except Exit; end; end; Nota: Esta parte es para compactar las mdb sin contraseña: DbEngine.CompactDataBase(DbAccessName, TmpFile);. Y esta otra es para las que tienen contraseña: DbEngine.CompactDataBase(DbAccessName, TmpFile, NULL, 0, ';pwd=password');. Esta ultima parte es gracias a nuestros amigos: delphi.com.ar y Rox77. Espero les funcione a mucha gente al igual que a un servidor... :D Saludos y Gracias..... |
Hola,
Lo he probado y me funciona correctamente en Windows XP, pero al compactar con Windows Millenium me da un error. Alguien sabe por que? |
Sería buenísimo saber cuál es el error ;)
|
Mejor si;)
Explico un poco mejor. El ordenador del cliente tiene Windows Millenium y Office XP. La base de datos tiene contraseña. Entonces el error se produce al compactar la base de datos (Datatype conversion error). Pero si lo compacto desde access no hay ningun problema. |
Lo explico mas detalladamente, a ver si alguien encuentra la solucion.
Uso el codigo indicado por pgraciap. Entonces cuando ejecuta la linea DbEngine.CompactDataBase(DbAccessName, TmpFile, NULL, 0, ';pwd=password'); me indica el error "Datatype conversion error" Alguien tiene una solucion? En XP funciona perfectamente y desde access con cualquier version funciona bien. |
Ya probaste instalar las actualizaciones del DAO/Access podrias dar un poco mas de datos en cuanto a error???
Saludos... |
DAO / Access se instala con la aplicacion y es el version 2.5 (la que he encontrado).
No se que mas explicar del error porque no se mas aparece ese error al compactar la base de datos, pero si la compacto con access todo funciona bien. |
La franja horaria es GMT +2. Ahora son las 21:55:33. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi