2014-01-16 28 views
0

我在我訪問下面的VBA代碼。分配控制源動態地從不同的記錄

Dim subform As Object 
Dim formFilter As String 

formFilter = "..." 'a SQL statement 

Set subform = Me!my_subform.Form 
subform.RecordSource = formFilter 

subform.field1.ControlSource = "f1" 
subform.field2.ControlSource = "f2" 
subform.field3.ControlSource = "f3" 

Dim db As Database 
Dim rs As Recordset 

Set db = CurrentDb 
Set rs = db.OpenRecordset("SELECT TOP 1 f4 FROM my_table " _ 
          & "WHERE tableF1= '" & [f1] & "' AND tableF2 = '" & [f2] & "' " _ 
          & "ORDER BY tableF5 DESC") 
subform.field4.ControlSource = rs(0) 

我已經第一次綁定我的第3場在子窗體到我的記錄源的領域。然後我需要將第四個字段綁定到不同的記錄集。此記錄集必須引用我的子表單的前兩個字段。

不過,我有一個運行時錯誤2465.訪問不能參照以場[F1]和我OpenRecordSet語句[F2]。

我應該怎樣解決這個問題?

我用這種形式在數據表視圖。所以我需要引用field1和field2的單個值,但是必須鏈接整列記錄。

非常感謝。

+0

您可以將窗體未綁定到兩個不同的記錄。您應該能夠將窗體綁定到該訪問使用表兩種不同的表中的SQL語句加入一個單一的記錄。但請注意,在其SQL中使用JOINS的記錄集通常是隻讀的。 – HK1

+0

@ HK1。謝謝。但是我不能使用JOIN,因爲我的field4有多個匹配的記錄。使用JOIN會給我重複的field1,field2和field3。這就是爲什麼在我的第二個記錄集中,我只需要選擇前1行。 – got2nosth

+0

而不是在問題中添加解決方案,您應該將其作爲答案發布。 – Flexo

回答

0

(從早期的編輯的問題,因爲回滾:)

顯然,在這種情況下,解決方案是使用下面的代碼在On Load事件處理程序子窗體代替所述主要形式

Dim db As Database 
Dim rs As Recordset 

Set db = CurrentDb 
Set rs = db.OpenRecordset("SELECT TOP 1 f4 FROM my_table " _ 
          & "WHERE tableF1= '" & [f1] & "' AND tableF2 = '" & [f2] & "' " _ 
          & "ORDER BY tableF5 DESC") 
subform.field4.ControlSource = rs(0) 

因爲[F1]和[F2]控制s在子窗體上,因此不能從主窗體的類模塊代碼中看到。