Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.09.03;
Скачать: CL | DM;

Вниз

сжать базу   Найти похожие ветки 

 
Chort ©   (2006-08-13 23:21) [0]

Здравствуйте! Каким образом можно программно сжать базу данных Access. Как в Access   "Сервис-Служебные программы-Сжать и востановить базу".Спасибо!


 
Anatoly Podgoretsky ©   (2006-08-13 23:54) [1]

Создать OLE объект и рулить его методами.


 
easy ©   (2006-08-14 09:34) [2]

http://dfc.com.ru/?sid=2&id=10&itemid=114


 
umbra ©   (2006-08-14 10:09) [3]

ShellExecute(0, "open", "c:\program files\office\msaccess.exe", "/compact c:\mybase.mdb c:\mycompressedbase.mdb", nil, SW_SHOWNORMAL);


 
Chort ©   (2006-08-14 11:53) [4]

to umbra
объясните что означаб c:\mybase.mdb и c:\mycompressedbase.mdb",
Ну c:\mybase.mdb -это моя база данных, а c:\mycompressedbase.mdb" может уже сжатая. Если так то мне нужну текущую одну базу сжимать и востанавливать заменяяя ее же, а не создавать новую сжатую.

to Easy
Спасибо за ссылку
попробовал
procedure Access_Compact(const aAccess: string);
const
 bak_ext = ".$$$";
 stAccessDB = "Provider=Microsoft.Jet.OLEDB.4.0;"+
                     "Data Source=%s";
var
 JetEngine : OleVariant;
 TempName : string;
begin
 TempName := ChangeFileExt(aAccess, bak_ext);
 DeleteFile(TempName);
 JetEngine := CreateOleObject("JRO.JetEngine");
 try
   JetEngine.CompactDatabase(
     Format(stAccessDB, [aAccess]),
     Format(stAccessDB, [TempName]));
   DeleteFile(aAccess);
   RenameFile(TempName, aAccess);
 finally
   JetEngine := Unassigned;
 end;
end;


procedure Access_Compact(const SrcConn, Dstfile: string);overload;
const
 stAccessDB = "Provider=Microsoft.Jet.OLEDB.4.0;"+
                     "Jet OLEDB:Engine Type=4;"+ //Engine Type=5 (Access2000)
                     "Data Source=%s";
var
  JetEngine : OleVariant;
begin
  JetEngine := CreateOleObject("JRO.JetEngine");
  try
     JetEngine.CompactDatabase(SrcConn, Format(stAccessDB, [dstfile]));
  finally
     JetEngine := Unassigned;
  end;
end;

Первая процедура компилится нормально, а вот вторая матюкается
Previous declaration of "Access_Compact" was not marked this the "overload" directive.


 
easy ©   (2006-08-14 12:08) [5]

Он говорит "Предыдущее объявление "Access_Compact" не было отмечено директивой overload.


 
Chort ©   (2006-08-14 12:15) [6]


> Он говорит "Предыдущее объявление "Access_Compact" не было
> отмечено директивой overload.

Это я понял, что сецчас сделать ?добавить этот overload в первую процедуру?


 
umbra ©   (2006-08-14 12:49) [7]


> Ну c:\mybase.mdb -это моя база данных, а c:\mycompressedbase.
> mdb" может уже сжатая.

именно так. чтобы сжаттая база копировалась в оригинальную, надо убрать второе имя, т.е.
ShellExecute(0, "open", "c:\program files\office\msaccess.exe", "/compact c:\mybase.mdb", nil, SW_SHOWNORMAL);


 
Chort ©   (2006-08-14 16:54) [8]

to umbra
сделал так
procedure TForm1.Button1Click(Sender: TObject);
begin
ShellExecute(0, "open", "C:\Program Files\Microsoft Office\OFFICE11\msaccess.exe",
 "/compact D:\мои доки\ноль\ноль_1.1\softvok.mdb", nil, SW_SHOWNORMAL);
end;

компилится нормально, вот только ничего не сжимает. Как было 6,19 метров так и осталось. Попробовал Сжать через Access - сжалось до 1,31 метров.


 
UMU ©   (2006-08-14 16:57) [9]

...кусок проги, полностью рабочий


unit Unit1;

interface

