PDA

Ver la Versión Completa : Mantenimiento a Access


Jucho69
18-05-2010, 17:34:41
Hola

A veces he tenido problemas con las bases de dato Access que se corrompen de vez en cuando, entonces tomé prestado un codigo de ustedes e hice está pequena aplicación que me resolvió el problema totalmente, espero que le sirva a alguien.

Saludos ;)

delphi.com.ar
18-05-2010, 17:43:13
Si ibas a compartir algo de código, te cuento que te lo has olvidado!.

Saludos!

Jucho69
18-05-2010, 18:09:11
Hola

Es que estaba tratando de subir un adjunto con todo en .zip pero exede la cuota, a ver de esta forma:

file:///C:/Documents%20and%20Settings/Rogelio/Mis%20documentos/MantenimientoBD/MantenimientoBD.exe

Aqui está el código.

Un Form, un Opendialog, tres Botones(yo usé Xbutton) y dos Edit

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, comobj, ExtCtrls, Mask, DBCtrls, dxCore, dxButton,
jpeg;

type
TForm1 = class(TForm)
Bevel53: TBevel;
Image9: TImage;
Bevel62: TBevel;
Bevel65: TBevel;
Bevel64: TBevel;
Bevel67: TBevel;
Bevel68: TBevel;
Bevel66: TBevel;
Label1: TLabel;
dxButton11: TdxButton;
dxButton14: TdxButton;
dxButton1: TdxButton;
Bevel63: TBevel;
Bevel59: TBevel;
Edit1: TEdit;
OpenDialog1: TOpenDialog;
Bevel1: TBevel;
Edit2: TEdit;
Label2: TLabel;
Bevel35: TBevel;
procedure dxButton1Click(Sender: TObject);
procedure dxButton14Click(Sender: TObject);
procedure dxButton11Click(Sender: TObject);
procedure OpenDialog1CanClose(Sender: TObject; var CanClose: Boolean);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation


{$R *.dfm}

procedure TForm1.dxButton1Click(Sender: TObject);
var DBEngine : OLEVariant;
BaseDeDatos, Contra:string;
Begin
BaseDeDatos:=Edit1.Text;
Contra:=Edit2.Text;
try
DeleteFile(BaseDeDatos + '2');
DbEngine := CreateOleObject('Dao.DbEngine.35');
DbEngine.CompactDataBase(BaseDeDatos, BaseDeDatos + '2', NULL, 0, ';pwd='+Contra);
DeleteFile(BaseDeDatos);
RenameFile(BaseDeDatos + '2', BaseDeDatos);
except
try
DeleteFile(BaseDeDatos + '2');
DbEngine := CreateOleObject('Dao.DbEngine.36');
DbEngine.CompactDataBase(BaseDeDatos, BaseDeDatos + '2', NULL, 0, ';pwd='+Contra);
DeleteFile(BaseDeDatos);
RenameFile(BaseDeDatos + '2', BaseDeDatos);
except
try
DeleteFile(BaseDeDatos + '2');
DbEngine := CreateOleObject('Dao.DbEngine.120');
DbEngine.CompactDataBase(BaseDeDatos, BaseDeDatos + '2', NULL, 0, ';pwd='+Contra);
DeleteFile(BaseDeDatos);
RenameFile(BaseDeDatos + '2', BaseDeDatos);
finally
end;
end
end;
dxButton1.Enabled:=false;
end;
procedure TForm1.dxButton14Click(Sender: TObject);
begin
Form1.Close;
end;
procedure TForm1.dxButton11Click(Sender: TObject);
begin
OpenDialog1.Execute;
end;
procedure TForm1.OpenDialog1CanClose(Sender: TObject; var CanClose: Boolean);
begin
Edit1.Text:=(OpenDialog1.FileName);
dxButton1.Enabled:=true;
end;
procedure TForm1.FormCreate(Sender: TObject);
var hMenuHandle : HMENU; Sem:THandle;
begin
hMenuHandle := GetSystemMenu(Form1.Handle, FALSE);
if (hMenuHandle <> 0) then
DeleteMenu(hMenuHandle, SC_CLOSE, MF_BYCOMMAND);
Sem := CreateSemaphore(nil,0,1,'MantenimientoBD.exe');
if ((Sem <> 0) and (GetLastError = ERROR_ALREADY_EXISTS)) then
begin
CloseHandle( Sem );
ShowMessage('Este programa ya se está ejecutando...');
Halt;
end;
end;
end.

