Главная страница
    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.49 MB
Время: 0.03 c
15-1155237683
ronyn
2006-08-10 23:21
2006.09.03
pdf


15-1154895244
Footballer
2006-08-07 00:14
2006.09.03
Исходники плееров


4-1144147115
balepa
2006-04-04 14:38
2006.09.03
CreateProcess, ShellExecute, WinExec


2-1155698844
California
2006-08-16 07:27
2006.09.03
Что такое XPManifest ?


2-1154957234
Triton
2006-08-07 17:27
2006.09.03
Union





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский