Access не пытается определить Fields.Count
для кросс-таблицы QueryDef
, которая включает в себя объявление PARAMETERS
.
Например, предложение WHERE
в этом запросе дает мне 4 различных значения для q.Options_Value
...
TRANSFORM Count(*) AS Expr1
SELECT q.PersonName
FROM qryStep1 AS q
WHERE q.Options_Value <= 5
GROUP BY q.PersonName
PIVOT q.Options_Value;
Так что QueryDef.Fields.Count
показывает мне 5 (PersonName
плюс 4 столбца для различных Options_Value
значений).
Однако, если я просто объявлю параметр, на который даже ссылка не ссылается в оставшейся части SQL ...
PARAMETERS upper_limit Long;
TRANSFORM Count(*) AS Expr1
SELECT q.PersonName
FROM qryStep1 AS q
WHERE q.Options_Value <= 5
GROUP BY q.PersonName
PIVOT q.Options_Value;
По-видимому, Access решает, что не может знать количество столбцов, когда задействован параметр. И в этом случае он показывает мне ноль для QueryDef.Fields.Count
.
. Я предлагаю вам подсчитать количество столбцов запроса, открыв набор записей из запроса и получив Fields.Count
набора записей, как это ...
Dim db As DAO.Database
Dim qdf As DAO.QueryDef
Dim rs As DAO.Recordset
Set db = CurrentDb
Set qdf = db.QueryDefs("YourQueryName")
Set rs = qdf.OpenRecordset
Debug.Print "Query columns: " & rs.Fields.Count
Хотя ваш пример SQL объявил ссылку на форму как PARAMETER
, она фактически не использовалась в остальной части запроса. Однако, когда вы вызываете OpenRecordset
для запроса, который содержит ссылку на форму, Access будет обрабатывать его как параметр, для которого вы не указали значение. В таком случае, перед тем, как вызвать OpenRecordset
...
qdf.Parameters("Forms!Main!MB51_Created").Value = Forms!Main!MB51_Created.Value
, укажите это значение