我有一个子表单中的名称列表,在我的主表单上,我有一个按钮,允许用户查看给定联系人的“个人资料”。进入配置文件后,我希望有一个按钮,允许用户通过单击“下一个用户”移动到子窗体中的下一个名称(同时保持“配置文件”视图)。
此外,数据库会询问用户是否要将更改(vbYesNo)保存到配置文件,然后再转到下一个用户的配置文件。出于某种原因,我的代码在用户第一次单击“下一次联系人”和“是”时起作用,但是在用户单击“下次联系人”和“是”之后,它将不会滚动到下一个联系人。请注意,如果用户在不想保存对配置文件所做的更改时选择“否”,则“下一个用户”按钮可正常工作。
以下是代码:
[ {actId:1, [{dt: 10/5/2015, hr:8}, {dt: 10/2/2015, hr:38}]},
{actId: 3, [{dt: 10/4/2015, hr:3}]},
{actId: 4 [{dt: 10/6/2015 hr: 9}]}]
感谢任何想出这个的人!这已经耗费了太多时间。
答案 0 :(得分:1)
这不是答案,但我在这里写,因为它不适合评论。一些人建议,如果你申请了,就可以免除这一切。
1)您的代码遵循模式
If User_Says_Yes Then
Save
Fetch_Next_Record
Else
Fetch_Next_Record
Endif
这是有问题的,因为Fetch_Next_Record是很多代码并且它是重复的,并且您花费大量时间来查看它的不同之处。复制代码通常是一个非常糟糕的主意。尝试使用以下模式重写它:
If User_Says_Yes Then
Save
Endif
Fetch_Next_Record
2)尝试通过尽可能多地移动到私有子例程来缩短代码。例如,写一些像BuildSQL() as String
这样的函数,像updateFormFromRs(rs as Recordset)
这样的子程序。一般来说,当你的任何例程或函数变得太长时,比如超过20或30行,你应该考虑将一些代码迁移到子程序和函数
3)缩进代码。没有它就很难跟踪你的代码..只是为了看看当用户说不的时候Else会在哪里开始......
4)你在记录集中获取一个完整的表,只是为了滚动它并找到一个匹配if intRecord = rs.AbsolutePosition
的记录?为什么不使用带有WHERE
子句的SQL语句并只加载所需的记录?这是您需要在任何具有大量数据的严肃应用程序中应用的内容。
5)If rs.EOF = True Then
之类的陈述:只需If rs.EOF Then
。
额外的= True
不会使测试更加严格。好像没有它我们检查条件是否几乎是真的。
最后,即使您可能从其他人那里继承了此代码,我相信您必须完全重写并改进它,越快越好。是的,我确信如果您遵循这些指导原则,您将能够非常轻松地调试代码。
友善:)