2017-02-08 12 views
2

Я нашел another answer on here, который обратился к нему, но это мне не помогло. Я проверил запрос, который я пытаюсь использовать, и я не вижу проблемы с каким-либо полем. Я также играл с тем, как я объявил и установил объекты и прочее, но это тоже не сработало.«Слишком мало ошибок параметров» при попытке открыть набор записей в Access с VBA

Dim dbsCurrent As DAO.Database 
Dim rst As DAO.Recordset 

Set dbsCurrent = CurrentDb 
Set qdf = CurrentDb.QueryDefs("qry_FilmZip") 
Set rst = qdf.OpenRecordset 'The error points to this line 

rad_full = rst!radius_full 

MsgBox ("rad_full:" + rad_full) 

Update: Я попытался дать метод .OpenRecordSet имя запроса, как это: Set rst = qdf.OpenRecordset("qry_FilmZip")

... но теперь это дает мне новую ошибку: Run-time error 3421: Data type conversion error. Кто-нибудь знает, что происходит? Ошибка указывает на ту же строку.

Я узнал, как решить вторую ошибку. Оказывается, я должен был сделать

For Each prm In qdf.Parameters 
    prm.Value = Eval(prm.Name) 
Next prm 

... но я не понимаю, что это на самом деле делает. Может ли кто-нибудь просветить меня?

SQL-:

SELECT 

    tbl_FilmZipInfo.ID, 
    tbl_FilmZipInfo.item, 
    tbl_FilmZipInfo.qty_per_unit, 
    tbl_FilmZipInfo.unit_of_measure, 
    tbl_FilmZipInfo.radius_core, 
    tbl_FilmZipInfo.radius_full, 
    tbl_FilmZipInfo.Lf_value_for_zipper, 
    tbl_FilmZipInfo.S_value_for_zipper, 
    tbl_FilmZipInfo.film_or_zip, 
    tbl_FilmZipInfo.Comments, 
    tbl_FilmZipInfo.physical_description 

FROM 

    tbl_FilmZipInfo 

WHERE 

    (((tbl_FilmZipInfo.item)=[Forms]![frm_FilmZip]![Text314])); 
+1

Это 'Set сначала = qdf.OpenRecordset() 'как указывает @Tom. – Gustav

+0

Ошибка «Слишком мало параметров» указывает, что запрос ожидает того параметра, который он не получил. Я предлагаю вам отправить SQL, вот где ожидается параметр ... – marlan

+0

@marlan добавил SQL – user7389351

ответ

2

Источник: https://msdn.microsoft.com/en-us/library/office/ff820966.aspx

Единственный обязательный аргумент здесь название записей, которые вы хотите открыть.

expression .OpenRecordset(Name, Type, Options, LockEdit)

В запросе параметров, как ваша, вам нужно использовать следующий синтаксис:

Dim dbs As DAO.Database 
Dim qdf As DAO.QueryDef 'You don't dim your qdf 
Dim rst As DAO.Recordset 

Set dbs = CurrentDb 

'Get the parameter query 
Set qfd = dbs.QueryDefs("qryMyParameterQuery") 

'Supply the parameter value 
qdf.Parameters("EnterStartDate") = Date 
qdf.Parameters("EnterEndDate") = Date + 7 

'Open a Recordset based on the parameter query 
Set rst = qdf.OpenRecordset() 'Note the brackets here 

Вы также можете попробовать следующий вид здесь:

Dim dbs As DAO.Database 
Dim rsTable As DAO.Recordset 
Dim rsQuery As DAO.Recordset 

Set dbs = CurrentDb 

'Open a table-type Recordset 
Set rsTable = dbs.OpenRecordset("Table1", dbOpenTable) 

'Open a dynaset-type Recordset using a saved query 
Set rsQuery = dbs.OpenRecordset("qryMyQuery", dbOpenDynaset) 
+0

Сохраненный запрос, который я использую, не запрашивает параметр. Для одного из полей я беру значение из формы, используя поле «Cirteria» (в Design View). Это то же самое, что и параметр? – user7389351

+0

Если запрос не может получить доступ к значению из формы, он будет рассматривать это поле как параметр. Загружена ли эта форма? это значение, где должно быть? – marlan