Форум программистов, компьютерный форум, киберфорум
Наши страницы
Microsoft Access
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.92/13: Рейтинг темы: голосов - 13, средняя оценка - 4.92
alexpro1979
533 / 96 / 10
Регистрация: 08.06.2015
Сообщений: 1,466
1

Автоматическое резервное копирование файла

06.09.2016, 22:40. Просмотров 2379. Ответов 22
Метки нет (Все метки)

Добрый вечер, подскажите кто-то проводил автоматическое резервное копирование БД в течении дня? Как определить что к базе подключено только 1 клиент с помощью VBA?

Добавлено через 31 секунду
Я имею ввиду резервное копирование разделенной БД табличной части.
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.09.2016, 22:40
Ответы с готовыми решениями:

Резервное копирование БД
Дано: База данных (таблицы), хранимая на общем сетевом рессурсе. Несколько клиентов Аксеса, которые...

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

Резервное копирование в Access 2007
Можно ли каким-нибудь образом настроить автоматическое резервное копирование базы данных Access...

Резервное копирование, сжатие и восстановление в определенное время
Как прописать процедуру резервного копирования вместе с сжатием\восстановлением бд, выполняемую в...

Резервное копирование базы данных
Здравствуйте форумчане. Я еще новичок во всем этом, но такой вот вопрос. Как именно скопируется...

22
mobile
Эксперт MS Access
25538 / 13631 / 2925
Регистрация: 28.04.2012
Сообщений: 14,949
06.09.2016, 23:53 2
Цитата Сообщение от alexpro1979 Посмотреть сообщение
Как определить что к базе подключено только 1 клиент с помощью VBA?
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
'Прочитать *.ldb/laccdb для определения количества подключенных юзеров
Public Function kolUser(path)
    Dim FSO, File, TextStream
    Dim rst As dao.Recordset, u
    
'Считываем файл ldb/laccdb
    On Error GoTo errYes
    Set FSO = CreateObject("Scripting.FileSystemObject")
    Set File = FSO.GetFile(path)
    Set TextStream = File.OpenAsTextStream(1)
    u = TextStream.Read(10000)
    
'Цикл по таблице пользователей с поиском имени в файле ldb/laccdb
    kolUser = 0
    Set rst = CurrentDb.OpenRecordset("select * from Users")
    With rst
        Do Until .EOF
            If u Like "*" & ![User] & "*" Then
                kolUser = kolUser + 1
            End If
            .MoveNext
        Loop
    End With
errNo:
    Exit Function
errYes:
    Select Case Err
        Case 53 'Не найден файл, нет подключившихся юзеров
            kolUser = 0
            Resume errNo
        Case Else
            MsgBox "Ошибка " & Err.number & " - " & Err.Description
            Resume errNo
    End Select
End Function
Пример использования
Visual Basic
1
If kolUser("c:\temp\tabledb.laccdb")<=1 Then
1
Панург
Мы один, давай на "ты"
1838 / 843 / 193
Регистрация: 16.06.2016
Сообщений: 1,776
07.09.2016, 05:48 3
Цитата Сообщение от alexpro1979 Посмотреть сообщение
подскажите кто-то проводил автоматическое резервное копирование БД в течении дня?
Я провожу, когда первый пользователь подключается к базе.
Цитата Сообщение от alexpro1979 Посмотреть сообщение
Как определить что к базе подключено только 1 клиент с помощью VBA?
можно ещё так
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Public Function UserCount(strDataSource As String) As Long
Dim cnn As Object 'ADODB.Connection
Dim rst As Object 'ADODB.Recordset
Const adSchemaProviderSpecific& = -1, adUseClient& = 3
    If Len(Dir$(strDataSource)) = 0 Then Exit Function
Set cnn = CreateObject("ADODB.Connection")
cnn.CursorLocation = adUseClient
cnn.Open "Provider='" & CurrentProject.Connection.Provider & "';Jet OLEDB:Engine Type=5;Data Source=" & strDataSource
Set rst = cnn.OpenSchema(adSchemaProviderSpecific, , "{947bb102-5d43-11d1-bdbf-00c04fb92675}")
UserCount = rst.RecordCount
    If Not rst Is Nothing Then If rst.State = 1 Then rst.Close
Set rst = Nothing
    If Not cnn Is Nothing Then If cnn.State = 1 Then cnn.Close
