| 
| 
 | Вопрос # 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;
 может нужно библиотеку какуюто еще подключить
 |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |