Форум: "Базы";
Текущий архив: 2003.03.31;
Скачать: [xml.tar.bz2];
ВнизРезервная копия Найти похожие ветки
← →
АндрейБ (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;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.011 c