Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Tablas planas (https://www.clubdelphi.com/foros/forumdisplay.php?f=20)
-   -   Compactar MDB con contraseña (https://www.clubdelphi.com/foros/showthread.php?t=75)

pgraciap 05-05-2003 18:59:06

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.....;)

Rox77 06-05-2003 10:41:26

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.

delphi.com.ar 07-05-2003 01:56:06

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
  ComObj;

procedure TForm1.Button1Click(Sender: TObject);
var
  DBEngine : OLEVariant;//IDispatch;
begin
  DbEngine := CreateOleObject('Dao.DbEngine.36');
  DbEngine.CompactDataBase('C:\db1.mdb', 'C:\db2.mdb', NULL, 0, ';pwd=password');
end;


pgraciap 07-05-2003 16:56:27

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.....

davezf 20-03-2005 23:42:47

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?

delphi.com.ar 21-03-2005 13:37:22

Sería buenísimo saber cuál es el error ;)

davezf 21-03-2005 18:02:30

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.

davezf 03-04-2005 12:17:57

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.

pgraciap 05-04-2005 22:27:13

Ya probaste instalar las actualizaciones del DAO/Access podrias dar un poco mas de datos en cuanto a error???

Saludos...

davezf 06-04-2005 12:14:52

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 15:44:16.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi