2012-11-26 28 views
0

我正在请求一些指导来解决我在尝试编辑数据库中的“AfterUpdate”事件时遇到的问题。它似乎在我的本地机器上正常工作,但是当我尝试在网络数据库中实现它时,它无法正常工作(偶尔会在其中一个字段中随机放入日期,不会在提供新的日期时删除日期ID等)DateAdd + DLookup

下面是VBA代码,我有:

Private Sub provider_surveyID_AfterUpdate() 

provider_survey_dueDate = DateAdd("ww", 2, DLookup("completed_on", 
"qry_ProviderSurveyInfo", "provider_surveyID=" & provider_surveyID)) 
provider_survey_reminder2weeks = DateAdd("ww", 4, DLookup("completed_on", 
"qry_ProviderSurveyInfo", "provider_surveyID=" & provider_surveyID)) 
provider_survey_reminder4weeks = DateAdd("ww", 6, DLookup("completed_on", 
"qry_ProviderSurveyInfo", "provider_surveyID=" & provider_surveyID)) 

End Sub 

查询是正确的,在加入调查ID到合适的参与者,以确定在使用原有的“completed_on”日期DateAdd函数。

您能否看到任何原因导致其无法正常工作 - 在输入当前未使用的ID时删除日期?另外,认为在这种情况下使用Nz(provider_surveyID,0)是明智的吗?我还没有实现它,因为我想使它适当地工作,因为它在我的本地没有任何问题 - 我输入ID,它填充;我输入20(尚未使用),它会使所有日期再次为空。

+0

这些日期是根据“completed_on”来自另一个表的字段。供应商调查链接到基于ID的供应商调查(供应商调查的ID与供应商的第一个参与者 - 参与者ID相匹配)。 completed_on日期被输入到一个表格中,并且一旦用户输入ID,我有其他日期字段自动填充,但希望它们显示以防需要被覆盖并存储时,以另一种形式输入。 – BLarsen

回答

1

Dlookups使用起来可能很慢且棘手,它也会在未输入标准时返回随机值。我不确定你的表格是如何放在一起的(我假设它是一种形式),这可能是一个部分答案:

Private Sub provider_surveyID_AfterUpdate() 
Dim dtComplete as Date 

If IsNull(provider_serveyID) then 
    provider_survey_dueDate="" 
    provider_survey_reminder2weeks="" 
    provider_survey_reminder4weeks="" 
Else 
    dtComplete = DLookup("completed_on","qry_ProviderSurveyInfo", "provider_surveyID=" & provider_surveyID) 
    provider_survey_dueDate=DateAdd("ww",2,dtComplete) 
    provider_survey_reminder2weeks=DateAdd("ww",4,dtComplete) 
    provider_survey_reminder4weeks=DateAdd("ww",6,dtComplete) 
End if 
End sub 
+0

我承认这不是一个完整的答案,但我认为将日期变量设置为删除任何机会进行某种类型转换并设置查找失败的单点是一个很好的开始。如果它仍然不能在网络版本上运行,并且Dlookup仍然存在疑问,则可以使用记录集切换DLookup。如果Dlookup和记录集都不能在网络上运行,那么您可以查看基础数据集。 – KFleschner

+0

我想通过将返回日期设置为类型化的日期var来调试,以确保一些奇怪的implict类型转换没有发生。您可以为dtComplete添加Debug.Prints以检查返回的正确日期。然后,如果问题仍然存在,请将Dlookup切换为记录集以消除可能的Dlookup行为。我还会无意中检查任何其他触发AfterUpdate事件的对象。 – KFleschner

+0

您还可以在设置DateAdd函数的文本字段之前添加debug.print,以消除DateAdd正确执行的可能性,但文本字段未按预期处理该值。 – KFleschner