安装 office 2010 后 Access 2002/XP 查询出现问题

Posted

技术标签:

【中文标题】安装 office 2010 后 Access 2002/XP 查询出现问题【英文标题】:Problems with Access 2002/XP Query after installing office 2010 【发布时间】:2011-07-07 22:08:39 【问题描述】:

我继承了一个用 AccessXP 编写的非常大的(数百个表格和表单)应用程序。安装后,该应用程序在 Windows 7 上运行良好。但是,安装 Office 2010 后,应用程序会遇到一些错误。其中最痛苦的是某些查询需要更长的时间。过去需要 5 秒的时间可能需要 10-12 分钟以上。 这三个表/查询具有以下内容: lcltblJC_Final:40 条记录。适当的索引 lkpqryJob:1964 条记录。它引用的表上的正确索引 lkpqry_CalculatedCustRespAmount:2365 条记录。它引用的单个表上的正确索引。

主要查询是这样的:

SELECT lcltblJC_Final.*, 
    lkpqryJob.ScvWr, 
    lkpqryJob.WF_RONum, 
    lkpqryJob.WF_CustRespNote, 
    lkpqryJob.WF_DiscountNote, 
    lkpqryJob.WF_CustRespAmt, 
    lkpqry_CalculatedCustRespAmount.CalcTotal
FROM lcltblJC_Final 
    LEFT JOIN lkpqryJob ON 
        lcltblJC_Final.WF_Shop_ID = lkpqryJob.WF_Shop_Key) 
    INNER JOIN lkpqry_CalculatedCustRespAmount ON 
        lcltblJC_Final.WF_Shop_ID = lkpqry_CalculatedCustRespAmount.WF_Shop_ID
WHERE 
    (lcltblJC_Final.[IncomeCost]+lcltblJC_Final.[COGSCost])<>0;

我已经删除了每个连接来测试延迟的来源。 lkpqryJob 没有问题。 lkpqry_CalculatedCustRespAmount 是我们的罪魁祸首。加入是我们经历的延迟。这是那个查询:

SELECT tblWF_Total.WF_Shop_ID, -[tblWF_Total_CT] AS CalcTotal
FROM tblWF_Total
WHERE (((tblWF_Total.TotalLabel_ID)=1));

如您所见,这里并不完全是一个可怕的查询。知道为什么这会变得如此缓慢吗?

【问题讨论】:

是A2010运行慢还是安装O2010后Access XP运行慢的问题?我假设 A2010,所以想知道您是否已在 A2010 中压缩数据库以重新计算所有表统计信息和所有查询优化。 抱歉耽搁了。离开了。问题是它在 Access XP 中运行缓慢。我们尚未将其转换为 A2010 运行时,因为需要重做大量自定义菜单和自定义控件工作。 在安装 A2010 后,您是否确保 Access XP 已完全重新注册? 如何完全重新注册?如果您的意思是我们已经重新安装了 Access XP 运行时后记以查看是否可以修复它,那么是的,我们已经做到了。我想知道在此过程之后是否某些 DLL 变得时髦,但我不知道要重新注册哪个... 我没有意识到您的 Access 2002(只有 Office XP - 其中的各个应用程序仅与年份一起提及)是运行时。我不认为有任何商业可用的脚本(我忘记了名字)可以让不同的运行时版本在同一台 PC 上共存。 【参考方案1】:

以下查询是否可以正常工作而无需花费太多时间。试一次

SELECT lcltblJC_Final.*,
lkpqryJob.ScvWr,
lkpqryJob.WF_RONum,
lkpqryJob.WF_CustRespNote,   
lkpqryJob.WF_DiscountNote,
lkpqryJob.WF_CustRespAmt, 
((lcltblJC_Final.[IncomeCost])+(lcltblJC_Final.[COGSCost])) as costcalculation,
lkpqry_CalculatedCustRespAmount.CalcTotal FROM lcltblJC_Final
LEFT JOIN lkpqryJob 
ON lcltblJC_Final.WF_Shop_ID = lkpqryJob.WF_Shop_Key
LEFT JOIN 
lkpqry_CalculatedCustRespAmount ON lcltblJC_Final.WF_Shop_ID = 
lkpqry_CalculatedCustRespAmount.WF_Shop_ID 
WHERE costcalculation > 0; 

【讨论】:

@scott,是否可以为表 'lcltblJC_Final'、'lkpqryJob'、'lkpqry_CalculatedCustRespAmount' 发布一些示例数据?另外,您能否将INNER JOIN 更改为LEFT JOIN,看看它是如何工作的?查看我的编辑。 @scott,如果可能,请发布一些示例数据。我可以试试看有什么问题。【参考方案2】:

我不确定最后一个 SQL 是否正确:-[tblWF_Total_CT] AS CalcTotal。缺少列名。我并不是说这会导致延迟,但它肯定缺少列名或“。”而不是“_”

【讨论】:

列名其实是tblWF_Total_CT,所以没错。查询有效,它只需要永远。不喜欢这种架构,但除了命名约定之外,还有太多其他事情需要担心。 我将创建与 tblWF_Total 具有相同列的新表,将数据插入新表,删除“错误”表,重命名新表。您也可以为此使用 SELECT INTO。在旁注中,tblWF_Total 表中使用了哪些数据类型?我会寻找备忘录、OLE 等...

以上是关于安装 office 2010 后 Access 2002/XP 查询出现问题的主要内容,如果未能解决你的问题,请参考以下文章

Access 2010 问题:从 Office 2013 移至 Office 2010,“未定义用户定义类型”错误

怎样把access里面的上百万的数据导出到excel里面来?我现在是2010office。

安装Microsoft Office2010前你必须了解的东西

不能安装64位版本的office 2010,因为您当前已经安装了32位的office。

安装office 2010和2013,遇到错误1923,无法安装服务office software protection platform云云,详见截图

如何查询 office2016 安装密钥