1

我们刚刚从 Access 2003 升级到 Access 2010,当使用默认条件时,字符串比较失败并出现无效的过程调用错误。我在一个只包含默认表的新 Access 2007 格式数据库中重新创建了两个可能相关的问题,一个带有下面 SQL 的查询和一个只包含下面代码的模块,所以我严重怀疑这是一个损坏问题。首先,以下子在 If Then 行上失败并出现运行时错误 5:无效的过程调用或参数

Option Compare Database
Option Explicit
Sub checkStrCmp()
     Dim str As String
     str = "s"
     If str = "s" Then
         MsgBox "works"
     End If
End Sub

如果我将 Option Compare Database 更改为 Option Compare Text,则 sub 按预期工作,但这似乎是个坏主意,因为我可能想在单个 sub 中执行文本和数字比较。

我还在 SQL 中的字符串比较函数中收到“无效的过程调用”错误。Replace 函数需要所谓的可选比较参数。

Select replace("foo-bar-baz", "-", "|", 1,-1);

生成“无效的过程调用”错误

将 compare 参数设置为任何可用值 (0 -3) 可以按预期工作:

SELECT replace("foo-bar-baz", "-", "|", 1,-1, 0);

产生“foo|bar|baz”</p>

有没有其他人看过这个?是否有需要调整的设置?除了“数据库损坏”之外的任何其他想法,我都可以通过谷歌找到。TIA

为草率的代码块道歉,我一辈子都无法让它们正常工作。

更新: 我应该提到我正在运行 XP Pro sp3。

这个问题似乎仅限于我在我的盒子上创建的数据库。当我从我们网络上的其他工作站打开我在我的盒子上创建的测试数据库时,我看到了这个问题,但是在这些工作站上创建如上所述的新数据库时无法重新创建它。我在另外两个工作站上创建的数据库(安装了相同的操作系统和 MS Office 版本)在我的机器上打开时也可以正常工作。当我从我的机器将新模块插入这些数据库时,我也无法重新创建该问题。

简而言之,这个问题似乎只存在于我的机器上创建的数据库中(在旧的 2003 格式数据库中,我已在我的机器上转换为 2007 格式)。我最好的猜测是,我的安装已经失败,但我想知道如何以及为什么在我向 IT 部门提出重新安装 Office 的请求之前。我还想排除与我盒子上其他软件的冲突。

4

1 回答 1

2

您的代码模块并不都需要共享相同的Option Compare设置。因此,您可以将那些应该使用文本比较的过程放置Option Compare Text在其声明部分中的模块中。

但是,我不明白您的说法,“我可能想在单个子项中执行文本和数字比较。 ”根据 Access 的帮助主题,Option Compare Statement在模块级别使用”来声明要使用的默认比较方法当比较字符串数据时“。换句话说,Option Compare对数值的比较没有影响。

编辑:由于问题仅限Option Compare Database于仅在一台机器上创建的数据库文件,我建议您在该机器上检查 Access 的“新数据库排序顺序”设置。如果设置为其他任何内容,请将其更改为以“常规”开头的选项。然后新建一个数据库,看看是否还有问题。

此建议的原因是Option Compare Database告诉 Access 使用数据库的代码页设置进行排序。并且“新数据库排序顺序”可以将代码页设置为永远不会给我带来麻烦的代码页。但是,我对代码页细节的理解很肤浅;我从不改变它,也不知道其他设置的后果是什么。

于 2012-05-23T19:13:58.957 回答