Set cnn = Nothing
End Function
Добавлено через 25 минут
mobile, а в коде ничего не забыто или ещё какое условие? У меня чего-то кроме ошибки ничего путнего не выдаёт...
---------------------------
Microsoft Office Access
---------------------------
Ошибка 3078 - Ядро базы данных Microsoft Office Access не может найти входную таблицу или запрос "Users". Проверьте существование таблицы или запроса и правильность имени.
---------------------------
ОК
---------------------------
ЗЫ. Файл блокировки естестно мой...
1
commun
439 / 228 / 13
Регистрация: 29.10.2014
Сообщений: 929
07.09.2016, 09:11 4
Панург, я этим не занимался. А что, нельзя сделать табличку клиентов, где каждый будет обновлять свою запись в поле "Подключился" при запуске или закрытии базы (ну пусть на событиях стартовой формы)?
0
07.09.2016, 09:11
Панург
Мы один, давай на "ты"
1838 / 843 / 193
Регистрация: 16.06.2016
Сообщений: 1,776
07.09.2016, 09:26 5
Цитата Сообщение от commun Посмотреть сообщение
Панург, я этим не занимался. А что, нельзя сделать табличку клиентов, где каждый будет обновлять свою запись в поле "Подключился" при запуске или закрытии базы (ну пусть на событиях стартовой формы)?
можно, но в коде не приведено это. А смысл, кстати?
0
alexpro1979
533 / 96 / 10
Регистрация: 08.06.2015
Сообщений: 1,466
07.09.2016, 09:37  [ТС] 6
У меня проводится резервное копирование БД при включении компьютера с помощью коммандного файла, папка с архивом синхронизируется в ЯндексДиск. Таким образом в случае краха, копия есть на компьютере и в ЯндексДиске. Хотелось бы каким-то образом дерать резервную копию в течении дня. Чтобы по таймеру шла проверка на колличество подключенных пользователей, а затем если пользователь один - сделать резервную копию. Вопрос состоит в том, что сейчас подключенный один клиент программа начала резервное копирование и в этот момент подключился другой клиент. Такуим образом резервная копия может получиться битой. Верно?

