2014-01-14 46 views
1

我有一個綁定到SQL語句的子窗體。在子表單中,我有幾個文本框綁定到這個SQL的字段。但是,我有另一個文本框需要綁定到來自不同SQL語句的字段與第一個條件。我的代碼如下所示:如何設置來自SQL的文本框的控件源

Dim subform As Object 
Dim formFilter As String 

formFilter = "SELECT * FROM my_table_1" 
Set subform = Me!my_subform.Form  
subform.RecordSource = formFilter 

subform.field1.ControlSource = "tb1f1" 
subform.field2.ControlSource = "tb1f2" 
... 
subform.f3.ControlSource = "= SELECT TOP 1 tb2f3 FROM my_table_2 WHERE tb2f1 = '" & [tb1f1] & "' AND tb2f2 = '" & [tb1f2] "' ORDER BY tb2f4" 

我不能直接在這裏使用DLOOKUP函數,因爲我需要對錶結果進行排序。

在此先感謝您的幫助。

+0

那是subform.f3一個簡單的顯示領域? – HelloW

+0

@HelloW是的,它僅用於顯示。我不打算讓用戶直接編輯這個表單。 – got2nosth

回答

0

我想我會簡單地創建一個小函數去獲得你想要的結果。這可能是最好的,只需在你自己的函數中重新修改DLookup並添加排序,但我不會這樣做。
首先是表單代碼。注意我沒有設置記錄源,只是可能不是你想要的值。

subform.f3 = fGet_tb2f3([tb1f1], [tb1f2]) 

然後函數代碼(把自己的錯誤處理)

Public Function fGet_tb2f3(tblf1 as String,tblf2 as String) as String 
    Dim rst as dao.recordset 
    Dim db as database 
    set db = currentdb 
    set rst = db.openrecordset("SELECT TOP 1 tb2f3 FROM my_table_2 WHERE tb2f1 = '" & tb1f1 & "' AND tb2f2 = '" & tb1f2 "' ORDER BY tb2f4",dbopensnapshot 
    if not rst is nothing then 
     if not rst.eof then fGet_tb2f3 = rst!tb2f3 
     rst.close 
     set rst = nothing 
    end if 
    db.close 
    set db = nothing 
end Function 
+0

@HellowW感謝您的建議。我試過你的方法。但訪問再次提示我錯誤2465。在[subform.f3 = fGet_tb2f3([tb1f1],[tb1f2])''語句中找不到字段[tb1f1]和[tb1f2]。 [tb1f1]和[tb1f2]只是我的子表單的記錄源中的兩個字段。我在這裏錯過了什麼? – got2nosth

+0

@ got2nosth您正在引用的字段位於子窗體中。我的代碼沒有反映出來。這是一次級聯形式還是單個記錄?如果子窗體一次只有一條記錄,最好在'on current'事件的子窗體中運行此代碼。 – HelloW

+0

我的子表單是一個數據表。我試圖在當前事件中調用它。如果我像這樣'Me.field4 = getLatestRemark([tb1f1],[tb1f2])'',我仍然得到錯誤2465。但它似乎工作,如果我直接設置controlsource像'Me.field4.ControlSource =「= getLatestRemark([tb1f1],[tb1f2])」'。但是,現在的問題是,無論何時單擊子窗體中的任何位置,field4列都會刷新。無論如何禁用此刷新操作? – got2nosth

0

您不能將綁定到控件在同一窗體上的2個不同的記錄集。你唯一能做的就是pull來自2個不同記錄集的數據,但這可能不是做任何事情的最佳方式。

爲了做到這一點,您必須創建第二個記錄集並在其中獲取該值。就像:

Dim db as Database 
Dim rec as Recordset 

Set db = CurrentDB 
Set rec = db.OpenRecordset("SELECT TOP 1 tb2f3 FROM my_table_2 WHERE tb2f1 = '" & [tb1f1] & "' AND tb2f2 = '" & [tb1f2] "' ORDER BY tb2f4") 

Me.MyControlName = rec(0) 
+0

感謝您的分享。但是我在這裏遇到了運行時錯誤2465。看來Access無法在OpenRecordset語句中正確引用我的字段[tb1f1]和[tb1f2]。這裏是我的代碼'Set db = CurrentDb Set rs = db.OpenRecordset(「SELECT TOP 1 root_cause FROM Shipment_Remark」_ &「WHERE plant ='」&[plant]&''AND shipment_no ='「&[shipment_no] &''ORDER BY update_time DESC「) subform.text_root_cause_field.ControlSource = rs(0)'[plant]和[shipment_no]是我的子表單的記錄源中的兩個字段。 – got2nosth

相關問題