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

Вниз

Резервная копия   Найти похожие ветки 

 
АндрейБ   (2003-03-12 22:46) [0]

Требуется периодически создавать резервную копию таблиц БД. Что можете посоветовать?


 
Pat ©   (2003-03-12 23:09) [1]


uses bde;

procedure BackUp(Table:TTable; Directory:PChar);
var
Path: PChar;
begin
Path:=StrNew(PChar(Directory));
Directory:=StrNew(PChar(Directory));
ForceDirectories(Path);
CharToOem(Path,Directory);
Directory:=PChar(Directory + Table.TableName);
StrDispose(Path);
Check(DbiCopyTable(Table.dbhandle, True,
pchar(Table.TableName), nil,
PChar(Directory)));
end;

Может быть что-нибудь и криво...


 
MsGuns ©   (2003-03-12 23:20) [2]

Я пользовался 2-мя способами:
1. Тупо запускается winrar в пакетном режиме и туда сливается все, кроме .lck. Восстанавливается аналогично "скопом".
Преимущества. Не надо старой БД. Простота кода. Скорость. Допустимость автоинкрементных связующих полей
Недостатки: база сливается вместе со всеми кривостями, БД в экслюзиве и нет ни одной таблы открытой

2. Создается temp-каталог, куда BatchMove`ом копируются (без связок и ключей) все таблы. Затем уже он (temp) архивируется winrar. Восстанавливается в старую БД (разворачивается в temp, затем оттуда BatchMove). Каждая таблица при этом предварительно чистится.

Преимущества. Не надо переводить БД в эксклюзив. Инфа копируется корректно. При восстановлении все поломанные индексы "поднимаются"
Недостатки. Недопустимость автоинкрементных полей в качестве связующих. Много кода. Медленно.


 
АндрейБ   (2003-03-13 02:44) [3]

>Pat © (12.03.03 23:09)

Не срабатывает Check(DbiCopyTable(Table.dbhandle, True, pchar(Table.TableName), nil, PChar(Directory)));
Пишет, что неправильный хэндл. Table.dbhandle = Null???

>MsGuns © (12.03.03 23:20)
В общем-то в обоих случаях ну компе надо иметь установленный winrar. А как программно воспользоваться winrar"ом?


 
MsGuns ©   (2003-03-13 10:31) [4]

Winrar (У меня версия занимает 167 Kb. Взял с одного сидюка 97-го года) должен быть в каталоге с прогой для этого кода

procedure TMainForm.btSaveLoadZipClick(Sender: TObject);
var
env: string;
si: STARTUPINFO;
pi: PROCESS_INFORMATION;

begin
if TButton(Sender).Caption="Загрузить" then
env := "Winrar.exe e -c- -cfg- -o+ "+MainForm.edZipCatalog.Text+"\"+
MainForm.edZipName.Text+".rar "+EcranDir;
else
env := "Winrar.exe a -c- -cfg- -o+ "+MainForm.edZipCatalog.Text+"\"+
MainForm.edZipName.Text+".rar "+EcranDir;
Screen.Cursor := crHourGlass;
if dmServ.dbEcran.Connected then dmServ.dbEcran.Connected := false;
ZeroMemory(@si,SizeOf(si));
si.cb := SizeOf(si);
// - Запуск WinRar из CommandLine
if not CreateProcess(nil,PChar(env),nil,nil,false,0,nil,nil,si,pi) then
ShowMessage("Ошибка открытия архива");
else
begin
WaitForSingleObject(pi.hProcess,INFINITE);
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
MainForm.Update;
end;
Screen.Cursor := crDefault;
end;


 
Pat ©   (2003-03-13 11:21) [5]

>Пишет, что неправильный хэндл. Table.dbhandle = Null???
С чего бы это? Уже давно пользуюсь этой процедурой..
Вот пример вызова:

BackUp(DM.holidays,//Таблица
PChar(Trim(IncludeTrailingBackSlash(fmBackUp.edPath.text))+"Data\"));//Сохранит в директории <edPath.text>\Data\



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

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

Наверх




Память: 0.48 MB
Время: 0.024 c
4-100523
DVM
2003-01-27 09:27
2003.03.31
Хук WH_SHELL и окна консольных приложений / DOS программ


1-100312
Мыш
2003-03-19 15:28
2003.03.31
Атрибуты файла


3-100189
stone
2003-03-13 11:34
2003.03.31
TADOCommand & eoAsyncExecute & RecordsAffected


4-100513
Rouse_
2003-02-02 16:56
2003.03.31
Закрытие приложения


3-100159
Vick
2003-03-12 18:58
2003.03.31
Временные таблицы в функции