ms-access加载数据问题

时间:2009-10-27 18:08:47

标签: ms-access vba

我有一个非常复杂的形式。如下所示:

alt text http://img9.imageshack.us/img9/2465/test2xk.jpg

但是,我在数据库中只有8mb的数据。

它的工作方式是它在左侧填充所有记录名称的列表框。滚动记录时,它会为每条记录加载适当的数据

当我在左侧滚动列表框时,由于某种原因,将每条记录加载到所有相应的字段大约需要2秒钟。没有图片加载或任何巨大的。数据库驻留在本地。它只是加载每个记录最多100kb

你能告诉我这是否需要这么长时间才能加载?

这可能是查询的问题吗?

这是我每次滚动列表框中的项目时运行的内容

SELECT u.id,u.title,u.title,u.first,u.last FROM 
  (((tblusers u LEFT JOIN tbluserstudentteacher 
     ON u.id = tbluserstudentteacher.student_teacher_user_id) 
     LEFT JOIN tblUsersSubjects ON u.id = tblUsersSubjects.user_id) 
     LEFT JOIN tblUserAvailability ON u.id=tblUserAvailability.user_id) 
     LEFT JOIN chavrusas ON u.id=chavrusas.luser_id 
       WHERE 1=1 AND (u.gender) LIKE 'm*' 
       AND (chavrusas.luser_type)='shliach' 
       AND (chavrusas.ruser_type)='shliach' AND (u.last LIKE 'd*') 
 GROUP BY u.id, u.title, u.title, u.first, u.last 
 ORDER BY last;

4 个答案:

答案 0 :(得分:3)

我注意到您有许多子表单,如果您在需要之前未加载所有子表单,则可能会获得更好的性能:Does it degrade performance to use subforms in MS Access?

答案 1 :(得分:1)

那个SQL很糟糕,因为你真的想要按这么多字段分组吗? 似乎SQL语句被抛在一起看起来像它有效,所以你选择保持这种方式。

答案 2 :(得分:1)

你在任何地方使用dlookups或任何其他计算控件=更简单的那些往往会减慢表单的加载/刷新...

答案 3 :(得分:1)

重新格式化SQL后,看起来你正在做一些不必要的连接,那些是tbluserstudentteacher,tblUsersSubjects和tblUserAvailability的连接。你可以大大简化(我强烈怀疑提高性能)。以下内容应该有效:

SELECT u.id, u.title, u.first, u.last
  FROM (tblusers u LEFT JOIN chavrusas c ON u.id = c.luser_id
  AND u.gender LIKE 'm*'
  AND u.last LIKE 'd*'
  AND c.luser_type = 'shliach'
  AND c.ruser_type = c.luser_type)
ORDER BY last;

GROUP BY也不合适或不必要,因为你没有可能导致分组的聚合函数。

我怀疑你没有在这里发布真正的SQL,因为不需要GROUP BY和JOINed表。