2017-02-27 23 views
0

上午所有,比較值跨表和收益匹配(SQL,VBA)

我想我可能失去了一些東西顯而易見的,所以我希望有人能輕推我在正確的方向。

我正在使用Excel 2010查詢使用DAO的Access 2010數據庫。我需要涉及兩張桌子,[缺席]和[工作人員]。前者包括缺席和員工姓名的詳細信息,後者包括員工的更多詳細信息,如其團隊經理。我目前可以查詢並返回有關Absence的信息,但沒有任何問題,但是,我需要擴展它以檢查Absence表中的工作人員姓名是否與Staff表中相應的Team Manager相關聯。因此,如果員工在「職員表」中列在該團隊經理下,那麼用簡單的英語就應該「給我所有這兩個日期之間缺席表的記錄」。

這裏是我到目前爲止的代碼(額外領域剝離出來的例子)的正常工作:

Sub QueryDatabase() 
Dim db As DAO.Database 'the database 
Dim rex As DAO.Recordset 'the recordset in which to place the data 

Set db = OpenDatabase(ActiveWorkbook.Path & "/DB.accdb", False, True, ";pwd=" & pw) 
Set rex = db.OpenRecordset("SELECT [RecordDate], [StaffName], FROM [Absence] WHERE [RecordDate] BETWEEN #" & dFromDate & "# AND #" & dToDate & "# ;") 

任何建議或指導,將不勝感激!

Snayff

+0

你有一個獨特的連接,或任何加入? – Fionnuala

+0

我還沒有設法得到任何聯合聲明來處理這個。 – Snayff

+0

除非你的桌子確實很小,否則你需要重新設計一點。 – Fionnuala

回答

1
  1. 始終打印的SQL查詢字符串。這使您可以在查詢執行之前檢查查詢。

  2. dFromDatedToDate已經在正確的格式,並且它們是否正確打印到SQL查詢(請參閱上一點)?

爲了讓您的「給我從缺少表中的所有記錄,這兩個日期之間,如果工作人員正在這個團隊經理中列出的人員表」你需要一個連接,像這樣:

SELECT Absence.name FROM Absence, Staff 
WHERE Absence.name = Staff.name 
    AND Staff.mananger = manager_name; 
+0

爲了提高速度,使用連接而不是笛卡爾產品非常重要。 – Fionnuala

+0

謝謝你的回答,保羅。我會測試它。 關於打印到一個字符串,我清理所有傳遞的信息之前,它的查詢,這相當於,對不對? 日期格式正確,打印正確,並返回預期值。 – Snayff

+0

@ Paul-Ogilvie你的建議奏效,非常感謝! – Snayff