Сообщение об ошибке довольно наглядно.Access не поддерживает подзапросы без основного запроса, поэтому измените синтаксический раунд, чтобы использовать один из подзапросов в качестве основного запроса:
INSERT INTO contentTbl(crateID,itemID,qty)
SELECT crateTbl.crateID,(SELECT itemTbl.itemID FROM itemTbl WHERE itemTbl.itemID = ?), ?
FROM crateTbl WHERE crateTbl.crateID=?
Обратите внимание, что параметры передаются по позиции, и для перезаписи этого запроса требуетсячтобы изменить порядок параметров:
cmd.Parameters.Add(new OleDbParameter("itemID", txtItem.Text));
cmd.Parameters.Add(new OleDbParameter("qty", txtQty.Text));
cmd.Parameters.Add(new OleDbParameter("crateID", txtCrate.Text));
Если вам не нравится синтаксис основного запроса / подзапроса, вы также можете пойти на перекрестное объединение:
INSERT INTO contentTbl(crateID,itemID,qty)
SELECT crateTbl.crateID, itemTbl.itemID, ?
FROM crateTbl,itemTbl
WHERE crateTbl.crateID=? AND itemTbl.itemID = ?
(Порядок параметровнужно снова настроить, но вы можете это понять).