Форум программистов, компьютерный форум, киберфорум
Наши страницы
MS Access
Войти
Регистрация
Восстановить пароль
 
markusdod
9 / 9 / 0
Регистрация: 07.12.2012
Сообщений: 172
1

Резервирование БД

25.08.2018, 20:27. Просмотров 239. Ответов 15
Метки нет (Все метки)

Доброе время суток.
Возникла необходимость сохранять единовременно
БД в 3 разных места(2 харддиска)
пути соответственно
C:\archiv
D:\archiv
F:\archiv
и сразу облом!
База уверенно копируется в C:\archiv,но никак не получается
реализовать копирование в другие две папки
БД находится на диске D
код прилагаю
Visual Basic
1
2
3
4
5
6
7
8
9
Dim sPatch As String
''sPatch = Dir("C:\archiv")
''sPatch = Dir("d:\archiv")
sPatch = Dir("d:\archiv")
 
    'CreateObject("Scripting.FileSystemObject").GetFile(CurrentDb.Name).Copy Dir("C:\archiv") _
            '& "\archiv\" & Format(Now(), "YYYY.MM.DD_HH.NN ") & CurrentProject.Name
    CreateObject("Scripting.FileSystemObject").GetFile(CurrentDb.Name).Copy sPatch _
            & "\archiv\" & Format(Now(), "YYYY.MM.DD_HH.NN ") & CurrentProject.Name
Процедура в начале отладки
поэтому сильно не пинайте за коментные строки
1
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.08.2018, 20:27
Ответы с готовыми решениями:

Резервирование в БД
Всем доброго дня, В университете получил задание по БД, и не знаю с какой стороны подойти даже...

Резервирование ip
Добрый день, есть оборудование которому присвоен статический ip в dhcp они не фигурируют. Возможно...

Резервирование баз
Люди помагине начинающему программисту 1С. Подскажите как программым способом реализровать...

