2016-04-21 58 views
0

我有一個基於SQL Server(ODBC)鏈接表的Access數據庫。 主窗體基於SQL Server表,主鍵字段爲PRJ_ID。 每個記錄都有一個整數字段,稱爲MASTER_PRJ_REF它可以包含同一記錄的PRJ_ID或同一表的另一記錄。MS Access - 基於同一表但不同記錄的表單和子表格

基本上,我可以在同一個表中有一個「主」記錄和幾個「奴隸」記錄。 我還指定,在SQL Server中,我創建了兩個字段之間的一對多關係。

我想使用一個子窗體來顯示並最終修改「主」記錄的某些字段,但父窗體顯示「從」記錄。 我所做的是與此有關創建窗體:

Parent form: PRJ_ID 
Sub form: MASTER_PRJ_REF 

問題是,子窗體顯示父窗體相同的記錄,而不是引用的一個。所以,它似乎不是跟隨我的關係,而是跟隨PRJ_ID到PRJ_ID的關係。

爲什麼關係不起作用?

在同一張表的兩個字段之間建立關係是否正確?

+0

我相信_MASTER_PRJ_REF_應該是空的,如果記錄是頂級記錄。 – Gustav

回答

0

我不知道爲什麼Access會搞砸,因爲我總是用VBA和純SQL自己做事情,而且從不依賴Access內置功能,這通常更高效,並且避免了類似於「錯誤」你遇到的一個。

所以如果你想像我這樣的代碼,這是我可以提出的解決方法。

開始刪除表單上的父/子(如果您願意,主/從)關係。

current事件的主要形式,添加以下代碼:

dim strSQL as string 

' adapt the following SQL where needed : 
' - adapt table name 
' - Replace * with the columns you need 
' - surround the MASTER_PRJ_REF with quotes if it's not a INT 

strSQL = "SELECT * FROM thetable WHERE PRJ_ID=" & me!MASTER_PRJ_REF 

' That's the tricky part. 
' I assumed your subform is named SubForm1, adapt this. 
' You should assign your SQL to your subform record source 
' But access doesn't always accept all syntax following the context, 
' so choose one that work for you and remove the others. 

SubForm1.RecordSource = strSQL 
Form_SubForm1.RecordSource = strSQL ' ---> this one should work for sure if you have added any code to the subform (create the subform module, even if its empty. 
Forms("SubForm1").RecordSource = strSQL 
Me!SubForm1.Form.RecordSource = strSQL 
Forms!NameOfMainForm.SubForm1.Form.RecordSource = strSQL 

希望在5解決方案之一應該工作。

如果數據沒有立即更新,請添加以下內容,語法與您選擇的5個語句的語法相同。

SubForm1.Requery 
+0

這是一個很好的方法,我一定會明天再試!謝謝 –

相關問題