2016-04-29 194 views
0

我正在創建一個MS Access報告。我遇到了一個小問題,我不知道哪裏出了問題。所以我想要做的是MS ACCESS vba - error

1)從查詢中選擇所有東西(查詢需要「TO」和「FROM」日期,我將這些值傳遞給frmX,然後在查詢中引用它們)。當我用frmX打開時自己運行查詢 - 它運行良好。 2)我試着去改變數據 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中的日期),它工作正常。

請幫我一把!

所以我做了這個作爲Heinzi幫助我..仍然得到同樣的錯誤什麼是錯的??????

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

幾乎沒有。只要刪除當前示例的最後兩行(您已經在第6行中設置了「rs1」,不需要再次打開它)。 – 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