Одно системное / нефункциональное требование для этого проекта заключается в том, что он должен быть в MS Access (не моя чашка чая уже много лет, а значит, и ржавый), а одно функциональное требование:
В одной таблице хранится любое количество проектов, однозначно идентифицированных по категории проекта и порядковому номеру, специфичному для категории проекта.
Т.е. каждая категория проекта должна поддерживать последовательность автоматической нумерации:его собственные проекты, в этой таблице, такие как: (prjct_ctgry_id, ctgry_seq_id).Например: ((1,1), (1,2), (1,3), (2,1), (3,1), (3,2), (5,1), (5,2), (5,3) ...).
Запрос 'передает' prjct_ctgry_id от пользователя через форму.
Запрос затем проверяет, является ли это первой записью этогоprjct_ctgry_id, проверяя, является ли порядковый номер NULL;если true, он должен добавить int 1 в качестве первого ctgry_seq_id.Последующие порядковые нумерации используют MAX порядкового номера конкретной категории проекта и добавляют 1.
Проблема с самой первой записью новой категории проекта.Запрос вставляет project_category_id, ОК, но не заполняет поле category_seq_id (т. Е. Оно остается пустым).
Вторая вставка той же категории проекта работает, как и должна, но заполняет поле ctgry_seq_id 1;тогда все остальные вставки работают правильно.Итак, 1-я запись: (1, NULL);вторая запись (1,1);третья запись (1,2) и т. д.
Т.е.: сбой происходит только при первой записи каждой новой категории проекта.
Я пробовал несколько решений, но никто не работал для меня,использование «простого» SQL (не SQL в VBA).
Любые советы будут приветствоваться.Заранее спасибо.Вот запрос с жестко запрограммированным для моего тестирования project_category_id = 1:
INSERT INTO p_ctgry_seq ( prjct_ctgry_id, ctgry_seq_id )
SELECT pc.prjct_ctgry_id,
(SELECT MAX(IIf( IsNull( ctgry_seq_id ),
( SELECT COUNT( ctgry_seq_id )+ 1 FROM p_ctgry_seq WHERE prjct_ctgry_id=1 ),
( ctgry_seq_id ) + 1 ))
FROM p_ctgry_seq
WHERE prjct_ctgry_id = 1 ) AS sqnc
FROM project_ctgry AS pc
GROUP BY pc.prjct_ctgry_id
HAVING (((pc.prjct_ctgry_id)=1));