2015-05-01 63 views
2

我想從下面的代碼'tblJobTitles'中的表中的表格中的值源。我想要獲得的值是'JobTitle'值,不幸的是,在控制框中,我不斷收到#Name?錯誤。我試圖adust的屬性,但everthing我試着給我同樣的錯誤。使用選擇查詢來源連接表的值

注意:如果我試圖在不將'tblContacts'連接到'tblJobTitles'並僅使用'tblContacts'的情況下執行此操作,則可以成功檢索窗體中字段的職位名稱,只是它返回數字唯一ID編號來自職位名稱表。是否可以重新格式化它以返回文本值?

sql_get = "SELECT tblContacts.*, tblJobTitles.* FROM tblJobTitles INNER JOIN (tblContacts INNER JOIN tblTeams ON tblContacts.Team = tblTeams.ID) ON tblJobTitles.ID = tblContacts.JobTitle WHERE [tblTeams].[team]= '" & cboDepartments.Value & "'" 
Me.frmstaticdatadepartments08.Form.RecordSource = sql_get 
+0

在'sql_get'之後寫一個'Debug.Print sql_get',幫助我們一個忙。在該線上放置一個斷點。讓我們知道它打印出什麼 –

+0

你想我把Debug.Print slq_get後面的'Me.frmstaticdatadepartments08.form.recordsource = sql_get'行? –

+0

不,請不要。在'sql_get'和表單記錄源指定之間 –

回答

2

#Name錯誤可以有幾個不同的來源。這意味着,因爲Access不能劃定一個字段或屬性:

  1. 它共享東西一個名字,不管是控制的名字 和控制源等
  2. 它無法找到您所指的字段(例如在此場景中)

因此,在您的查詢中,您說「給我所有來自這兩個表的所有信息」。

當您有2個相同的字段,並且您運行查詢並查看結果時,Access會將表名稱預先掛接到該字段。 (tblContact.JobTitletblJobTitle.JobTitle)。這是因爲它可以識別你在兩個表中有重疊(相同)的字段名稱,所以它需要將它們識別爲唯一值。你可能已經在控制源前添加了表名,但最好在你可以明確的地方進行。

當你在你的控制引用領域JobTitle,訪問不知道你指的是哪個領域,由於JobTitle你的表的兩個。這是有些人使用別名的原因,例如:tblContact.JobTitle AS ContactJobTitle, tblJobTitle.JobTitle AS [Job_Title]。這讓你非常明確地告訴Access究竟你指的是哪個字段。

從查詢中選擇字段時也應該明確。

SELECT Table.*已知存在性能問題,如果您在控件中使用這些字段(表中存在重疊),您將無法充分引用要選擇的字段。

感謝@HansUp以及更正。

希望這會有所幫助。

+1

查詢返回了一個名爲'tblContact.JobTitle'的字段和另一個名爲'tblJobTitle.JobTitle'的字段。他的控制源要求提供一個名爲JobTitle的字段。就Access而言,查詢結果集不包含名爲「JobTitle」的字段,因此出現名稱錯誤。這不是一個循環參考問題。 – HansUp

+0

@HansUp我認爲這是一個循環引用錯誤,因爲Access無法確定他所指的是哪個JobTitle?我確實明白你說的是什麼,可以看到我的話在這種情況下怎麼沒有意義 –

+1

通函是不同的。 'SELECT fld1&fld2 AS fld1'可能會觸發循環引用錯誤。 '#Name'錯誤僅僅是因爲查詢不包含名爲JobTitle的字段。如果他將控制源更改爲查找「BOGUS」,他會得到相同的錯誤。沒有關於它的通告。 – HansUp