Как мне выполнить цикл через базу данных MS Access и заблокировать все таблицы

#vba #ms-access

#vba #ms-access

Вопрос:

Я использую следующий код для блокировки некоторых таблиц данных в моей базе данных:

 Application.SetHiddenAttribute acTable, "Employees", True
  

И я использую этот код для перебора формы, чтобы очистить все текстовые поля в пользовательской форме:

 Dim ctl_text As Control
For Each ctl_text In Me.Controls
    If ctl_text.ControlType = acTextBox Then ctl_text = Null
Next
Set ctl_text = Nothing
  

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

Я пытался выполнить следующее:

 Dim tdf As Dao.TableDef
Dim db As Dao.Database
Set db = CurrentDb

For Each tdf In db.TableDefs
    If (VBA.Left(tdf.Name, 6) = "prefix") Then
Set Application.SetHiddenAttribute = True
   End If
Next tdf
  

Однако я получаю сообщение об ошибке, сообщающее мне, что аргумент «SetHiddenAttribute» не является необязательным.

Есть идеи, как я могу это сделать?

Комментарии:

1. Application.SetHiddenAttribute acTable, tdf.Name, True было бы эквивалентно.

Ответ №1:

Я думаю, вы это имеете в виду:

 Dim tdf As DAO.TableDef
Dim db As DAO.Database

Set db = CurrentDb

For Each tdf In db.TableDefs
    If VBA.Left(tdf.Name, 6) = "prefix" Then
        tdf.Attributes = tdf.Attributes Or dbHiddenObject
    End If
Next
  

Обратите внимание, что это не «блокирует» таблицы, а только скрывает их от обычных представлений.

Чтобы удалить скрытый атрибут:

         tdf.Attributes = tdf.Attributes And Not dbHiddenObject
  

Комментарии:

1. Это должно быть Or вместо And того, чтобы работать (и не очищать другие атрибуты).

2. Просто проверяю — при использовании функции атрибутов вы не рискуете потерять таблицу при сжатии? Кроме того, каким будет обратное приведенному выше, если я захочу его отобразить?

3. Добавлена строка кода для удаления атрибута. Не могу сказать о выживании из compact / repair — это должно быть легко проверить.

4. Спасибо @Gustav, я собираюсь запустить его на копии базы данных и дать отзыв.