2016-08-09 58 views
1

我正在處理一個爲員工保存並顯示cources的數據庫,每個員工都有不同的日期,他/她必須在再次具體的課程。我做了幾個包含所有信息的表格。我可以在窗體中顯示信息,這個窗體包含幾個按鈕,可以讓我在不同的查詢之間進行選擇。所有查詢以相同的格式輸出相同類型的數據。爲了便於參考,我將稱這種形式爲FormAVBA:不會允許我在Microsoft Access中更改另一個表單的RecordSource

這一切工作正常,但幾個小時前,我添加了一個按鈕,應該允許我更新某個記錄的信息。這種更新以不同的形式發生,我們稱之爲FormB。在過去的情況下,我爲每次訓練都使用了一種特定的形式,但我認爲這是每一次都沒有效率。我做了一個可以顯示每個查詢信息的表單。我遇到的問題是每當我按下按鈕更新某個記錄時。它總是在查詢/表單中顯示頂部記錄的信息。我一直堅持這幾個小時,我只是不能得到它的工作。如果我手動將RecordSource的FormB設置爲正確的查詢,它就像它應該的那樣工作。但是這需要我製作很多相同的表格。

我會嘗試鏈接所有我認爲相關的代碼。如果需要其他東西,請說出來。

放在備考上的更新按鈕使用的代碼:

Private Sub btnUpdate_Click() 
Dim stDocName As String 


If Forms!FormA.RecordSource = "QryFG" Then 

    stDocName = "FormB" 

    ' we open first the form: 
    DoCmd.OpenForm stDocName, , , "peoplesoftnr = " & Me!PeopleSoftNr 

    ' we then set up it's RecordSource: 
    Forms!FormB.RecordSource = "QryFG" 

End If 

這個if語句重複所有不同的訓練五次,他們都是一樣的,所以我將不包括在他們這個帖子。

代碼填充我的文本框中的我的FormB。但它總是挑選最高紀錄。即使我按下不在同一行的按鈕(FormA)。當我註釋掉以下行:

' Forms!FormB.RecordSource = "QryFG": 

,並手動設置QryFG爲FormB的記錄源,它的作用和應該做的。但通過這樣做,我將不得不創造出很多相同的形式。我希望有更好的方法來做到這一點。預先感謝您的時間和精力。我的母語不是英語,所以請忽略拼寫和語法錯誤;)。

再次感謝!

Joeri Rommers

回答

0

通過設置窗體的記錄,你會覆蓋您以前在DoCmd.OpenForm設置過濾器,因此它顯示的QryFG所有記錄,從第一個開始。

有多種解決方法,例如

' Open without filter 
DoCmd.OpenForm stDocName 
' Limit recordsource to current record 
Forms!FormB.RecordSource = "SELECT * FROM QryFG WHERE peoplesoftnr = " & Me!PeopleSoftNr 

或更改記錄源後置過濾器:

DoCmd.OpenForm stDocName 
With Forms(stDocName) 
    .RecordSource = "QryFG" 
    .Filter = "peoplesoftnr = " & Me!PeopleSoftNr 
    .FilterOn = True 
End With 

如果表單「閃爍」,而這樣做,你可以用WindowMode:=acHidden打開它,然後更改記錄源/過濾器後,將其設置爲.Visible = True

+0

這兩種解決方案都很棒!非常感謝,你救了我! –

相關問題