2012-02-27 39 views
0

在MS Access中,我創建了一個主表單和一個子表單並且處於一對多關係的數據庫,然後我在主表單上創建了一個搜索框,應該能夠在兩個主要和子形式的領域進行搜索,我可以做到這一點。現在,當我搜索表單時顯示搜索到的記錄,但問題是我的主窗體上的主窗體控件(保存,新建,刪除,下一個,上一個等)的非運行正在運行。 這將是我的榮幸,引導我在這個問題上...謝謝,搜索在我的MS Access表格中創建問題

+0

需要更多信息 - 您的搜索框使用什麼方法?這聽起來像是搜索框將記錄集下的主要表格過濾爲一條記錄。所以,不能向前或向後導航是正常的。就新記錄而言,這可能是一些事情。您的主窗體設置可能被設置爲不允許添加,或者您可以將底層記錄集更改爲只讀等。 – gangreen 2012-02-27 05:47:37

+0

在搜索框的更新方法後,我完成了以下三行查詢: 1.dim qry =「select parenttbl 。*,childtbl。*來自parenttbl內部連接cildtbl,位於parenttbl.id = childtbl.fid,其中parenttbl.id =「&Me.mysearchbox.text&」;「 2.Me.RecordSource = qry 3.Me.FilterOn = True – Nabalad 2012-02-27 06:08:30

+0

是否有理由改變主窗體上的記錄源以包含子表?如果您的mainform /子表單中的子/主屬性設置正確,則只需要篩選主窗體上的記錄。從你的過濾器中刪除childtbl,看看是否會影響你的保存能力。 – gangreen 2012-02-27 06:19:33

回答

0

重新導航

根據您使用搜索的方法,你將不能夠向前或向後導航。如果您想要前後導航,則需要指定搜索範圍。例如,而不是用ID 123搜索一個記錄,您將需要搜索的記錄,即一個範圍,ID 123和ID之間234

重新保存

你並不需要明確保存綁定表單上的記錄(直接綁定到記錄源的表單)。您只需更改數據,然後繼續。一旦你繼續,你的數據將被保存 - 只要不違反表約束。

重新搜索

當您在訪問主窗體/子窗體,在2種形式通過兒童/主屬性相關。因此,如果您在主窗體中搜索特定記錄,則通常不需要擔心篩選子窗體。使用類似於您在評論中有這將是一個方法:

dim qry As String 
qry = "select parenttbl.* from parenttbl where parenttbl.id=" & Me.mysearchbox.text &";" 
Me.RecordSource = qry 

通過在原來的代碼加入子表,你可能混淆訪問救能力,但我對此表示懷疑。我沒有測試它,但我不認爲在更改記錄源後需要將filteron屬性設置爲true。見filteron是如何使用在這個崗位由艾倫·布朗http://allenbrowne.com/ser-28.html

重新FilterOn 雖這麼說,你也許可以調整自己的使用filteron屬性設置爲「搜索」爲您所需的記錄,那麼你或許可以打開filteron屬性設置爲False,然後在記錄集中向前和向後導航。我沒有測試它。

編輯:下面是一個例子,當到FilterOn屬性設置爲false:

Me.FilterOn = False 
DoCmd.GoToRecord , , acNext 

對於這個工作,你需要指定SQL查詢的ORDER BY條款,您的主要形式是必然。否則,您可能無法以您期望的方式向後和向前導航。

+0

我只是簡單地做了兩件事來過濾基於它的父母的ID,它的工作太多,但現在,當我去,點擊**下一步**按鈕,它不會帶來下一個記錄1.我在我的搜索框:'Me.Filter =「ID =」「」&Me.mySearchBox&「」「」 Me.FilterOn = True ' 和2.我在下一個nevigation按鈕中做了什麼:'DoCmd.GoToRecord,, acNext'我只是認爲至少它應該是工作,然後我會看到與其他選項。 – Nabalad 2012-02-27 07:51:23

+0

請參閱我答案底部的編輯。另外,我更改了我爲更改記錄源而編寫的示例代碼,以顯示聲明變量的正確方法。變量'qry'是您聲明它的方式* Variant *。順便說一句,你不需要一個變量來做到這一點。您可以直接將字符串傳遞給'me.recordsource' – gangreen 2012-02-28 01:22:19

+0

我是否回答您的問題?我注意到你在這個網站上提出了幾個問題,但沒有把一個問題標記爲「回答」。 – gangreen 2012-02-29 01:11:33