通过记录访问VBA

时间:2015-10-08 21:47:20

标签: vba access-vba

我有一个子表单中的名称列表,在我的主表单上,我有一个按钮,允许用户查看给定联系人的“个人资料”。进入配置文件后,我希望有一个按钮,允许用户通过单击“下一个用户”移动到子窗体中的下一个名称(同时保持“配置文件”视图)。

此外,数据库会询问用户是否要将更改(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}]}]

感谢任何想出这个的人!这已经耗费了太多时间。

1 个答案:

答案 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不会使测试更加严格。好像没有它我们检查条件是否几乎是真的

最后,即使您可能从其他人那里继承了此代码,我相信您必须完全重写并改进它,越快越好。是的,我确信如果您遵循这些指导原则,您将能够非常轻松地调试代码。

友善:)