Добавлено через 3 минуты
Цитата Сообщение от commun Посмотреть сообщение
А что, нельзя сделать табличку клиентов, где каждый будет обновлять свою запись в поле "Подключился" при запуске или закрытии базы (ну пусть на событиях стартовой формы)?
При входе в приложение действительно можно автоматически прописывать в таблице, что ты подключился, а вот при закрытии можно ведь выйти из приложения по закрытию самого аксесса а не при закрытии формы. Как тут быть?
0
ltv_1953
Эксперт MS Access
14395 / 6215 / 1275
Регистрация: 21.06.2012
Сообщений: 11,313
07.09.2016, 09:45 7
Цитата Сообщение от alexpro1979 Посмотреть сообщение
При входе в приложение действительно можно автоматически прописывать в таблице, что ты подключился, а вот при закрытии можно ведь выйти из приложения по закрытию самого аксесса а не при закрытии формы. Как тут быть?
При открытии загружать невидимую форму, на открытие формы прописывать подключение, а на закрытие формы (событие возникает при любом закрытии базы, кроме аварийного) прописывать отключение.
1
alexpro1979
533 / 96 / 10
Регистрация: 08.06.2015
Сообщений: 1,466
07.09.2016, 10:26  [ТС] 8
Как не пустить пользователя в БД в момент проведения копирования, чтобы файлик был скопирован при закрытой БД?
0
Панург
Мы один, давай на "ты"
1838 / 843 / 193
Регистрация: 16.06.2016
Сообщений: 1,776
07.09.2016, 10:45 9
Цитата Сообщение от alexpro1979 Посмотреть сообщение
Как не пустить пользователя в БД в момент проведения копирования, чтобы файлик был скопирован при закрытой БД?
У объекта ADO.Connection есть свойство
Visual Basic
1
cnn.Properties("Jet OLEDB:Connection Control") = 1
Сжатие (из Help'а)
Visual Basic
1
2
3
4
5
RepairDatabase = _
        Application.CompactRepair( _
        LogFile:=True, _
        SourceFile:=strSource, _
        DestinationFile:=strDestination)
Цитата Сообщение от ltv_1953 Посмотреть сообщение
При открытии загружать невидимую форму, на открытие формы прописывать подключение, а на закрытие формы (событие возникает при любом закрытии базы, кроме аварийного) прописывать отключение.
Зачем всё это?
0
ltv_1953
Эксперт MS Access
14395 / 6215 / 1275
Регистрация: 21.06.2012
Сообщений: 11,313
07.09.2016, 11:31 10
Цитата Сообщение от alexpro1979 Посмотреть сообщение
При входе в приложение действительно можно автоматически прописывать в таблице, что ты подключился, а вот при закрытии можно ведь выйти из приложения по закрытию самого аксесса а не при закрытии формы. Как тут быть?
Цитата Сообщение от Панург Посмотреть сообщение
Зачем всё это?
Это - ответ на вопрос alexpro1979.
0
alexpro1979
533 / 96 / 10
Регистрация: 08.06.2015
Сообщений: 1,466
07.09.2016, 11:40  [ТС] 11
Цитата Сообщение от ltv_1953 Посмотреть сообщение
Зачем всё это?
С целью создания резервной копии БД в течении дня. Копию сделать нужно рзделенной части БД с таблицами в момент когда все пользователи вышли из клиента. Был инцедент полного краха БД, в период отчета в течении 7 дней производется массовая наборка данных 3-мя пользователями и потерять из за сбоя эту работу жалко. Когда обпечешься будешь дуть и на холодное.
0
ltv_1953
Эксперт MS Access
14395 / 6215 / 1275
Регистрация: 21.06.2012
Сообщений: 11,313
07.09.2016, 11:52 12
Цитата Сообщение от alexpro1979 Посмотреть сообщение
Зачем всё это?
Это не мое ... .
0
Панург
Мы один, давай на "ты"
1838 / 843 / 193
Регистрация: 16.06.2016
Сообщений: 1,776
07.09.2016, 12:25 13
Цитата Сообщение от alexpro1979 Посмотреть сообщение
Цитата Сообщение от Панург Посмотреть сообщение
Зачем всё это?
С целью создания резервной копии БД в течении дня. Копию сделать нужно рзделенной части БД с таблицами в момент когда все пользователи вышли из клиента. Был инцедент полного краха БД, в период отчета в течении 7 дней производется массовая наборка данных 3-мя пользователями и потерять из за сбоя эту работу жалко. Когда обпечешься будешь дуть и на холодное.
Вопрос не про резервное копирование, а про таблицу с пользователями.
0
alexpro1979
533 / 96 / 10
Регистрация: 08.06.2015
Сообщений: 1,466
07.09.2016, 13:25  [ТС] 14
Цитата Сообщение от Панург Посмотреть сообщение
Вопрос не про резервное копирование, а про таблицу с пользователями.
Чтобы знать можно делать резервную копию или нет. Есои кто-то в базе то копию делать некорректно. Если Вы видите другие варианты, пожалуйста озвучте.
0
Панург
Мы один, давай на "ты"
1838 / 843 / 193
Регистрация: 16.06.2016
Сообщений: 1,776
07.09.2016, 14:47 15
Цитата Сообщение от alexpro1979 Посмотреть сообщение
Чтобы знать можно делать резервную копию или нет. Есои кто-то в базе то копию делать некорректно. Если Вы видите другие варианты, пожалуйста озвучте.
Чего озвучивать? Ты не читатель? всё озвучил давно.
Посчитать сколько народу в базе (если прочитать рекордсет, то и кто)http://www.cyberforum.ru/post9519764.html
Заблокировать от новых подключений
http://www.cyberforum.ru/post9520282.html
0
commun
439 / 228 / 13
Регистрация: 29.10.2014
Сообщений: 929
07.09.2016, 14:58 16
Цитата Сообщение от alexpro1979 Посмотреть сообщение
а вот при закрытии можно ведь выйти из приложения по закрытию самого аксесса а не при закрытии формы. Как тут быть?
При закрытии ничего делать не надо. Достаточно при открытии сначала убрать все пользовательские отметки.
1
alexpro1979
533 / 96 / 10
Регистрация: 08.06.2015
Сообщений: 1,466
07.09.2016, 15:28  [ТС] 17
Панург, как в Вашей функции указать что база с паролем ?
Visual Basic
1
cnn.Open "Provider='" & CurrentProject.Connection.Provider & "';Jet OLEDB:Engine Type=5;Data Source=" & strDataSource
Visual Basic
1
Jet OLEDB:Database Password=supersecret
0
Панург
Мы один, давай на "ты"
1838 / 843 / 193
Регистрация: 16.06.2016
Сообщений: 1,776
07.09.2016, 15:48 18
alexpro1979, вот ты и сам нашёл.
Visual Basic
1
2
3
4
...
cnn.Properties("Jet OLEDB:Database Password") = "MyPassword"
cnn.Open "Provider='" & CurrentProject.Connection.Provider & "';Jet OLEDB:Engine Type=5;Data Source=" & strDataSource
...
или
Visual Basic
1
2
3
...
cnn.Open "Provider='" & CurrentProject.Connection.Provider & "';Jet OLEDB:Engine Type=5;Password=" & MyPassword & ";Data Source=" & strDataSource
...
0
commun
439 / 228 / 13
Регистрация: 29.10.2014
Сообщений: 929
08.09.2016, 08:00 19
Панург, я и по коду не в курсе. Но вопрос в другом-ну а событие где? в соседней базе?
0
Панург
Мы один, давай на "ты"
1838 / 843 / 193
Регистрация: 16.06.2016
Сообщений: 1,776
08.09.2016, 09:38 20
Цитата Сообщение от commun Посмотреть сообщение
Панург, я и по коду не в курсе. Но вопрос в другом-ну а событие где? в соседней базе?
какое событие?
0
08.09.2016, 09:38
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.09.2016, 09:38

"Резервное" копирование данных
Уважаемые, есть два вопроса, которые крайне необходимо решить: 1. Есть БД и надо как-то описать...

Автоматическое копирование записей в подчиненной ленточной форме и таблицах
Добрый день, уважаемые специалисты, помогите разобраться со следующими проблемами. Я делаю...

Автоматическое копирование строки в другую таблицу по признаку содержания определенной ячейки
подскажите, пожалуйста, можно ли, не будучи программистом, сделать так, чтобы строки автоматически...


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

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

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