uses
 windows,SysUtils,Dialogs,DAO2000,ComObj, Messages, Classes, Graphics, Controls, StdCtrls, Forms, shellapi,
  DBCtrls,DB, Buttons, DBTables, Mask, ExtCtrls, ComCtrls, Menus,mmsystem,
 ADODB, jpeg;

type
 TForm1 = class(TForm)
   Button1: TButton;
   ProgressBar1: TProgressBar;
   Edit1: TEdit;
   Label1: TLabel;
   procedure Button1Click(Sender: TObject);
   procedure CompactDatabase_JRO(DatabaseName: string; DestDatabaseName: string =
 ""; Password: string = "");
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.CompactDatabase_JRO(DatabaseName: string; DestDatabaseName: string =
 ""; Password: string = "");
const
 Provider = "Provider=Microsoft.Jet.OLEDB.4.0;";
var
 TempName: array[0..MAX_PATH] of Char; // èìÿ âðåìåííîãî ôàéëà
 TempPath: string; // ïóòü äî íåãî
 Name: string;
 Src, Dest: WideString;
 V: Variant;
Begin
 ProgressBar1.Max:=100;
 ProgressBar1.StepBy(5);
 try
   Src := Provider + "Data Source=" + DatabaseName;
   if DestDatabaseName <> "" then
     Name := DestDatabaseName
   else
   begin
     // &#226;&#251;&#245;&#238;&#228;&#237;&#224;&#255; &#225;&#224;&#231;&#224; &#237;&#229; &#243;&#234;&#224;&#231;&#224;&#237;&#224; - &#232;&#241;&#239;&#238;&#235;&#252;&#231;&#243;&#229;&#236; &#226;&#240;&#229;&#236;&#229;&#237;&#237;&#251;&#233; &#244;&#224;&#233;&#235;
     // &#239;&#238;&#235;&#243;&#247;&#224;&#229;&#236; &#239;&#243;&#242;&#252; &#228;&#235;&#255; &#226;&#240;&#229;&#236;&#229;&#237;&#237;&#238;&#227;&#238; &#244;&#224;&#233;&#235;&#224;
     TempPath := ExtractFilePath(DatabaseName);
     if TempPath = "" then
       TempPath := GetCurrentDir;
     //&#239;&#238;&#235;&#243;&#247;&#224;&#229;&#236; &#232;&#236;&#255; &#226;&#240;&#229;&#236;&#229;&#237;&#237;&#238;&#227;&#238; &#244;&#224;&#233;&#235;&#224;
     GetTempFileName(PChar(TempPath), "mdb", 0, TempName);
     Name := StrPas(TempName);
   end;
   ProgressBar1.StepBy(10);
   DeleteFile(PChar(Name)); // &#253;&#242;&#238;&#227;&#238; &#244;&#224;&#233;&#235;&#224; &#237;&#229; &#228;&#238;&#235;&#230;&#237;&#238; &#241;&#243;&#249;&#229;&#241;&#242;&#226;&#238;&#226;&#224;&#242;&#252; :))
   Dest := Provider + "Data Source=" + Name;
   ProgressBar1.StepBy(25);
   if Password <> "" then
   begin
     Src := Src + ";Jet OLEDB:Database Password=" + Password;
     Dest := Dest + ";Jet OLEDB:Database Password=" + Password;
   end;
   ProgressBar1.StepBy(35);
   V := CreateOleObject("jro.JetEngine");
   try
     V.CompactDatabase(Src, Dest); // &#241;&#230;&#232;&#236;&#224;&#229;&#236;
   finally
     V := 0;
   end;
   ProgressBar1.StepBy(50);
   if DestDatabaseName = "" then
   begin // &#242;.&#234;. &#226;&#251;&#245;&#238;&#228;&#237;&#224;&#255; &#225;&#224;&#231;&#224; &#237;&#229; &#243;&#234;&#224;&#231;&#224;&#237;&#224;
     ProgressBar1.StepBy(65);
     DeleteFile(PChar(DatabaseName)); //&#242;&#238; &#243;&#228;&#224;&#235;&#255;&#229;&#236; &#237;&#229; &#243;&#239;&#224;&#234;&#238;&#226;&#224;&#237;&#237;&#243;&#254; &#225;&#224;&#231;&#243;
     ProgressBar1.StepBy(75);
     RenameFile(Name, DatabaseName); // &#232; &#239;&#229;&#240;&#229;&#232;&#236;&#229;&#237;&#238;&#226;&#251;&#226;&#224;&# 229;&#236; &#243;&#239;&#224;&#234;&#238;&#226;&#224;&#237;&#237;&#243;&#254; &#225;&#224;&#231;&#243;
     ProgressBar1.StepBy(90);
   end;
 except
   // &#226;&#251;&#228;&#224;&#229;&#236; &#241;&#238;&#238;&#225;&#249;&#229;&#237;&#232;&#229; &#238;&#225; &#232;&#241;&#234;&#235;&#254;&#247;&#232;&#242;&#229;&#235;&#252;&#237;&#238;&# 233; &#241;&#232;&#242;&#243;&#224;&#246;&#232;&#232;
   on E: Exception do
     ShowMessage(e.message);

 end;
 ProgressBar1.StepBy(100);
