转换 access 文件的疑难解答
时 间:2012-06-16 14:49:23
作 者:宏鹏 ID:21115 城市:上海
摘 要:转换 Access 文件的疑难解答
正 文:
将任何以前版本的 Access 数据库转换为 Access 2000 或 Access 2002 -2003 文件格式的疑难解答
在转换或使用数据库的过程中,出现编译错误的消息。
将 Microsoft Access 2.0 版数据库转换为 Access 2000 或 Access 2002 -2003 文件格式时,转换实用程序会将 Access Basic 代码转换为 Visual Basic for Applications (VBA) 代码。如果任何代码编译失败,在转换完 Access 数据库后将会收到一条错误信息。
在已转换的 Access 数据库中,在“设计”视图中打开模块,然后单击“调试”菜单上的“编译 <Project Name>”。在 Access 编译期间,将在任何包含错误的代码行上中断,然后用户可以修改语法以解决编译错误。
在少数的实例中,转换实用程序可能无法转换某些语法。例如,不能将DoCmd语句修改为DoCmd方法。如果 Microsoft Access 2.0 版数据库中包含语法错误,也会出现编译错误消息。因此,在转换任何旧版本数据库模块之前,最好先进行编译。
Microsoft Access 2000 或更高版本不支持 DAO 2.5/3.x 兼容库。如果试图转换数据库(它包括依赖 DAO 2.5/3.x 兼容库的旧版 DAO 对象、方法和属性),就会在数据库转换期间收到编译错误的消息。在转换数据库之前应更新代码,以便代码不依赖 DAO 2.5/3.x 兼容库。如果仍然在转换期间收到编译错误的编译消息,请使用以下过程来更正引用。
在 Access 2002 或更高版本中,打开已转换的 Access 数据库。
打开数据库中的 模块 。
在“工具”菜单上,单击“引用”。
在“可使用的引用”框中,清除丢失的对 DAO 2.5/3.x 兼容库的引用旁的复选框。
选中 Microsoft DAO 3.6 Object Library 旁的复选框。
Microsoft Access 97 或更高版本支持一些新的 Visual Basic 关键字,所以不能再将这些关键字作为标识符使用。这些关键字是:AddressOf、Decimal、DefDec、Enum、Event、Friend、Implements、RaiseEvent、WithEvents。将旧版的 Access 数据库转换为 Access 2000 或 Access 2002 - 2003 文件格式时,如果已有的标识符与新增的 Visual Basic 关键字相同,将引起编译错误。要解决该问题,必须更改与关键字相同的标识符。
在 Access 2.0 版中,可以为 Visual Basic 过程 指定一个与模块相同的名称。但是,在 Microsoft Access 95 或更高版本中,过程和模块不能使用相同的名称。要解决该问题,必须重新命名过程或模块。或者,在 Visual Basic for Applications (VBA) 代码中使用过程的完整名称。
将 Access 2.0 版数据库转换为 Access 2000 或更高版本时,新文件中的代码包含在 Visual Basic for Applications 项目中。默认情况下,VBA 项目的名称与 Access 文件的名称相同。在 Visual Basic 中 VBA 项目的名称也是保留字。如果模块或过程的名称与 VBA 项目的名称相同,在转换过程中将收到编译出错的消息。
在转换大的数据库时,得到“内存不足”或“无法创建任何其他类模块”消息。
Microsoft Access 2000 或 Access 2002 - 2003 文件格式的文件最多可以有 1000 个 模块 ,而 Access 97 数据库最多可以有 1024 个模块。Microsoft Access 文件中模块的数目包括“内含模块”属性设为“是”的窗体和报表。要解决该内存问题,可以减少 Access 数据库中的 对象 数。可以将应用程序分为多个数据库。如果模块中有大量的代码,可以考虑使用 类库数据库 来保存代码。
要查看转换错误的日志。
如果在转换 Access 文件 时 Microsoft Access 遇到错误,则通过打开新 Access 文件中的“转换错误”表,可以查看这些错误的摘要。“转换错误”表包含下述列:
对象类型 数据库对象 的类型,Access 在该数据库对象中遇到错误,或者,如果 Access 遇到不是针对特定类型对象的错误,则为“Database”。
对象名称Access 从中遇到错误的对象的名称。然而,如果 Access 在转换期间遇到编译错误,则不指定包含该错误的模块的名称。
错误说明如有必要,可以按 Shift+F2 来查看错误的完整说明。
无法使用“转换数据库/项目”命令转换 Access 文件。
如果通过指向“工具”菜单上的“数据库实用工具”,然后单击“转换数据库/项目”命令,无法成功转换 Microsoft Access 文件,则请使用下列过程。
在 Access 2002 或更高版本中,单击“文件”菜单上的“新建”,然后新建 Access 数据库 或 Access 项目 。
在“文件”菜单上,指向“获取外部数据”并单击“导入”。
在“导入”对话框中,选择要转换的 Access 文件。
在“导入对象”对话框中,选择要导入的 数据库对象 。如果新的 Access 文件是已连接到 Microsoft SQL Server 数据库的 Access 项目,则只导入窗体、报表、页、宏和模块。
注释使用这种方法转换 Access 文件时,可能需要设置引用,方法是:在“设计”视图中打开模块,单击“工具”菜单上的“引用”,然后选中在旧版 Access 文件中设置的引用旁的复选框。
在已转换的 Access 数据库中“名称自动更正”不起作用。
在 Access 2000 或更新版中创建的数据库中,默认情况下 名称自动更正 功能是启用的。要在转换的Microsoft Access 数据库中启用名称自动更正,请执行以下步骤:
在“工具”菜单上,单击“选项”,然后单击“常规”选项卡。
选中“跟踪名称自动更正信息”和“执行名称自动更正”复选框。
如果需要记录 Access 修改名称错误时对数据库进行的更改,请同时选中“记录名称自动更正的更改情况”复选框。
在 “设计”视图 中打开每个表、查询和报表,保存并关闭它。
在已转换的非英文版的 Access 数据库中的数据难于辨认。
在将Microsoft Access 数据库从 Access 97 或更早版本转换为 Access 2000 或 Access 2002 - 2003 文件格式时,Access 使用排序次序确定在将数据转换为 Unicode 时所使用的 代码页 。Access 2000 或更新版将“常规”排序次序与西欧代码页相关联。因此,如果使用了旧版的 Access 数据库与非英文的操作系统,并将其保存为“常规”排序次序,请使用下列过程之一。
如果操作系统所使用的语言与数据库相同或操作系统支持数据库语言,请使用下列过程。
在旧版非英文 Access 中打开数据库。
更改排序次序以与操作系统的语言相匹配。有关如何更改该版 Access 中的排序次序的信息,请搜索 Access“帮助”。
压缩数据库。
在 Access 2002 或更高版本中,转换数据库。
如果操作系统所使用的语言与数据库不同或不支持数据库语言,或者在旧版的 Access 中没有排序次序,则请使用下列过程。
如果要转换的 Access 数据库的语言是使用越南语、波斯语或波罗的语(爱沙尼亚语、拉脱维亚语或立陶宛语)创建的,则可能需要使用该过程。
执行下列操作之一:
如果转换的是 Access 2.0 数据库,请在 Windows 注册表中查找下列子键:
HKEY_LOCAL_MACHINESoftwareMicrosoftJet4.0EnginesJet 2.x
如果转换的是 Access 95 或 97 数据库,请在 Windows 注册表中查找下列子键:
HKEY_LOCAL_MACHINESoftwareMicrosoftJet4.0EnginesJet 3.x
在 Jet 2.x 或 Jet 3.x 子键中,新建名为 ForceCP 的项并执行下列操作之一:
设置“ANSI”项的值以指定计算机的默认代码页。
指定所需语言的代码页编号。例如,指定“1257”,代表 Windows Baltic Rim。
启动 Access 2002 或更高版本并转换数据库。
删除 ForceCP 注册表项以便 Access 还原为使用数据库的排序次序以确定代码页。
将 Access 2.0 版数据库转换为 Access 2000 或 Access 2002 - 2003 文件格式时有关其他问题的疑难解答
查询条件中的时间或日期值返回不同的结果。
将 Microsoft Access 2.0 版数据库转换为 Access 2000 或 Access 2002 - 2003 文件格式时,如果查询中包含基于“日期/时间”字段中指定的时间值的条件,查询将返回与旧版本不同的结果。在将 Microsoft Access 2.0 版数据库中的表 链接 到 Access 2000 或更高版本的数据库中时,也会发生这种情况。但是,这只影响“日期/时间”字段的时间部分。
查询也可能会返回不同的结果,这样的查询包含了指定日期在 1900 到 1929 之间的条件。例如,在 Microsoft Access 2.0 和 95 中的#01/01/15日期条件代表 1915 年 1 月 1 日;在 Microsoft Access 97 或更高版本中同样的日期条件则代表 2015 年 1 月 1 日。为了处理这种差别,可修改条件中的数据来指定世纪(例如,#01/01/1915#)。
转换的 Microsoft Access 2.0 版报表的页边距不同。
在已从 Access 2.0 转换为 Access 2000 或 Access 2002 - 2003 文件格式的 Microsoft Access 数据库中,当试图打印或预览某些页边距设为 0 的 报表 时,可能会遇到问题。在转换 2.0 版的报表时,页边距不是设为 0,而是设为默认打印机的最小有效页边距。这是为了避免在打印机的非打印区域打印报表数据。
若要解决该问题,可以减少报表的列宽、列间距或列数,以使各列的宽度加上默认的页边距小于纸张的宽度。
16 位 API 调用不能转换。
如果 Microsoft Access 2.0 版的模块中包含 16 位 API 调用,在将数据库转换为 Access 2000 或 Access 2002 - 2003 文件格式时将出现错误消息。因此必须在已转换的数据库中将 APIDeclare语句改为相应的 32 位形式。
以下列表提供了一些用于转换代码的提示。
检查所有的Declare语句以确保它们引用正确的动态链接库 (DLL)。下表显示了 32 位 Windows DLL 的新名称。
16 位 Windows DLL 32 位 Windows DLL
User.dll User32.dll
Kernel.dll Kernel32.dll
GDI.dll GDI32.dll
32 位 Windows API 中的一些函数名称已经改变。此外,32 位 Windows API 中的函数是区分大小写的。需要进行检查以确保输入了正确的过程名和别名。
32 位 Windows API 中的一些函数具有新的参数数据类型。
如果一个 16 位版本的 DLL 与计算机中现有的 32 位 DLL 具有相同的名称,且该 16 位版的 DLL 所在的目录在新版本 DLL 路径之前,则 Access 将试图调用 16 位版本的 DLL。
一些 32 位 DLL 包含具有细微差别的函数以同时接纳 Unicode 和 ANSI 字符串。函数名末尾有一个A表明是 ANSI 版本。函数名末尾有一个W则表明是 Unicode 版本。如果函数使用字符串类型的参数,最好在函数名后面附加一个A以进行标识。
如果数据库应用程序调用其他 DLL 中的过程,则必须创建或获得这些 DLL 的 32 位版本,并在将数据库转换为当前版的 Access 时对代码进行必要的更改。如果无法获得 32 位版本的 DLL,那么需要一个能够将 32 位调用转换为 16 位调用的过渡型 DLL。
自定义控件不能转换。
将包含 ActiveX 控件 的Microsoft Access 数据库转换为 Access 2000 或 Access 2002 - 2003 文件格式时,会出现错误消息。因为 Access 2.0 版支持 16 位 ActiveX 控件,而 Access 95 或更高版本支持 32 位 ActiveX 控件。如果计算机上有 32 位的版本,并且已经注册,则 Access 可以自动将 16 位控件更新为 32 位版本。
得到多于 32 个表索引的错误消息。
如果 Microsoft Access 2.0 版数据库中的表具有 32 个或更多的索引和组合关系,在将其转换为 Access 2000 或 Access 2002 - 2003 文件格式时将出现错误消息。要解决该错误,必须在 Access 2.0 版中打开数据库,并修改表的设计以减少主键表的关系数,或删除外键表的某些索引,然后再进行转换。
在打开已转换数据库中的表或窗体时,收到 ODBC 的错误消息。
如果将转换过的 Microsoft Access 1.x 或 2.0 数据库中的表链接到使用 16 位驱动程序管理器和驱动程序的 ODBC 数据源 ,将出现“ODBC – 连接到 datasourcename 失败”的错误信息。Microsoft Access 2002 或更高版本只能打开使用 32 位版本的“ODBC 驱动程序管理器”(Odbc32.DLL) 及适当的 ODBC 驱动程序(例如,32 位版本的 Microsoft SQL Server ODBC 驱动程序 (Sqlsrv32.DLL))的链接 ODBC 数据源。
若要更正此错误,必须为每一个链接到原 Access 1.x 或 2.0 版数据库的 ODBC 数据源,新建一个同名的 32 位数据源名 (DSN)。
在 Microsoft Windows 控制面板中,双击“管理工具”,然后双击“数据源 (ODBC)”。
通过输入与原 DSN 相同的值创建新的 DSN。例如,对于 Microsoft SQL Server,至少需要定义“数据源名称”和“服务器”,但可能还需要定义附加的值,例如“数据库名称”。
如果不能确定 DSN 的原始名称,请在创建它的 Microsoft Access 版本中打开原始数据库,在 “设计”视图 打开链接表,然后显示“表属性”表。表的“说明”属性包含对 ODBC 连接字符串的定义。在连接字符串中,接在DSN=后面的参数即为 DSN 的名称。
将 Access 2000 或更高版本数据库转换为 Access 97 的疑难解答
得到计算机至少丢失一个 Access 97 对象库的消息。
可以将使用 数据访问对象 (DAO) 的代码转回 Microsoft Access 97,但是您可能会收到计算机丢失至少一个 Access 97 对象库的消息。使用该过程修复丢失的引用。
将 Access 2000 或更高版本的数据库转换为 Microsoft Access 97。当收到计算机丢失至少一个 Access 97 对象库的消息时,单击“确定”。
在 Microsoft Access 97 中,打开已转换的 Access 数据库。
打开数据库中的 模块 。
在“工具”菜单上,单击“引用”。
在“可使用的引用”对话框中,清除任何丢失的引用旁的复选框。
若要设置正确的引用,请选择 Microsoft DAO 3.51 Object Library 旁的复选框。
注释与 Access 2000 或更高版本不同,Access 97 不能与 ActiveX 数据对象 (ADO) 一同使用。
从 Access 2000 或 Access 2002 - 2003 文件格式的启用安全机制的 Access 数据库转换的 Access 97 文件不能保留其安全机制。
在将 Access 2000 或 Access 2002 - 2003 文件格式的 Microsoft Access 数据库转换回 Access 97 时, 新的 Access 97 数据库中的权限重置为默认设置,这是因为 Access 97 不能使用 Access 2000 或 Access 2002 - 2003 文件格式的工作组信息文件。必须在 Access 97 中帮助保护新数据库。
导入规格在从 Access 2000 或 Access 2002 - 2003 文件格式转换的 Access 97 文件中丢失。
在 Microsoft Access 文件中用 Access 2000 或 Access 2002 - 2003 文件格式创建和保存的导入规格并没有在 Access 97 文件中进行创建。必须重新创建规格。
Access软件网官方交流QQ群 (群号:54525238) Access源码网店
常见问答:
技术分类:
源码示例
- 【源码QQ群号19834647...(12.17)
- Access对子窗体数据进行批...(10.30)
- 最精简的组合框行来源数据快速输...(10.25)
- Access仿平台的多值选择器...(10.24)
- 【Access日期区间段查询】...(10.22)
- 【Access源码示例】VBA...(10.12)
- Access累乘示例,Acce...(10.09)
- 数值8.88,把整数8去掉,转...(10.08)
- 【Access自定义函数】一个...(09.30)
- 【Access选项卡示例】Ac...(09.09)
学习心得
最新文章
- 【Access IIF函数嵌套示例...(11.26)
- Access快速开发平台--使用组...(11.25)
- Access快速开发平台--对上传...(11.22)
- Access快速开发平台企业版--...(11.18)
- 不会用多表联合查询,多表查询没结果...(11.16)
- 【案例分享】主键字段值含有不间断空...(11.16)
- Access快速开发平台--后台D...(11.14)
- 微软Access邀测新Monaco...(11.12)
- Access列表框左右互选、列表框...(11.11)
- 高效率在导入数据前删除记录(11.10)