Главная страница
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.015 c
3-100166
just_1869
2003-03-11 02:22
2003.03.31
Ошибка соединения через DataSnap с MS SQL 2000


1-100290
VM
2003-03-19 12:49
2003.03.31
Есть ли TResourceFile в Delphi?


9-100133
Fog
2002-10-29 15:20
2003.03.31
Бэкгроунд


3-100141
Фагот
2003-03-06 13:11
2003.03.31
SQL


4-100504
Antosya
2003-01-27 14:48
2003.03.31
Как мне словить надатие комбинации клавиш?