Резервирование Помещений
Доброго времени суток! Есть такая функция в Лотусе "Резервирование помещений"(Rooms и Resources...

Резервирование mikrotik
Есть маршрутизатор mikrotik 2011uas , нужно настроить резервирование между двумя провайдерами, один...

15
mobile
Эксперт MS Access
24616 / 13428 / 2849
Регистрация: 28.04.2012
Сообщений: 14,730
25.08.2018, 21:26 2
Visual Basic
1
2
3
4
5
Dim sPatch As String
sPatch = "d:\archiv"
 
    CreateObject("Scripting.FileSystemObject").GetFile(CurrentDb.Name).Copy sPatch _
            & Format(Now(), "YYYY.MM.DD_HH.NN ") & CurrentProject.Name
2
Eugene-LS
4114 / 2423 / 471
Регистрация: 05.10.2016
Сообщений: 6,741
25.08.2018, 22:05 3
markusdod, mobile, огромное спасибо за идею!
Даже и не знал что так можно!

Себе уже написал так:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Dim sPatch As String
Dim s$, i%
    
    sPatch = "d:\archiv\"
 
    i = InStr(1, CurrentProject.Name, ".accdb")
    s = Mid(CurrentProject.Name, 1, i - 1) & "_" & Format(Now(), "YYYY.MM.DD_HH.NN") & ".accdb"
    'Debug.Print s
    
    If Right(sPatch, 1) = "\" Then
        sPatch = sPatch & s
    Else
        sPatch = sPatch & "\" & s
    End If
    'Debug.Print sPatch
   
    CreateObject("Scripting.FileSystemObject").GetFile(CurrentDb.Name).Copy sPatch
Вопрос:
А прилинкованные из БД таблицы в данном случае будут копироваться ?
1
mobile
Эксперт MS Access
24616 / 13428 / 2849
Регистрация: 28.04.2012
Сообщений: 14,730
25.08.2018, 22:18 4
Цитата Сообщение от Eugene-LS Посмотреть сообщение
А прилинкованные из БД таблицы в данном случае будут копироваться ?
Да, будут. Копируется файл. Со всеми его настройками. В том числе и линкованными таблицами.
0
25.08.2018, 22:18
Eugene-LS
4114 / 2423 / 471
Регистрация: 05.10.2016
Сообщений: 6,741
25.08.2018, 22:36 5
Цитата Сообщение от mobile Посмотреть сообщение
В том числе и линкованными таблицами.
А как насчёт их содержимого?
Ну, что то не верится мне ...
А простое копирование "FrontEnd" - оно не к чему, важность имеют данные, а не интерфейс.

Добавлено через 6 минут
Цитата Сообщение от mobile Посмотреть сообщение
Копируется файл.
Думаю, что это опасное копирование.
Иди знай - может какой RecordSet (форма) остался открытым в режиме редакции ...
0
markusdod
9 / 9 / 0
Регистрация: 07.12.2012
Сообщений: 172
25.08.2018, 22:39  [ТС] 6
то же здорово
0
mobile
Эксперт MS Access
24616 / 13428 / 2849
Регистрация: 28.04.2012
Сообщений: 14,730
25.08.2018, 22:55 7
Цитата Сообщение от Eugene-LS Посмотреть сообщение
Иди знай - может какой RecordSet (форма) остался открытым в режиме редакции ...
Если в момент копирования есть незакрытые объекты, то копирования не произойдет. Файл будет заблокирован и возникнет ошибка.
0
Eugene-LS
4114 / 2423 / 471
Регистрация: 05.10.2016
Сообщений: 6,741
25.08.2018, 23:12 8
Цитата Сообщение от mobile Посмотреть сообщение
Файл будет заблокирован и возникнет ошибка.
Вот и я про то!
Хотя ещё не факт что ошибка возникнет ибо замечено что метод ... GetFile ... не идеален.
Не страшно, но всё равно корявенько получается, делаем копию открытой (на данный момент) базы (приложения).
Хотя... лучше уж ТАК, чем совсем НИКАК!
Закрыли тему ...

Всем спасибо за внимание и Успехов!

Добавлено через 8 минут
markusdod, mobile, BTW: А вот и "выхлоп" из топика:
Копирование текущей БД по заданному пути с отметкой даты и времени в названии копии

Надеюсь никто не против.
0
Capi
Модератор
Эксперт MS Access
2225 / 1168 / 271
Регистрация: 12.06.2016
Сообщений: 2,802
25.08.2018, 23:18 9
Надеюсь никто не против.
А какая разница? Правда же?

Тема-то закрыта.
0
Eugene-LS
4114 / 2423 / 471
Регистрация: 05.10.2016
Сообщений: 6,741
25.08.2018, 23:19 10
Цитата Сообщение от Capi Посмотреть сообщение
А какая разница? Правда же?
Могу и удалить ... если что ...
Приблизительно за 87 секунд ... (там sitemap должен переписываться - относительно долго ... )

Вижу вы скучаете, но лучше в личку ...
0
markusdod
9 / 9 / 0
Регистрация: 07.12.2012
Сообщений: 172
25.08.2018, 23:26  [ТС] 11
Цитата Сообщение от Eugene-LS Посмотреть сообщение
markusdod, mobile, BTW: А вот и "выхлоп" из топика:
Копирование текущей БД по заданному пути с отметкой даты и времени в названии копии
Надеюсь никто не против.
__________________
ну если всё так неожиданно здорово разрешилось
так помогите добить вопрос до конца
как заставить делать копии в 3 разных места а?
0
Eugene-LS
4114 / 2423 / 471
Регистрация: 05.10.2016
Сообщений: 6,741
25.08.2018, 23:30 12
Цитата Сообщение от markusdod Посмотреть сообщение
как заставить делать копии в 3 разных места а?
Ответ очевиден:
Менять значение переменной sPatch перед каждым копированием.
0
markusdod
9 / 9 / 0
Регистрация: 07.12.2012
Сообщений: 172
25.08.2018, 23:33  [ТС] 13
Цитата Сообщение от Eugene-LS Посмотреть сообщение
Ответ очевиден:
Мерять значение переменной sPatch перед каждым копированием.
ну а как это будет выглядеть в нетленном коде?
0
Eugene-LS
4114 / 2423 / 471
Регистрация: 05.10.2016
Сообщений: 6,741
25.08.2018, 23:52 14
Цитата Сообщение от markusdod Посмотреть сообщение
ну а как это будет выглядеть в нетленном коде?
Примерно так (пути 01, 02. 03 только на свои поменяйте):
Кликните здесь для просмотра всего текста

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
Private Sub test()
'es 25.08.2018
'Копирование текущей БД по заданному пути с отметкой даты и времени в названии копии
'--------------------------------------------------------------------------
'По материалам: http://www.cyberforum.ru/ms-access/thread2314910.html
'--------------------------------------------------------------------------
Dim sPatch As String
Dim s$, i%
'--------------------------------------------------------------------------
 
On Error GoTo test_Err
 
'01
    sPatch = "d:\temp\"
    i = InStr(1, CurrentProject.Name, ".accdb")
    s = Mid(CurrentProject.Name, 1, i - 1) & "_" & Format(Now(), "YYYY.MM.DD_HH.NN") & ".accdb"
    'Debug.Print s
    
    If Right(sPatch, 1) = "\" Then
        sPatch = sPatch & s
    Else
        sPatch = sPatch & "\" & s
    End If
    'Debug.Print sPatch
    PrepareFolders sPatch
    CreateObject("Scripting.FileSystemObject").GetFile(CurrentDb.Name).Copy sPatch
 
 
'02
    sPatch = "d:\temp\02\"
    
    If Right(sPatch, 1) = "\" Then
        sPatch = sPatch & s
    Else
        sPatch = sPatch & "\" & s
    End If
    PrepareFolders sPatch
    CreateObject("Scripting.FileSystemObject").GetFile(CurrentDb.Name).Copy sPatch
 
 
'03
    sPatch = "d:\temp\03\"
    If Right(sPatch, 1) = "\" Then
        sPatch = sPatch & s
    Else
        sPatch = sPatch & "\" & s
    End If
    PrepareFolders sPatch
    CreateObject("Scripting.FileSystemObject").GetFile(CurrentDb.Name).Copy sPatch
  
test_End:
    Exit Sub
 
test_Err:
    MsgBox "Error: " & Err.Number & vbCrLf & Err.Description & vbCrLf & _
    "in Sub: test in module: mod00Test", vbCritical, "Error in Application"
    Err.Clear
    Resume test_End
End Sub
 
 
Public Function PrepareFolders(strFilePath As String) As Long
'es 20.01.2004
'Проверка на наличие и создание папок произвольной вложенности перед
'копированием, перемещением или созданием файла
'--------------------------------------------------------------------
Dim i As Integer
Dim x As Integer
Dim strTemp As String
Dim curPath As String
On Error GoTo PrepareFoldersErr
    x = Len(strFilePath)
    For i = 1 To x
        If Mid(strFilePath, i, 1) = "\" Then
            curPath = Mid(strFilePath, 1, i - 1)
            If Dir(curPath, vbDirectory) = "" Then
                MkDir curPath
            End If
        End If
    Next i
    Exit Function
 
PrepareFoldersErr:
    PrepareFolders = Err.Number
    Select Case PrepareFolders
        Case 76 'Невеный путь
            MsgBox "Задан не верный путь:" & vbCrLf & _
            strFilePath, vbExclamation, "PrepareFolders"
        Case Else
            MsgBox "Процедура [PrepareFolders] привела к ошибке:" & vbCrLf & _
            Err.Description & vbCrLf & " Err#" & Err.Number, vbCritical
    End Select
    Err.Clear
End Function
1
markusdod
9 / 9 / 0
Регистрация: 07.12.2012
Сообщений: 172
25.08.2018, 23:58  [ТС] 15
спасибо
начал мучать
0
Eugene-LS
4114 / 2423 / 471
Регистрация: 05.10.2016
Сообщений: 6,741
26.08.2018, 00:10 16
markusdod, если сразу договоримся что переменная sPatch имеет левый слеш в конце - то блоки:
Visual Basic
1
2
3
4
5
    If Right(sPatch, 1) = "\" Then
        sPatch = sPatch & s
    Else
        sPatch = sPatch & "\" & s
    End If
... можно смело удалять!
Будет короче и красивее

Добавлено через 7 минут
Цитата Сообщение от markusdod Посмотреть сообщение
начал мучать
ну на самом деле там есть простор для оптимизации - мучайте на здоровье!
вот уже придумал быстрее и короче ... но уверен, вы сами управитесь не хуже меня.
(копи - пастинг обычно всё портит, но за то быстро ...)
0
26.08.2018, 00:10
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.08.2018, 00:10

Резервирование с флешки
SHomePath=WshFldrs.item("MyDocuments"); У меня резервирование происходит из моих документы. как...

Сохрание/резервирование
я использую старый Oracle 9i в учебных целях, у меня создана база данных GORDATA, как мне её...

1С 8.Х резервирование товаров
Добрый день помогите разобраться с задачей: Прописать проведение документа "ПродажаТоваров" по...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru