Блокировка таблицы доступа для предотвращения записи в определенное время

Я делаю еженедельный прогноз, в котором люди будут иметь шаблон в Excel для ввода данных. Как только они вводят все свои данные, они нажимают кнопку в Excel, которая помещает данные в таблицу в базе данных Access.

По пятницам в 10:30 утра я хочу, чтобы таблица была заблокирована, так что людям трудно получить данные в базе данных. В этот момент прогноз на эту неделю является окончательным, и тогда я хотел бы, чтобы база данных могла быть записана снова (не заблокирована) после 5 вечера в пятницу.

Это возможно? Даже если бы могла быть отдельная кнопка, в которой я мог бы щелкнуть себя в 10:30, чтобы заблокировать таблицу, а затем я мог бы снова щелкнуть ее по 5PM, чтобы разблокировать таблицу (или отдельную кнопку для этого). Также как я могу создать окно сообщения, которое появляется только тогда, когда таблица заблокирована, чтобы сообщить пользователям о том, что крайний срок был выполнен, и больше нет записи в таблицу?

Код, который я использую для ввода данных в таблицу базы данных Access из шаблона Excel:

Sub ADOFromExcelToAccess() If MsgBox("This Button Will Submit all Data in the Table to the Right & Clear the Table! Are you sure?", vbYesNo) = vbNo Then Exit Sub ' exports data from the active worksheet to a table in an Access database ' this procedure must be edited before use Dim cn As ADODB.Connection, rs As ADODB.Recordset, r As Long ' connect to the Access database Set cn = New ADODB.Connection cn.Open "Provider=Microsoft.Jet.OLEDB.4.0; " & _ "Data Source=DatabasePath;" ' open a recordset Set rs = New ADODB.Recordset rs.CursorLocation = adUseClient rs.Open "Forecast_Items", cn, adOpenKeyset, adLockBatchOptimistic, adCmdTable ' all records in a table On Error GoTo transerror cn.BeginTrans r = 17 ' the start row in the worksheet Do While Len(Range("D" & r).Formula) > 0 ' repeat until first empty cell in column D table With rs .AddNew ' create a new record ' add values to each field in the record .Fields("UserName") = Range("B" & r).Value .Fields("Forecast_Date") = Range("C" & r).Value .Fields("Area") = Range("D" & r).Value .Fields("Description_Item") = Range("E" & r).Value .Fields("Account") = Range("F" & r).Value .Fields("RRDD") = Range("G" & r).Value .Fields("CostCenter") = Range("H" & r).Value .Fields("Fleet") = Range("I" & r).Value .Fields("ForecastAmount") = Range("J" & r).Value .Fields("PlanAmount") = Range("K" & r).Value .Fields("VarianceForecast") = Range("L" & r).Value .Fields("Explanation") = Range("M" & r).Value ' add more fields if necessary... End With r = r + 1 ' next row Loop rs.UpdateBatch 'injects full table from excel into access at the same time, eliminating possible errors with inserting certain rows over others cn.CommitTrans 'makes sure that there were no errors before sending off all of the data rs.Close Set rs = Nothing cn.Close Set cn = Nothing MsgBox ("Data was Submitted Successfully! A copy of your submitted data is on tab Submitted Information") ActiveSheet.Unprotect "password" Sheets("Forecast Form").Select Range("B16:M100").Select Application.CutCopyMode = False Selection.Copy Sheets("Submitted Information").Select Range("A1").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Sheets("Forecast Form").Protect Password:="password", DrawingObjects:=False, AllowFormattingCells:=True Sheets("Forecast Form").Range("D17:M100").ClearContents Exit Sub transerror: cn.RollbackTrans rs.Close Set rs = Nothing cn.Close Set cn = Nothing MsgBox ("Required Fields are: Area/Description Item/Fleet (Use Drop Down Box to Find Appropriate Naming or N/A)/Forecast Amt/Plan Amt/Variance Amt/Explanation."), , "Data Input Error" MsgBox ("Data Was Not Submitted"), , "Data Input Error" End Sub 

Что касается вопроса о блокировке таблицы, введите форму, открытую в Access, с проверкой события таймера на день и время для блокировки и разблокировки. Блокировка с использованием транзакции на столе:

 Workspaces(0).BeginTrans CurrentDB.Execute "Update MyTable SET MyField=MyField & ''" 

И разблокируйте, откинув эту транзакцию:

 Workspaces(0).Rollback 

Это может быть реализовано в Access без изменения кода Excel, обновление заблокированной таблицы приведет к ошибке.

Если событие таймера получает блокировку и время разблокировки из таблицы в Access, обработчик ошибок в Excel может создать ссылку на эту таблицу и проверить, реализована ли блокировка из-за времени или какая-то другая ошибка … на основе этого вы можете создать свое сообщение.

Я вижу, что вы используете старый поставщик Jet.OLEDB, но если вы когда-либо обновляете свой файл базы данных до .accdb для Access 2010 или более поздней версии (и используете ACE.OLEDB или ACE ODBC), вы можете создать макрос данных перед изменением заблокируйте таблицу:

BeforeChange.png

.OpenRecordSet имеет параметр dbDenyWrite . Я не уверен, что это применимо в этом случае, но это может привести вас к правильному пути. Что касается временных интервалов, возникает еще один вопрос, который может помочь в написании правил о том, когда автоматически блокировать таблицу. ссылка

Комментарий Уэйна о таблице администратора, чтобы сохранить текущий статус блокировки, позволит вам создать окно сообщения.

AFAIK, если вы открываете таблицу с использованием набора записей DAO в коде: CODE

Установите r = CurrentDB.OpenReocrdset (SomeTable, dbOpenTable, dbDenyRead)

Просто запустите этот простой скрипт с помощью планировщика задач Windows. Вот ссылка, которая описывает, как планировать задачу.

http://windows.microsoft.com/en-us/windows/schedule-task#1TC=windows-7

  • Подтверждаемые документы
  • VBA для обновления ссылки из таблиц Access в Excel Workbooks
  • Код для исключения заголовков столбцов при переносе в Excel 2007 из Access 2007
  • Как использовать переменные с Recordset!
  • Выбор диапазона для применения границ - Доступ к VBA
  • Импорт Excel 2013 в vs, Microsoft ACE.OLEDB.12.0 не зарегистрирован на локальной машине
  • Потолочная функция в Access
  • Таблица Excel и таблица MS Access Присоедините визуальную студию C #
  • Использование команды Excel SaveAs в Access
  • Поздняя привязка функций UserForm
  • Попытка запуска запроса DELETE с использованием DAO в VBA
  • Interesting Posts

    Редактирование нескольких свойств в пользовательской форме

    Вставить строку в таблицу Excel с помощью openpyxl в Python

    скопируйте таблицу и таблицу с листа на слайд. 2

    Создание линейной диаграммы для многих серий

    Ошибка выполнения при удалении строки в Worksheet_Change

    Повторите список столбцов в Excel до конца листа

    Создайте переменные в шаблоне Excel, которые отслеживают столбцы раздела, используя VBA

    Преобразование строк в Excel на даты

    excel vba: показать изменение в списке выпадающего списка при изменении более одного раза?

    Нет результата mysqli внутри цикла для пакетной загрузки

    Дни проходили между двумя датами java с различным часовым поясом

    Неверный вызов или аргумент процедуры для concatentaion

    Цифры чисел внутри и снаружи скобок и создавать стрелки на основе значений в VBA или Excel

    Как проверить пробелы до или после строки в excel

    Ошибка SSIS + Excel Vs_needsnewmetadata

    Давайте будем гением компьютера.