VBA и фильтр формы доступа - PullRequest
       3

VBA и фильтр формы доступа

1 голос
/ 10 августа 2011

У меня есть эта форма в доступе, ее цель - работать в качестве внешнего интерфейса таблицы, которую можно редактировать с помощью этой формы.Первоначально при загрузке я отображаю в форме данные из набора записей по следующему запросу:

SELECT * FROM DATA

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

Private Sub Filter_Click()
    If (IsNull(Me.Find_Field) Or Me.Find_Field = "") Then
        rs.Close
        Set rs = db.OpenRecordset("Select * from DATA ORDER BY ID)
        rs.MoveFirst
        LoadData (True)
        Exit Sub
    End If

    Set rs = db.OpenRecordset("Select * from DATA WHERE ID = " & Me.Find_Field)


    rs.MoveFirst
    LoadData (True) ' Function that loads the data into the form
Exit Sub

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

Первоначально, когда форма загружает данные набора записей, я могу редактировать данные, и отредактированные данные будут отображаться в таблице.(что я и хочу).Но после применения фильтра мой код выдает ошибку времени выполнения «3027»: невозможно обновить.База данных или объект доступны только для чтения.

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

1 Ответ

1 голос
/ 11 августа 2011

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

Я могу изменить RecordSource формы из события click моей кнопки cmdApplyFilter .

Private Sub cmdApplyFilter_Click()
    Dim strSql As String
    If Len(Me.txtFind_Field & vbNullString) > 0 Then
        strSql = "SELECT * FROM tblFoo WHERE id = " & _
            Me.txtFind_Field & " ORDER BY id;"
        Me.RecordSource = strSql
    End If
End Sub

Если вас беспокоит, что кто-то может сохранить форму с отфильтрованным RecordSource, вы можете сделать форму всегда открытой с нефильтрованной версией.

Private Sub Form_Open(Cancel As Integer)
    Dim strSql As String
    strSql = "SELECT * FROM tblFoo ORDER BY id;"
    Me.RecordSource = strSql
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...