2016-08-17 10 views
0

私はMS Accessでフォームを開いた状態で実行するこのVBAコードを以下に示します。このコードは、いくつかのテーブルからすべてのレコードを削除し、保存された追加クエリ(かなり複雑です)を実行して、毎回新鮮なデータを使用してこれらのテーブルを再度入力します。"delete" SQL文字列とクエリの追加を実行する際のVBAの問題

コードシーケンス(PDSForecast)で更新された最後のテーブルに基づいてフォームが開き、そのテーブルの追加クエリが機能し、正しいデータがロードされることが確認されました。

問題は、そのテーブルに基づいたフォームを開いたとき(このコードが最初に実行される)、何らかの理由ですべてのレコードが#Deletedとして表示されるということです。このフォームが基づいているテーブルは、フォームが開く前に実行されるコードの最後の部分であり、動作します。誰かが私がここで間違っていることを理解するのを助けることができますか?

ありがとうございます!

Private Sub Form_Open(Cancel As Integer) 

    DoCmd.SetWarnings False 

    DoCmd.RunSQL "DELETE FROM ECIInventTransIntentDim" 
    DoCmd.RunSQL "DELETE FROM CurrentOH" 
    DoCmd.RunSQL "DELETE FROM CurrentOO" 
    DoCmd.RunSQL "DELETE FROM RequirementsAXAPTA" 
    DoCmd.RunSQL "DELETE FROM AvgWeeklyUsage" 
    DoCmd.RunSQL "DELETE FROM PDSForecast" 

    DoCmd.OpenQuery "Query_ECIINVENTTRANSINVENTDIM" 
    DoCmd.OpenQuery "Query_CURRENTOH" 
    DoCmd.OpenQuery "Query_CURRENTOO" 
    DoCmd.OpenQuery "Query_REQUIREMENTSAXAPTA" 
    DoCmd.OpenQuery "Query_AVGWEEKLYUSAGE" 
    DoCmd.OpenQuery "Query_PDSFORECAST" 

    DoCmd.SetWarnings True 

End Sub 
+1

追加クエリの後に 'Me.Form.Requery'という形を単純に再クエリーします。 – Parfait

答えて

0

フォームがデータテーブルにバインドされているようです。一連のクエリを実行してから再バインドする前にフォームのバインドを解除する必要があります。あなたのコードは次のようになります:

frmMain.DataSource = nothing 
DoCmd.SetWarnings False 
DoCmd.RunSQL "DELETE ..." 
... etc. 
DoCmd.SetWarnings True 
frmMain.DataSource = "myTable" 
関連する問題