Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.09.03;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.052 c
2-1155287461
Demand
2006-08-11 13:11
2006.09.03
строка заголовка формы.


15-1154787455
ZeroDivide
2006-08-05 18:17
2006.09.03
Женился


15-1155461333
Чемульпо
2006-08-13 13:28
2006.09.03
Помогите плиз!


1-1153397148
dracula
2006-07-20 16:05
2006.09.03
Как узнать - занят файл другим процессом или нет?


4-1147163914
angelsaint
2006-05-09 12:38
2006.09.03
создание и обработка своих сообщений





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский