2016-04-29 2 views
0

Я создаю отчет MS Access. Я столкнулся с небольшой проблемой, и я понятия не имею, где это происходит. Итак, что я пытаюсь сделать, этоMS ACCESS vba - error

1) Выберите все из запроса (для запроса требуются даты «TO» и «FROM». Я передаю эти значения в frmX, который затем ссылается на запрос). Когда я запускаю запрос самостоятельно с открытием frmX - он работает нормально. 2) Im пытается изменить некоторые значения в данных 3) Вставьте новые значения в tempTable1

Вот мой код:

dim rs1 as DAO.Recordset 
dim rs2 as DAO.Recordset 
CurrentDb.Execute "DELETE FROM [tempProvider-Detail]" 

'Repopulating temp table 
DoCmd.OpenQuery "qryProvider-FINAL" 

'Input Source 
Set rs1 = CurrentDb.OpenRecordset("Select * from [qryProvider-Final]", , dbOpenSnapshot) 

'Target Source 
Set rs2 = CurrentDb.OpenRecordset("Select * from tempProvider-DETAIL", dbOpenDynamic) 

Что интересно здесь то, что он не вешает на DoCMD.OpenQuery - однако, когда я добираюсь до установки rs1 ......, тогда он говорит мне, что он ожидает 2 параметра. Я не знаю почему - поскольку запрос уже открыт - и он отлично работает, когда я пытаюсь открыть его сам по себе, он открывается (с датами в frmX, которые я ссылаюсь в запросе).

Пожалуйста, помогите мне!

Итак, я сделал это, так как Хайнци помог мне .. все еще получал ту же ошибку. Что не так ??????

DoCmd.OpenQuery "qryProvider-FINAL" 

Set qdf = CurrentDb.QueryDefs("qryProvider-FINAL") 
qdf.Parameters(0) = [Forms]![frmX]![txtFrom] 
qdf.Parameters(1) = [Forms]![frmX]![txtTo] 
Set rs1 = qdf.OpenRecordset 

strSQL = "SELECT * FROM [qryProvider-FINAL];" 

'Input Source 
Set rs1 = CurrentDb.OpenRecordset(strSQL, , dbOpenSnapshot) ---this is where it hangs up 
+0

Почти там. Просто удалите две последние строки вашего текущего примера (вы уже установили 'rs1' в строке 6, не нужно открывать его снова). – Heinzi

+0

@Heinzi - ОК, поэтому я останавливаюсь после установки rs1 = qdf.openRecordset? но я хочу убедиться, что все данные выбраны! – FatBoySlim7

+0

Мне нужно убедиться, что все это выбрано - так как я собираюсь пройти через набор записей и внести изменения, когда я иду. – FatBoySlim7

ответ

1

Вы не можете ссылаться на элементы управления формой при открытии набора записей с помощью CurrentDb.OpenRecordset. Это просто не поддерживается. Подробности можно найти в следующей статье MSDN:

Ответ в том, что Youre применение двигателя Jet в другом контексте здесь, и что делает все различия. Когда вы получаете данные из запроса параметра, который использует форму для подачи параметра через пользовательский интерфейс Access, как и в предыдущем примере, Access может анализировать указанное выражение и предоставлять значение Jet. Когда вы получаете данные из запроса параметра, который использует форму для подачи параметра через VBA, а не через форму, задействованы биты Access, которые управляют интерфейсом пользователя. Следовательно, Jet передает строку «[Forms]! [FrmSelectCountry]! [CboCountry]» вместо значения в cboCountry. Поскольку Jet не знает, как оценить выражение, он не может открыть набор записей.

+0

@ heinzi Что делать, если вместо этого я делаю что-то вроде dim strSQL в виде строки strSQL = "Select * from [qry];" и затем установите rs1 = currentdbo.openrecordset (strSQL, dbopensnapshot) – FatBoySlim7

+1

@ FatBoySlim7: Не имеет значения. Вам необходимо указать значения параметров * в коде *, как описано в статье, если вам нужно открыть набор записей в коде. – Heinzi

2

Будет ли эта работа:

Sub Test() 

    Dim db As DAO.Database 
    Dim qdf As DAO.QueryDef 
    Dim rst As DAO.Recordset 
    Dim prm As DAO.Parameter 

    Set db = CurrentDb 
    Set qdf = db.QueryDefs("qryProvider-FINAL") 
    For Each prm In qdf.Parameters 
     prm.Value = Eval(prm.Name) 
    Next prm 
    Set rst = qdf.OpenRecordset 

End Sub 
+0

Спасибо, @Heinzi помог мне. Я сохраню это для будущего использования! – FatBoySlim7