将 MS Access 2000 转换为 2010
Posted
技术标签:
【中文标题】将 MS Access 2000 转换为 2010【英文标题】:Converting MS Access 2000 to 2010 【发布时间】:2012-04-12 17:59:56 【问题描述】:我正在将 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 的链接表
New Config 下的访问速度非常缓慢,或者有时会挂起和崩溃 与 Visual Studio 桌面应用程序的情况相同,它在 Win7 上运行缓慢,而在 XP 上运行良好。
我尝试过的事情:
-
通过创建新的 MS Access 2010 并从 2000 版本导入所有对象来转换 MS Access 2000
刷新链接表等
将注册表中的 MS Office 最大缓冲区大小更改为 55000(如某些 MS 支持站点中所建议的那样)
到目前为止几乎没有改善。
【问题讨论】:
您没有将 SQL Server 2000 升级到类似 SQL Server 2008 Express 的原因是什么? 你看到social.technet.microsoft.com/Forums/en/…了吗? 在使用专用数据库服务器时最好避免链接表,利用它们的处理能力并始终采用 ADO 连接方式。这将使服务器执行所有工作,除了在访问之外无法完成的任何工作。 @MattDonnan 这不是 Microsoft 推荐的 Access 2010。有支持的链接表。 @Remou 是的,尽管我确实希望微软能够捍卫和支持他们的产品功能。我只提到了 ADO 方法,因为当链接表方法遇到优化问题时,它总是很适合我。当使用 access 作为数据库后端时,我仍然支持链接表。 【参考方案1】:很难回答,因为问题的根源可能是多方面的。 由于两个客户端的操作系统配置不同,所以不能排除是两个操作系统配置不同造成的问题。
首先,您可以判断连接速度慢是因为 PC、Access 还是您的数据库:
测试:直接连接
您可以尝试使用直接连接而不是链接表直接连接到 SQL 服务器。 为此,您可以创建一个连接到 SQL Server 的新 Access 项目。 Access 项目是一种直接连接到 SQL Server 的 Access 数据库,没有链接表。它使用本机客户端。您可以直接在 Access 中查看 SQL Server 数据库的表,并且可以对其进行编辑。 Access项目的扩展不是MDB而是ADP。 Access 项目在 Access 2010 中隐藏,但得到很好的支持。
要创建 Access 项目:进入菜单文件 -> 新建,然后单击文件图标,然后选择“保存类型”:“Microsoft Access 项目 (*.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 并尝试。【讨论】:
【参考方案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
【讨论】:
【参考方案3】:当它冻结时,我会检查 sql-server 中实际运行的查询是在 sql-server 中发生的。例如。通过运行这样的东西:
select (SELECT text FROM ::fn_get_sql(s1.sql_handle)), *
from sys.sysprocesses s1
有一次我调试了一个访问速度慢的应用程序,其中访问查询没有很好地转换为 sql-server。访问查询中的一些简单问题导致许多低效的 sql-server 查询运行。我们将其中一些查询重写为 sql-server 视图并为我们解决了。
【讨论】:
【参考方案4】:首先,确保您拥有最新的 MDAC。接下来,我建议在 SQL 中创建存储过程或表值函数,而不是从 Access 本身运行查询。 Access 将预先解析查询以确保它会针对 SQL Server 运行,这可能会减慢速度。最后,如果 Access 正在执行更新和删除,它将使用 SQL Server TIMESTAMP 列来确保在您打开表单时没有其他人更改该记录。如果 SQL 没有这样的列,则 Access 必须执行所有跟踪。我们自己刚刚经历过——我会向开发人员询问任何提示,如果她有任何建议,我会在 cmets 中发布。
【讨论】:
以上是关于将 MS Access 2000 转换为 2010的主要内容,如果未能解决你的问题,请参考以下文章
将 VBA 用于 MS Access 2000 文本框的控制源
带有 MS Access 2010 数据库的 Delphi FireDAC。为啥它将 ACE 转换为 Jet?