2016-04-29 21 views
0

私はMS Accessレポートを作成しています。私は小さな問題を遭遇し、どこが間違っているのか分かりません。だから私がやろうとしているのはMS Access vba - エラー

1)私はこれらの値をクエリで参照されるfrmXに渡して、クエリに "TO"と "FROM"の日付が必要です。 frmXを開いてクエリを実行すると、うまく動作します。データ 3でいくつかの値を変更しようと 2)イム)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

。現在の例の最後の2行を削除してください(6行目に 'rs1'を設定してありますので、再度開く必要はありません)。 – Heinzi

+0

@Heinzi - okだから私はset rs1 = qdf.openRecordsetの後で止まる?私はすべてのデータが選択されていることを確認したい! – FatBoySlim7

+0

レコードセット全体を移動して編集を行うので、すべてが選択されていることを確認する必要があります。 – FatBoySlim7

答えて

1

CurrentDb.OpenRecordsetでレコードセットを開くときにフォームコントロールを参照することはできません。それはちょうどサポートされていません。

答えはyoureのは、ここでは異なる文脈でJetエンジンを起動することであり、それはすべての違いを作る:詳細は、次のMSDNの記事で見つけることができます。前述の例のように、フォームを使用してAccessユーザーインターフェイス経由でパラメータを提供するパラメータクエリからデータを取得すると、Accessは関連する式を評価してJetに値を提供できます。フォームを使用する代わりに、フォームを使用する代わりにVBAを使用してパラメータを提供するパラメータクエリからデータを取得すると、ユーザーインターフェイスの問題を管理するAccessのビットが関与しません。結果として、JetはcboCountryの値の代わりに "[Forms]![frmSelectCountry]![cboCountry]"という文字列が渡されます。 Jetは式を評価する方法を知らないので、レコードセットを開くことができません。

+0

@ heinzi代わりに私は文字列strSQLとしてdim strSQLのような何かを行う場合は、 "選択* [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

関連する問題