SQL Select后匹配上一条记录

时间:2015-05-31 18:02:26

标签: sql access-vba ms-access-2010

我正在尝试构建此代码,但我不知道如何处理此代码的第二部分。一开始SQL中的代码选择了一个记录的caseid,程序和来自表Intake WHERE的语言为Null。这工作得非常好。

一旦选择了记录,我想要另一个代码来检查所选记录的caseid是否与PREVIOUS记录的caseid匹配。这是我迷失的地方。我在这里:

Set db = CurrentDb

strSQL = "SELECT TOP 1 IntakeID, caseid, [Program], [language] FROM Intake WHERE assignedto Is Null"
Set rs = db.OpenRecordset(strSQL, dbOpenDynaset)

i = rs!caseid
If DLookup("caseid", "Intake", i) Then

Call GetPreviousWorker

我知道我没有正确使用DLookup,我试图找到一个匹配的记录并且明显失败了哈哈。感谢任何可以提供帮助的人:)

3 个答案:

答案 0 :(得分:2)

我认为IntakeIdIntake表中递增1的主键

所以您的要求可以达到以下

Set db = CurrentDb

strSQL = "SELECT TOP 1 IntakeID, caseid, [Program], [language] FROM Intake WHERE assignedto Is Null"
Set rs = db.OpenRecordset(strSQL, dbOpenDynaset)

 While Not rs!EOF

strSQL = "SELECT IntakeID, caseid, [Program], [language],[other required fields]   
          FROM Intake WHERE IntakeId=" & rs!IntakeID - 1
Set rs1 = db.OpenRecordset(strSQL, dbOpenDynaset)

 if rs!caseid = rs1!caseid Then

  do what in this case..update or something..

else //means current record case id is not equal to previous one
 ..
 End IF
 rs.MoveNext
Wend

希望这有帮助

答案 1 :(得分:0)

这就是你在寻找......

     if Dlookup("caseid","intake","caseid = " & caseid &  
     " AND Intake <> " & rs.Fields("IntakeID")) then
       ' your Code
     end if

请注意,Dlookup仅返回与条件匹配的第一个出现...如果您有超过1个先前记录,那么您需要另一种方法

答案 2 :(得分:0)

为什么不只是DCount caseid?

If DCount("caseid", "Intake", "caseid=" & i) > 1 Then
    Call GetPreviousWorker
    ...