我正在尝试确定如何使用Access 2013处理此查询的最佳方法。我有一个客户端表,其中包含以下内容:
clientID fName lName admissionDate dischargeDate
1 John Doe 05/06/2014 06/27/2014
2 Jane Doe 04/24/2014 05/15/2014
3 Steven Smith 05/15/2014 NULL/Empty
4 Chris Davis 06/12/2014 NULL/Empty然后有一个WeeklyProgressNotes表,用于负责审计客户图表的人员。它不包含实际的周进度备注,它只包含一个是/否字段和一个日期字段,用于表示周进度备注的完成日期。如下所示:
noteID completed dateCompleted clientID
1 yes 05/08/2014 1
2 yes 05/14/2014 1
3 yes 04/25/2014 2我正在创建一个表单,审计师可以打开它来确定她需要为每个客户检查哪些周,以查看他们是否在那一周完成了每周进度笔记。周运行Mon - Sun,如果她还没有检查和确认该周,则WeeklyProgressNotes表中将没有记录。所以表单基本上看起来像这样:
fName lName week completed date clientID(hidden)
John Doe 5/19/14-5/25/14 Checkbox Null 1
John Doe 5/26/14-6/1/14 Checkbox Null 1
John Doe 6/2/14-6/8/14 Checkbox Null 1
John Doe 6/9/14-6/15/14 Checkbox Null 1
John Doe 6/16/14-6/22/14 Checkbox Null 1
John Doe 6/23/14-6/29/14 Checkbox Null 1
Jane Doe 4/28/14-5/4/14 Checkbox Null 2以此类推......
我曾经考虑过创建一条SQL语句来选择所有客户端,然后创建一个函数来确定他们在特定周内的入院日期和出院日期,然后使用另一条SQL语句创建一个循环,该循环包含所有周的BETWEEN子句,并确定WeeklyProgressNotes表中是否有条目。如果不是,我会显示出上面的信息。我不确定是否有一种更简单,搜索密集度更低的方法。也许是一个SQL查询,它可以对一些循环进行裁剪。
发布于 2014-07-01 19:38:12
我解决这个问题的方法是创建一个新表。由于您希望将添加和释放日期之间的日期时间拆分为多行,因此我认为最好将客户端拆分为表中的多个记录。
下面的代码基于基本客户端表创建一个记录集。之后,它会创建您的临时表(由于时间不足,这里只填充了2个字段)。当您循环遍历原始表的记录集时,您将保留每一行,并将添加和释放之间的时间分成一周一块。
然后,一旦您填充了表,就可以很容易地基于该表和带有每周进度备注的表创建一个简单的查询。
我希望我的解释是足够的,请注意,我还没有测试代码。它很可能需要代表你进行一些调整。如果我手头有更多的时间,也许我可以稍后再看一下。
Sub showrecords()
Dim gvweek As String
Dim rs As Recordset
Dim rstemp As Recordset
Dim tdfNew As TableDef
gvweek = ""
Set tdfNew = CurrentDb.CreateTableDef("Tbl_Temporary")
With tdfNew
.Fields.Append .CreateField("fName", dbText)
.Fields.Append .CreateField("week", dbText)
End With
Set rs = CurrentDb.OpenRecordset("Clients")
With rs
Do Until .EOF
.MoveFirst
Do Until DateAdd("dd", 7, ![admissionDate]) > ![dischargeDate]
gvweek = ![admissionDate] & " - " & DateAdd("dd", 7, ![admissionDate])
Set rstemp = CurrentDb.OpenRecordset("Tbl_Temporary")
With rstemp
.AddNew
![fName] = rs![fName]
![week] = gvweek
.Update
End With
rstemp.Close
Set rstemp = Nothing
Loop
gvweek = ""
.MoveNext
Loop
End With
rs.Close
Set rs = Nothing
DoCmd.DeleteObject acTable, "Tbl_Temporary"
End Subhttps://stackoverflow.com/questions/24508039
复制相似问题