singlepost

Вопрос по Access. << На главную или назад  

Ситуация следующая:
проводится анкетирование сотрудников организации. Ответы на их вопросы вносятся в форму, из которой переносятся в таблицу. Есть форма, позволяющая просматривать все записи таблицы.
Но нужны ещё три формы, позволяющие пользователю редактировать данные в таблице. То есть в каждую из этих форм должны попасть записи таблицы, отвечающие каким-то определённым критериям (скажем, если какое-нибудь поле в записи null, то такая запись должна выводиться в форму, в форме открытыми для редактирования останутся только те поля, в которых null, а остальные - закрыты).

Форма Добавление -> Таблица <-> Формы отбор и редактирование
______________________ \|/
__________________Форма Просмотр

Если делать выборку записей через запросы, то при внесении изменений как изменить данные в главной таблице?

Добавление->Табл->Отбор по крит1;редакт->Итог-Просмотр
_________________->отбор по крит 2;редакт->
_________________->отбор по крит3;редакт->

Спасибо.

50 ответов в теме “Вопрос по Access.”

  1. 1
    Саня Какбэя ответил:

    на здоровье)

  2. 2
    Артём Новиков ответил:

    Точно не помню, как это делается (давненько аксессом не занимался), так что не судите строго))). но примерно так:
    1.создаешь несколько запросов с разными условиями выборки.
    2.создаешьформу на ней листбокс/группу радиобуттонов/т.п. со списком условий
    3.при обновлении листбокса пишешь процедуру, чтоб менялся источник данных формы
    можно, в принципе, при обновлении менять сразу сам запрос. но это геморройнее получится

  3. 3
    Леонид Максимов ответил:

    могу помочь, но сейчас лень. может завтра.

  4. 4
    Леонид Максимов ответил:

    ну вот сегодня и наступило :)

    объяснять как создавать формы не буду. перейду сразу к делу:

    1. если ваш запрос, который осуществляет отбор данных таблицы по критерию, будет обновляемым, то никаких дополнительных телодвижений совершать не потребуется. пример запроса, который можно указать в свойстве RecordSource (Источник записей) формы:

    select * from Ваша_таблица where Ваши_критерии

    если ваши критерии отбора достаточно просты (сравнение с константами или другими полями этой же таблицы, проверка на is null, и т.п.), то результирующий набор записей будет обновляемым.

    2. на событии Current (текущая запись) формы следует изменять доступность контролов. как-нибудь так:

    Private Sub Form_Current()
    On Error GoTo fin_
    Dim ctl As Access.Control
    For Each ctl In Me.Controls
    On Error Resume Next
    If VBA.Len(ctl.ControlSource) = 0 Then
    On Error GoTo fin_
    Else ' control has controlsource, value and ability to be enabled or disabled
    On Error GoTo fin_
    If ctl.Enabled Xor IsNull(ctl.Value) Then ctl.Enabled = Not ctl.Enabled
    End If
    Next ctl
    fin_:If VBA.Err Then VBA.MsgBox "Error in Form_Current." & vbCrLf & VBA.Err.Source & ": " & VBA.Err.Description, vbExclamation, Me.Name: Resume fin_
    End Sub

    простите за отсутствие выравнивания, но его съел вконтакте.ру (да оно и не обязательно для столь маленького куска кода).

    если ваша форма имеет подформы, то, я полагаю, обработку доступности контролов для подформ вы напишете сами.

    вместо доступности контролов можно использовать их блокировку – заменить в приведенном выше коде строчку
    If ctl.Enabled Xor IsNull(ctl.Value) Then ctl.Enabled = Not ctl.Enabled
    на
    If ctl.Locked Xor Not IsNull(ctl.Value) Then ctl.Locked = Not ctl.Locked

  5. 5
    Мария Барулина ответил:

    Леонид и Артём, спасибо! Завтра же опробую :-)

  6. 6
    personalised queen has arrived baby grow and hat set ответил:

    personalised queen has arrived baby grow and hat set…

    custom nike elite socks kd lebron kobe all sizes hoopswagg galaxywhite nike womens tanjunitems similar to custom bling womens nike air force 1 07 whitenew jordan 4 cactus jack luxury tshirt sneakermatch shirt for aj4 cactus jackcut sew…

Клуб программистов работает уже ой-ой-ой сколько, а если поточнее, то с 2007 года.