Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 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

Приложение:
  1. function WindowsCopyFile(FromFile, ToDir : string) : boolean;
  2. var
  3. F: TShFileOpStruct;
  4. begin
  5. F.Wnd:= 0;
  6. F.wFunc:= FO_COPY;
  7. FromFile:= FromFile+#0;
  8. F.pFrom:= pchar(FromFile);
  9. ToDir:= ToDir+#0;
  10. F.pTo:=pchar(ToDir);
  11. F.fFlags:= FOF_ALLOWUNDO or FOF_NOCONFIRMATION;
  12. result:= ShFileOperation(F) = 0;
  13. end;
  14.  


Ответ отправил: Шичко Игорь (статус: 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;
может нужно библиотеку какуюто еще подключить

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:32
Выполнено за 0.02 сек.