|
Вопрос # 2 299/ вопрос открыт / |
|
Здравствуйте, эксперты!
Как в делфи (7) создавать архивные копии баз данных например по событию нажатию нажатия на кнопку ... какие есть встроенные компоненты. поделитесь информацией пожалусто
Примечание #1 (12 января 2009, 17:49): база access
Примечание #2 (14 января 2009, 10:41): скажите как по событию Button1Click создать новый каталог например с именем системной даты и скопировать туда базу (ассеss)?
база для копирования уже существует и заполнена данными но на другом диске..
заранее спасибо
 |
Вопрос задала: Танюшка (статус: Посетитель)
Вопрос отправлен: 12 января 2009, 17:49
Состояние вопроса: открыт, ответов: 1.
|
Ответ #1. Отвечает эксперт: Шичко Игорь
Здравствуйте, Танюшка!
Создать каталог достаточно просто:
Пример создания каталога по дате на диске С:
...
if not DirectoryExists('c:\' + DateToStr(Date)) then CreateDir('c:\' + DateToStr(Date));
...
Для копирования файла можно попробовать функцию копирования
WindowsCopyFile(FromFile, ToDir : string) : boolean; (код в приложении)
Только в раздел Uses добавьте модуль ShellApi
Приложение: Переключить в обычный режим- function WindowsCopyFile(FromFile, ToDir : string) : boolean;
- var
- F: TShFileOpStruct;
- begin
- F.Wnd:= 0;
- F.wFunc:= FO_COPY;
- FromFile:= FromFile+#0;
- F.pFrom:= pchar(FromFile);
- ToDir:= ToDir+#0;
- F.pTo:=pchar(ToDir);
- F.fFlags:= FOF_ALLOWUNDO or FOF_NOCONFIRMATION;
- result:= ShFileOperation(F) = 0;
- end;
-
 |
Ответ отправил: Шичко Игорь (статус: 9-ый класс)
Время отправки: 14 января 2009, 11:11
Оценка за ответ: 5
Комментарий к оценке: спасибо!!!! получилось!!!
|
Мини-форум вопроса
Всего сообщений: 1; последнее сообщение — 14 января 2009, 12:05; участников в обсуждении: 1.
|
Танюшка (статус: Посетитель), 14 января 2009, 12:05 [#1]:
а не скажите как все же можно обнулить счетчик в базе ..
я тут прописала :
procedure TForm1.CompactAccessDatabase(DatabaseName,Password:string);
// сжатие базы данных Access
const
V35='DAO.DBEngine.35';
V36='DAO.DBEngine.36';
var
TempName:array[0..MAX_PATH] of Char; // имя временного файла
TempPath:string; // путь
Name:string;
tmpDAO:_DBEngine;
ClassID:TGUID;
begin
// получим ClassID
try
try
ClassID:=ProgIDToClassID(v35);
except
try
ClassID:=ProgIDToClassID(v36);
except
raise; // что-то неизвестное
end;
end;
// получаем путь для временного файла
TempPath:=ExtractFilePath(DatabaseName);
if TempPath='' then TempPath:=GetCurrentDir;
//получаем имя временного файла
GetTempFileName(PChar(TempPath),'mdb',0,TempName);
Name:=StrPas(TempName);
DeleteFile(PChar(Name)); // этого файла не должно существовать
if Password<>'' then Password:=';pwd='+Password;
tmpDAO:=CreateComObject(ClassID) as _DBEngine;
tmpDAO.CompactDatabase(DatabaseName,Name,0,0,Password);
DeleteFile(PChar(DatabaseName)); // удаляем не упакованную базу
RenameFile(Name,DatabaseName); // переименовываем упакованную базу
except
// выдаем сообщение об исключительной ситуации
on E: Exception do
ShowMessage('Ошибка сжатия базы данных'#10#13+e.message);
end;
end;
и в обработчике:
ADOConnection1.Close;
CompactAccessDatabase('Zalob.mdb','');
MessageDlg('Сжатие завершено. Перезапустите программу',mtInformation,[mbOk],0);
Application.Terminate;
но у меня ругается еще в разделе
var описания переменных процедуры:
tmpDAO:_DBEngine;
может нужно библиотеку какуюто еще подключить
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|