2016-12-16 4 views
-1

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

Я пытаюсь создать форму, которая будет вставлять заказы клиентов в планирование производства. Форма позволяет пользователям выбирать машину из таблицы списков машин, однако то, что мне нужно после этого, это найти последний номер задания для этой конкретной машины и показать следующий порядковый номер в текстовом поле; и вот где я застрял. Цель состоит в том, что, когда производственный пользователь добавляет заказ в базу данных, выбирая их машину, автоматически присваивается следующий доступный номер задания. Введенная информация будет сохранена в главной таблице планирования.

У меня есть построенный запрос, который вытягивает весь список комбинаций машин и заданий, поскольку моя цель состояла в том, чтобы создать макрос, который мог бы искать из этого списка, но пока я не получил никакого сцепления. Любая помощь/совет будут оценены!

+1

Добро пожаловать в SO, но я могу сказать, что вы не читали раздел «Как мне задать вопрос» на этом сайте, прежде чем делать свой первый пост.Вы даже не потрудились совершить 2-минутный тур по сайту. Пожалуйста, поделитесь своим соответствующим фрагментом кода, чтобы добраться до решения столько, сколько сможете. Предложите взглянуть на http://stackoverflow.com/help/how-to-ask перед публикацией снова. –

+0

Это возможно, но как мы можем вам помочь? Мы не знаем вашу структуру таблицы, тип данных и т. Д. Можете ли вы поместить скриншот вашей формы и данных таблицы (примеры данных). – harun24hr

ответ

0

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

Me.MyTextBox = DMax("JobField", "JobsTable") + 1 

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

1

Добро пожаловать в SO.

Мое предложение было бы создать таблицу для хранения порядковых номеров. Для этого примера назовем его ProdSeq, что означает Производственные последовательности. В рамках определения этой таблицы я бы использовал Data Macros (Access 2010 и выше), чтобы назначать последовательности по мере добавления записей. Я бы использовал уникальный индекс, чтобы не создавать дубликатов.

Таблица: ProdSeq (полевые определения)

  • MachineID (Number - Long) - Ссылки машина ID в машины Таблица
  • ProdSeq (Number - Long) - Увеличивается для каждой машины
  • OrderID (Номер - длинный) - Ссылки Номер заказа в заказе Таблица

Индексы
На вкладке ленты Design при проектировании ProdSeq таблицу, нажмите УКАЗАТЕЛЯХ кнопку.

  1. Создание индекса называется UniqueKey
    • Строка 1: Index Name = UniqueKey, поле Name = MachineID
    • Row 2: Index Name = Оставьте Blank, поле Name = ProdSequence
  2. Нажмите на строку 1, колонку 1 и установите следующие свойства индекса:
    • Primary = Yes
    • Unique = Yes
    • Ignore Nulls = No

Макросы данных
Под вкладке ленты Design при разработке ProdSeq таблицы, нажмите Создание данных Макросы, а затем Перед изменением кнопка. Введите следующий макрос данных: (Pastebin link)

Создаем до изменения макроса данных и установить его следующим образом:

If [IsInsert] Then 
    SetLocalVar 
      Name LatestProdSequence 
    Expression = 0 

    Look Up A Record In ProdSeq 
     Where Condition =[ProdSeqLookup].[MachineID]=[ProdSeq].[MachineID] And 
          [ProdSeqLookup].[LatestSeq] = True 
        Alias ProdSeqLookup 
     SetLocalVar 
       Name LatestProdSequence 
      Expression =[ProdSeqLookup].[ProdSequence] 
    SetField 
      Name ProdSeq.ProdSequence 
      Value = [LatestProdSequence]+1 
    SetField 
      Name ProdSeq.LatestSeq 
      Value = True 
End If 

Обратите особое внимание на тот факт, что только один SetLocalVar находится в пункте LookUpRecord. Используйте кнопку collapse/expand (-/+) на LookUpRecord, чтобы убедиться.

Создание После вставки макрос данных и установить его следующим образом: (Pastebin Link)

For Each Record In ProdSeq 
    Where Condition = [ProdSeqFlagFix].[MachineID]=[ProdSeq].[MachineID] And 
         [ProdSeqFlagFix].[LatestSeq]=True And 
         [ProdSeqFlagFix].[ProdSequence]<>[ProdSeq].[ProdSequence] 
    EditRecord 
     SetField 
       Name ProdSeqFlagFix.LatestSeq 
       Value = False 
    End EditRecord 

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

Форма
На вашей форме, когда пользователь выбирает машину и порядок, вы можете использовать VBA для того, чтобы проверить наличие существующей записи в ProdSeq, и принести удостоверение личности. Если запись не существует, вы можете ее создать, а затем вернуть идентификатор ProdSeq в форму.

Примечание: в зависимости от дизайна вам также может потребоваться создать макрос данных в таблице расписаний. Предположим, кто-то создает расписание с определенной машиной и заказом и резервирует производственный слот. Теперь предположим, что они меняют идентификатор заказа. У нас есть производственный слот, зарезервированный по ошибке. Поэтому, если это применимо, вам также понадобится макрос данных AfterUpdate в таблице Scheduling, который проверяет, существует ли [old] .OrderID <> [Schedule] .OrderID - и если они отличаются, чтобы удалить слот Production из графика таблицу и таблицу Prod Sequence.