Условный формат MS Access Subform, основанный на данных таблицы - PullRequest
0 голосов
/ 29 декабря 2018

Моя база данных имеет представление формы для лаборатории, чтобы вводить результаты своих тестов в каждую производимую нами партию.У меня есть запрос в качестве источника данных Subform, и я использую поле со списком дат, чтобы ребята из лаборатории могли увидеть производство за день.Моя проблема заключается в том, что когда они записывают значение теста (скажем, пакет 5, продукт A, результат теста = 10), мне нужна подчиненная форма для выполнения условного форматирования на основе спецификации min / max, расположенной в другой таблице.Скажем, в этой таблице указано, что продукт А допускает диапазон от 11 до 15.Затем, когда техник пишет 10, ему следует предложить поместить на карантин продукт.Один простой способ - пометить ячейку жирным красным цветом.

Это мой макет Subform:

Product | Batch #  |  Test result

Мой лист спецификаций выглядит примерно так:

Product | Min | Max

Я попытался использовать DLookup безуспешно, возможно, синтаксис неправильный.

Любые рекомендации о том, как справиться с этим?

Одна хорошая идея, которая пришла мне в голову, это иметь кнопку для автоматического уведомления моего качественного парня.

Спасибо.

  • Обновлено для простоты понимания

Ответы [ 2 ]

0 голосов
/ 30 декабря 2018

Вы можете использовать Form_BeforeUpdate для проверки / условного форматирования данных

Приведенный ниже код ограничит значения PH, если они выходят за пределы диапазона, определенного в таблице спецификации продукта.Точно так же вы можете определить для других полей.

Поместите этот код в подчиненную форму:


Private Sub Form_BeforeUpdate(Cancel As Integer)

    Dim pH_Min As Double, pH_Max As Double

    If Nz(Product, -1) <> -1 And Nz(Me.Batch__, "") <> "" And Nz(Me.pH, -1) <> -1 Then

        pH_Min = DLookup("[pH Min]", "Product Specification", "[Product Code]=" & Product)
        pH_Max = DLookup("[pH Max]", "Product Specification", "[Product Code]=" & Product)


        If Me.pH.Value >= pH_Min And Me.pH.Value <= pH_Max Then
            'no action
        Else
            MsgBox "Invalid Value", vbInformation
            Cancel = True
        End If

    End If
End Sub
0 голосов
/ 29 декабря 2018

Поле идентификатора Autonumber в Products установлено как первичный ключ, но поле Product в Batch является текстовым.Замените на число длинного целого типа.Это правильно сделано в таблице [Спецификация продукта].

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

SELECT Batch.*, [Product Specification].*
FROM [Product Specification] RIGHT JOIN Batch ON [Product Specification].[Product Code] = Batch.Product
WHERE (((Batch.[Production Date])=[Forms]![TNA Batch Analysis]![Today Date]));

Измените RecordSource, чтобы он просто ссылался на LabBatchQuery вместо оператора SQL.Или вместо того, чтобы иметь динамический параметр в объекте запроса (я никогда не делаю), поместите его в оператор SQL RecordSource.SELECT * FROM LabBatchQuery WHERE [Production Date]=[Forms]![TNA Batch Analysis]![Today Date];

Правила условного форматирования будут выглядеть следующим образом: Value Is Not Between [pH Min] And [pH Max]

Измените код AfterUpdate текстового поля [Today Date] на: Me.[LabBatchQuery subform].Requery

Советовать не использоватьпробелы, ни знаки препинания / специальные символы (подчеркивание только исключение) в соглашении об именах.

Также не рекомендуется устанавливать поиск в таблицах.

Если у продуктов и [спецификации продукта] есть отношение 1 к 1,почему бы не объединить как 1 стол?

...