2017-02-27 56 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