End;

procedure TForm1.Button1Click(Sender: TObject);
Var PatchToBase:String;
Begin
   Screen.Cursor := crHourGlass;//&#204;&#229;&#237;&#255;&#229;&#236; &#234;&#243;&#240;&#241;&#238;&#240; &#236;&#251;&#248;&#251;
   PatchToBase:=Edit1.Text;//&#199;&#224;&#239;&#232;&#241;&#251;&#226;&#224;&#229;&#236; &#239;&#243;&#242;&#252; &#234; &#225;&#224;&#231;&#229; &#226; &#239;&#229;&#240;&#229;&#236;&#229;&#237;&#237;&#243;&#254;
   Progressbar1.Brush.Color := clWhite;//&#214;&#226;&#229;&#242; ProgressBar
   PostMessage(ProgressBar1.Handle, $0409, 10, clGreen);//&#214;&#226;&#229;&#242; ProgressBar

   CompactDatabase_JRO(PatchToBase, "", "");//&#194;&#251;&#231;&#251;&#226;&#224;&#229;&#236; &#239;&#240;&#238;&#246;&#229;&#228;&#243;&#240;&#243;

   //CompactDatabase &#241; &#239;&#224;&#240;&#224;&#236;&#229;&#242;&#240;&#238;&#236; PatchToBase (&#239;&#243;&#242;&#252; &#234; &#225;&#224;&#231;&#229;)
   Screen.Cursor := crDefault;//&#194;&#238;&#241;&#241;&#242;&#224;&#237;&#224;&#226;&#235;&#232;&#226;&#224;&# 229;&#236; &#234;&#243;&#240;&#241;&#238;&#240; &#236;&#251;&#248;&#251;
   showMessage("&#209;&#230;&#224;&#242;&#232;&#229; &#231;&#224;&#226;&#229;&#240;&#248;&#229;&#237;&#238;");
   Close;
End;

END.


 
umbra ©   (2006-08-14 17:28) [10]


> D:\мои доки\ноль\ноль_1.1\softvok.mdb

пути с пробелами, которые являются аргументами командной строки надо брать в двойные кавычки. Дубль третий:

procedure TForm1.Button1Click(Sender: TObject);
begin
ShellExecute(0, "open", "C:\Program Files\Microsoft Office\OFFICE11\msaccess.exe",
"/compact "D:\мои доки\ноль\ноль_1.1\softvok.mdb"", nil, SW_SHOWNORMAL);
end;


 
Chort ©   (2006-08-14 22:09) [11]

Не смотря на дубли не сжимает и все тут!



Страницы: 1 вся ветка

Текущий архив: 2006.09.03;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.048 c
3-1151456492
merko
2006-06-28 05:01
2006.09.03
из Delphi в ADOConnection не видно SQL Server 2000


2-1155219452
ArchValentin
2006-08-10 18:17
2006.09.03
Какую базу выбрать?


2-1155641597
Zilog
2006-08-15 15:33
2006.09.03
Как в ListBox программно поменять цвет выделенной строчки?


2-1155477729
AlexanderMS
2006-08-13 18:02
2006.09.03
Изменение стандартных диалогов.


1-1153478918
REA
2006-07-21 14:48
2006.09.03
Image List Alpha Channel