Форум: "Базы";
Текущий архив: 2005.02.20;
Скачать: [xml.tar.bz2];
ВнизВосстановление базы данных mdb (Access) Найти похожие ветки
← →
Eraser © (2005-01-18 22:58) [0]Вопрос такой. Как восстановить базу данных mdb (Access) после сбоя (например свет вырубили, а бесперебойника нету...)
Я слышал, что напрямую Jet драйвер использовать надо...
Очень помогут конкретные примеры или ссылки.
Спасибо.
← →
Anatoly Podgoretsky © (2005-01-18 23:17) [1]Не волнуйся, плюнь, эти данные ничего не стоят, иначе как можно понять, что нет UPS
← →
Eraser © (2005-01-18 23:25) [2]Eraser ©
Эти данные то ничего не стоят, но редставляю как будут материться пользователи мего продукта, когда накроется список контактов и история сообщений.
Если есть ответы по сабжу, давай ;-))
← →
Anatoly Podgoretsky © (2005-01-19 00:09) [3]Установи Акцесс и попробуй его средствами.
← →
sniknik © (2005-01-19 00:31) [4]восстановление делается упаковкой базы, сделай поиск по JRO CompactDatabase, найдеш кучу всего.
> Эти данные то ничего не стоят, но редставляю как будут материться пользователи мего продукта, когда накроется список контактов и
> история сообщений.
и еще как будут... ;), потому как очень большая вероятность при таком отношении получить невосстановимую ошибку. (хотя... я уже забыл когда на это жаловались, несмотря на то что отношение у наших юзеров не лучше а копий много, но у нас преимущество... данные на сервере можно восстановить (дублируются на кассах в обязательном порядке))
← →
Eraser © (2005-01-19 00:55) [5]sniknik ©
Ценность данных (материальная) сдесь действитльно мала (это база данных юзеров локального чата), но вот её повреждение приченит кучу гемора юзверям, а соответсвенно не видать мне своих $ как и всего остального ;-)
Спасибо за ссылку, действительно кучу всего нашёл.
← →
Eraser © (2005-01-19 00:56) [6]Anatoly Podgoretsky ©
Гениально!!! И пусть юзеры помимо моей проги за $14 покупают MS Office! ;-))
← →
Fay © (2005-01-19 01:54) [7]2 Eraser © (19.01.05 0:56) [6]
Ты такой умный! Только проблемы не у АП, а у тебя.
Возьми резервную копию и добеё её то актуального состояния.
← →
Erik1 © (2005-01-19 10:47) [8]Фигню вы вишите уважаемые, repear без проблем делается с попощю MsJet. У меня пример с использованием стороней библиотеки, но можно проимпортировать библилтеки типов MsJet и работать с ней. Пример:
procedure TInfo.Repear;
begin
//__DBEngine35 object only created automatically if there are some opened TDAODatabases
//otherwise you should create __DBEngine in code
if __DBEngine35 = nil then CreateEngine (Dao35, SystemDB);
with __DBEngine35 do begin
Set_DefaultUser("erik");
Set_DefaultPassword("erik");
RepairDatabase(Database);
end;
ReleaseEngine(Dao35,True);
end;
function TInfo.Compact(var TempName: String): Boolean;
var Day: Word;
begin
Screen.Cursor := crHourGlass;
if __DBEngine35 = nil then CreateEngine (Dao35, SystemDB);
with __DBEngine35 do begin
Set_DefaultUser("erik");
Set_DefaultPassword("erik");
end;
DecodeDate(Date(),Day,Day,Day);
TempName := BackUp+"\DB"+ IntToStr(Day)+".mdb";
DeleteFile(TempName);
__DBEngine35.CompactDatabase (Database,TempName, "", 0, "");
Result := __DBEngine35.Errors.Count = 0;
ReleaseEngine(Dao35,True);
Screen.Cursor := crDefault;
end;
__DBEngine35 получить элементарно, делалось с использованием Diamond http://www.islamov.com там примеры есть.
← →
sniknik © (2005-01-19 10:51) [9]> Фигню вы вишите уважаемые
TDAODatabases ни на какие мысли не наводит? ты используеш DAO а не Jet (вернее не ты а тот компонент/модуль/программер откуда ты это выдрал, не думаю что сам написал не зная разницы ;о))).
← →
sniknik © (2005-01-19 10:53) [10]> делалось с использованием Diamond http://www.islamov.com там примеры есть.
опс... не заметил, ну это только подтверждает что не сам.
← →
Erik1 © (2005-01-19 11:06) [11]Короче Project/Import Type Library
Импортируем "Microsoft DAO 3.5 Object Library" или 3.6
Там можно найти такую строку procedure RepairDatabase(const Name: WideString); safecall;
Далее для совсем непонятливых:
Var __DBEngine: _DBEngine;
begin
__DBEngine := CoDBEngine.Create;
__DBEngine.RepairDatabase("MyDataBase");
← →
sniknik © (2005-01-19 11:32) [12]тоже для непонятливых (и упорных ;о)))
возми на себя труд загляни в справку по DAO, и даже там (а он уже и так устарел), ты найдеш.
Note The RepairDatabase method is no longer available, but listed for backwards compatibility. Use the CompactDatabase method instead.
Note After repairing a database, it"s also a good idea to compact it using the CompactDatabase method to defragment the file and to recover disk space.
краткий, вольный перевод
процедура более не используется оставлена только для совместимости со старым по. используйте другую вместо этой.
после востановления, хорошая идея сделать упаковку. (этим вы исправите ошибки внесенные процедурой восстановления ;о))))
← →
Erik1 © (2005-01-19 12:22) [13]А к чему ты это? Разговор шол как базу востановить и именно об это автор спрашивал(см вопрос). Думаю процедуру procedure CompactDatabase(const SrcName, DstName: WideString; DstLocale, Options, SrcLocale: OleVariant); safecall;
Отыскать в тексте не проблема, если понадобится.
К томуже для упорных :)
Я работал с MsAccess 5 лет и точно знаю как там все работает. Вобщем навсгерда можно востановить базу с помощю CompactDatabase, точнее очень редко. А для версии MsJet 3.5 вобще невозможно!
← →
Eraser © (2005-01-19 13:22) [14]Erik1 ©
Вобщем навсгерда можно востановить базу с помощю CompactDatabase, точнее очень редко. А для версии MsJet 3.5 вобще невозможно!
Так получается единственный надёжный метод- резервное копирование?
← →
sniknik © (2005-01-19 13:29) [15]> А к чему ты это? Разговор шол как базу востановить и именно об это автор спрашивал(см вопрос).
к тому что, ответ
> восстановление делается упаковкой базы, сделай поиск по JRO CompactDatabase, найдеш кучу всего.
(можно добавить/уточнить - сейчас)
уже был дан.
а ты начал советовать устаревшие методы
(> А для версии MsJet 3.5 вобще невозможно!
не в курсе? уже 4.0 sp8)
устаревшие базы (для 3,5 максимум база аксесс 97 (если не 95) не помню, только подходит)
обвинил всех что мы тут фигню говорим (хотя фигню сказал сам)
> Фигню вы вишите уважаемые, repear без проблем делается с попощю MsJet.
дал метод другой библиотеки выдавая его за jet-овский.
> Я работал с MsAccess 5 лет и точно знаю как там все работает.
рад познакомится с гением... я с 93г с базами маюсь, и не всегда уверен что и как там устроено, а тут точно знаю. завидую. (хотя нет! ты же только что пургу гнал, т.что пересмотри свою уверенность ;)
← →
sniknik © (2005-01-19 13:33) [16]> Так получается единственный надёжный метод- резервное копирование?
не считая UPS? ;о))
надо все в комплексе. плюс и и копирование, гарантий на единственный метод никто не даст.
← →
Erik1 © (2005-01-19 15:15) [17]Устаревшие говориш, а знаеш что это основной engine MsAccess и без него ничего работать небудет. Так что все остальное в том числе и JRO будут вызывать методы MsJet. К томуже ненадо никаких дополнительных библиотек.
К томуже стыдно незнать, что "DAO 3.5 Interfaces for the Microsoft Jet Database Engine" - это я из хелпа вырезал.
Вобще все это хозяйство находится "c:\Program Files\Common Files\Microsoft Shared\DAO\dao360.dll" - для версии 3.6
Спор продолжать небуду.
← →
sniknik © (2005-01-19 17:10) [18]> Устаревшие говориш, а знаеш что это основной engine MsAccess и без него ничего работать небудет.
проведи небольшой тест (для этого нужен MS Office XP и желателен Jet с SP8, за отличных от этого участников теста ручатся не буду ;о), у меня это стоит).
в рамках этого теста выполни команду
regsvr32.exe /u "D:\Program Files\Common Files\Microsoft Shared\DAO\DAO360.DLL"
а после (для гарантии) переименуй и сам файл в Bak_DAO360.DLL например... если получится ;о)) (он включен в систему защиты виндовс) если не получается (файл сам собой восстанавливается в оригинальном названии) то перезагрузись в "безопасном режиме" в нем можно делать любые опасные вещи. ;о)) сотри "лишний" файл в нем (чтобы не было как бы). дальше просто, возвращаешся в нормальный режим открываеш аксесс создаеш новую базу... (старую открывать не рекомендую, там возможны "привязки" к движку)
но аксесс конечно не показатель мало ли как его написали... (мы же тестим движок)
главное в дельфи, создай базу (через ADOX) подключись (ADO) и работай, создавай таблици и т.д. избегай только прямых вызовов из DAO, все без проблем будет работать... убедились? осталось вернуть "регистрацию"
regsvr32.exe "D:\Program Files\Common Files\Microsoft Shared\DAO\DAO360.DLL"
> Спор продолжать небуду.
а вот за это большое тебе сердечное спасибо. ;о))
← →
Eraser © (2005-01-19 21:58) [19]Erik1 ©
sniknik ©
Ну вы меня и запутали... ;-))
← →
sniknik © (2005-01-19 22:05) [20]тебе до [4] включительно ничего более не надо. ;о) не обращай внимания.
поиск сделал? инфу нашол? вот и разбирайся. ;о)
← →
Eraser © (2005-01-19 22:35) [21]sniknik ©
Понятно ;-)
Спасибо ещё раз за внесение ясности.
← →
Anatoly Podgoretsky © (2005-01-19 22:54) [22]Eraser © (19.01.05 21:58) [19]
Терпи, он еще и не начинал :-)
Кстати UPS стоит на опрядок дешевле MS Office, ну а сам MS OFFice как правило у пользователя есть. Но не в этом дело, речь сначала шла просто про восстановление конкретной базы, а уж потом пошла о решениях на будущее и программно.
← →
Eraser © (2005-01-19 23:13) [23]Anatoly Podgoretsky ©
Я не против UPS"ов. Просто конечный пользователь вообще не должен знать используются ли в приложении БД или нет, точнее в программ, которую я делаю базы данных имеют не ключевую роль и не являются самоцелью, как например у бухгалтерских прогах.
← →
Anatoly Podgoretsky © (2005-01-20 00:14) [24]Значит надо в программу добавить автоматическое архивирование и восстановление и рекомендации для пользователя об необходимости использования UPS, который защитит не только твою базу, но и другие данные пользователя. Даже просто применение UPS без пропадания питая резко уменьшает количество сбоев в компьютере.
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2005.02.20;
Скачать: [xml.tar.bz2];
Память: 0.52 MB
Время: 0.036 c