Neftali [Germán.Estévez]
18-05-2010, 18:17:04
Lo más sencillo en estos casos es que lo subas a un servidor público tipo Megaupload (http://www.megaupload.com/)o rapidshare (http://rapidshare.com/)y luego coloques aquí el link. Incluso puedes usar el FTP del clu (http://www.terawiki.clubdelphi.com/)b.

Jucho69
18-05-2010, 19:13:56
Hola Neftali

Sí, esmás facil, lo puse en

http://rapidshare.com/files/388829408/MantenimientoBD.zip.html

Saludos

Neftali [Germán.Estévez]
19-05-2010, 10:38:22
Hola.
Te lo he subido al FTP en la sección Delphi (http://www.terawiki.clubdelphi.com/archivos/Delphi/Ejemplos/MantenimientoBD.zip) y he eliminado un par de copias que habías subido a otros directorios.

Gracias por compartir el código.

Jucho69
19-05-2010, 14:10:37
Hola amigo

Ahh sí, hice varios intentos, y pensé que no habia dado resultado, hasta borré un compactado sobre mi foto para hacer espacio,
buena novatada jejeje.

Saludos

marcoszorrilla
19-05-2010, 15:01:48
En cualquier caso gracias por compartir tu código.

Un Saludo.

Jucho69
20-05-2010, 18:30:24
Es de ustedes, gracias a tí por ordenar el reguero de código.

Saldos

Caral
20-05-2010, 18:43:04
Hola
Pregunto:
Para que el programa haga la copia de la BD (que es lo que me parece que hace) esta tiene que estar cerrada, osea, que nadie la este usando?.
Saludos

Jucho69
20-05-2010, 20:09:27
Hola Caral

Sí, no puede estar en uso, yo lo corro por la tarde al salir del trabajo, pude ver que no hace copias, pero como tu utilizas Access desde hace tiempo a lo mejor tienes alguna buena solución para eso.

Saludos

Caral
20-05-2010, 20:17:30
Hola
Yo uso un programa que se llama BackUp Maquine, esta hecho en delphi.
Lo que yo hago es que cada 2 horas avisa si se quiere hacer un backUp si es asi hace una copia o varias sin necesidad de cerrar la BD.
Si lo quieres me dices y lo pongo aqui.
saludos

Jucho69
20-05-2010, 20:52:03
Ahh que bién, te lo agradezco, veré como lo adapto.

Saludos

Caral
20-05-2010, 21:16:57
Hola
Aqui esta, es facil de configurar.
Saludos

Neftali [Germán.Estévez]
21-05-2010, 12:11:27
¿Se puede subir al FTP Carlos? ;)

Jucho69
21-05-2010, 16:49:24
Caral, esta bién el programa, facil de usar y hoy a ver si lo reviso mejor, lo que yo hice es más bién para repararlas.

Saludos

Caral
21-05-2010, 19:42:03
Hola
¿Se puede subir al FTP Carlos? ;)
Pues me imagino que si, el programa no es mio, lo baje hace tiempo de algun lado pero es codigo libre.
No creo que se tenga ningun problema, si gustas lo subes.
Saludos

Neftali [Germán.Estévez]
22-05-2010, 11:43:38
Pues me imagino que si, el programa no es mio, lo baje hace tiempo de algun lado pero es codigo libre.
No creo que se tenga ningun problema, si gustas lo subes.
Saludos

OK.
Pensé que lo habías hecho tú, de ahí la pregunta... ;)