5

我正在将 MS Access 2000 转换为 MS Access 2010。我面临的问题是,转换后 MS Access 2010 非常慢(甚至冻结)。

以前的配置: XP 上的 MS Access 2000 与位于 Windows 2000 上的 Sql server 2000 的链接表

新配置: Windows 7 上的 MS Access 2010 与位于 Windows 2000 上的 Sql server 2000 的链接表

新配置下的访问速度非常慢,或者有时挂起和崩溃与 Visual Studio 桌面应用程序的情况相同,它在 Win7 上运行缓慢,而在 XP 上运行良好。

我尝试过的事情:

  1. 通过创建新的 MS Access 2010 并从 2000 版本导入所有对象来转换 MS Access 2000
  2. 刷新链接表等
  3. 将注册表中的 MS Office 最大缓冲区大小更改为 55000(如某些 MS 支持站点中所建议的)

到目前为止几乎没有改善。

4

4 回答 4

2

很难回答,因为问题的根源可能是多方面的。由于两个客户端的操作系统配置不同,我们不能排除问题来自两个操作系统之间的配置差异。

首先,您可以辨别连接速度是否因 PC、Access 或您的数据库而变慢:

测试:直接连接

您可以尝试使用直接连接而不是链接表直接连接到 SQL 服务器。为此,您可以创建一个连接到 SQL Server 的新 Access 项目。Access 项目是一种直接连接到 SQL Server 的 Access 数据库,没有链接表。它使用本机客户端。您可以直接在 Access 中查看 SQL Server 数据库的表,并且可以对其进行编辑。Access项目的扩展不是MDB而是ADP。Access 项目在 Access 2010 中隐藏,但得到很好的支持。

要创建 Access 项目:转到菜单文件 -> 新建,然后单击文件图标,然后选择“另存为类型”:“Microsoft Access Project (*.adp)”。

创建 ADP 时,它应该要求您输入现有 SQL Server 数据库的参数。输入您的参数。

然后转到表格面板,尝试浏览一些表格并检查它是慢还是快。

如果它很慢 => 那么问题可能来自您的 PC 或连接。您可以尝试使用另一种软件来测试您是否有一个可以连接到 SQL Server 的直接连接。

如果它很快 => 那么慢来自 ACCDB 或 ODBC 链接。

还要检查:

  • Ms Access 是最新的最新版本和 Ms Office 补丁
  • 您的 ODBC 系统和“SQL Server 的 ODBC 驱动程序”是最新的(使用最新版本的MDAC
  • 您的 Windows 7 和 Ms Access 和 ODBC 版本具有相同的位范围(32 位或 64 位)
  • 您的 ODBC 连接到 SQL Server 的 DSN 字符串已标准化
  • 如果您的 DSN 是系统 DSN,则重新创建一个新的 DSN 作为用户 DSN 并尝试。
于 2012-04-19T12:09:31.933 回答
2

您是否尝试过保持连接打开?这可能只适用于另一个 accdb 中的链接表,不确定。

不久前我遇到了这个问题,所以只要 Access 正在运行,我现在就保持连接打开,这是我的 sub 的精简版本:

Public Sub updateTables(bClose As Boolean)

Dim dbsCurrent As Database
Dim tdfSingle As TableDef
Dim tdfCollection As TableDefs
Dim sBasePath As String, sPath As String
Set dbsCurrent = CurrentDb
Set tdfCollection = dbsCurrent.TableDefs
Set dbsHold = dbsCurrent

Static dbsOpen As DAO.Database

If bClose Then
    dbsOpen.Close
Else
    sBasePath = Left(CurrentDb.Name, InStrRev(CurrentDb.Name, "\")) & "SB-Support\"
    sPath = GetUNC(sBasePath & "data.dat")

    Set dbsOpen = OpenDatabase(sPath, False, False, "MS Access;")
    For Each tdfSingle In tdfCollection
        If tdfSingle.SourceTableName <> "" Then
            If tdfSingle.Fields.Count = 0 Then
                tdfSingle.Connect = ";DATABASE=" & sPath
                tdfSingle.RefreshLink
            End If
        End If
    Next
End If

Exit Sub

结束子

我想我最初是从这里检索到的: http ://www.fmsinc.com/microsoftaccess/performance/linkeddatabase.html

我没有 SQL 服务器要求,但一个快速的谷歌给了我这个用于 SQL 连接的 OpenDatabase:

Dim cs As String
Dim cn As DAO.Database
Dim ws As DAO.Workspace
Set ws = DBEngine.Workspaces(0)
cs = "ODBC;DRIVER=SQL Server;SERVER=Main\SQLEXPRESS;DATABASE=Workwise;APP=Visual Basic"      'UID=Peter;PWD="
Set cn = ws.OpenDatabase("Workwise", dbDriverNoPrompt, True, cs)

http://www.vbforums.com/archive/index.php/t-572723.html

于 2012-04-23T21:26:19.793 回答
2

当它冻结时,我会检查 sql-server 中实际运行的查询是在 sql-server 中发生的。例如。通过运行这样的东西:

select (SELECT text FROM ::fn_get_sql(s1.sql_handle)), *
from sys.sysprocesses s1

一旦访问查询没有很好地转换为sql-server,我就调试了一个慢速访问应用程序。访问查询中的一些简单问题导致许多低效的 sql-server 查询运行。我们将其中一些查询重写为 sql-server 视图并为我们解决了它。

于 2012-04-24T06:51:43.040 回答
1

首先,确保您拥有最新的 MDAC。接下来,我建议在 SQL 中创建存储过程或表值函数,而不是从 Access 本身运行查询。Access 将预先解析查询以确保它会针对 SQL Server 运行,这可能会减慢速度。最后,如果 Access 正在执行更新和删除,它将使用 SQL Server TIMESTAMP 列来确保在您打开表单时没有其他人更改该记录。如果 SQL 没有这样的列,则 Access 必须执行所有跟踪。我们自己刚刚经历了这个——我会向开发人员询问任何提示,如果她有任何问题,我会在评论中发布。

于 2012-04-18T23:02:12.003 回答