我们刚刚从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
如果我将选项比较数据库更改为选项比较文本,子工作按预期工作,但这似乎是一个坏主意,因为我可能想要在单个子内部执行文本以及数字比较。
我在SQL内部的字符串比较函数中也遇到“无效的过程调用”错误。 Replace函数需要所谓的可选比较参数。
Select replace("foo-bar-baz", "-", "|", 1,-1);
生成“无效的过程调用”错误
将compare参数设置为任何可用值(0 -3)按预期工作:
SELECT replace("foo-bar-baz", "-", "|", 1,-1, 0);
产生“foo | bar | baz”
有没有人见过这个?是否有需要调整的设置?除了“数据库损坏”之外的任何其他想法,这些都是我通过Google找到的。 TIA
对于草率的代码块,我不能为我的生活让他们正常工作的apoligies。更新:我应该提到我正在运行XP专业版sp3。
问题似乎仅限于我在盒子上创建的数据库。当我打开我在我的盒子上从我们网络上的其他工作站创建的测试数据库时,我看到了这个问题,但是当在这些工作站上创建新的数据库时无法重新创建它。我在其他两个工作站上创建的数据库(安装了相同的操作系统和MS Office版本)在我的机器上打开时也能正常工作。当我从我的机器中插入新模块时,我也无法重新创建问题。
简而言之,问题似乎只存在于我的机器上创建的数据库上(在旧的2003格式数据库中,我已经在我的机器上转换为2007格式)。我最好的猜测是我的安装已经过了,但是我想知道在我向IT部门提出重新安装Office之前的方式和原因。我还想排除与我的盒子上的其他软件发生冲突。
答案 0 :(得分:2)
您的代码模块并非都需要共享相同的Option Compare
设置。因此,您可以将那些应该使用文本比较的过程放在其声明部分中具有Option Compare Text
的模块中。
但是,我不明白你的陈述,“我可能想要在单个子内部进行文本和数字比较。”根据Access'帮助主题,{{1} }是“在模块级别用于声明比较字符串数据时使用的默认比较方法”。换句话说,Option Compare Statement
对数值的比较没有影响。
编辑:由于仅在一台计算机上创建的数据库文件的问题仅限于Option Compare
,我建议您检查该计算机上的Access“新数据库排序顺序”设置。如果将其设置为其他任何内容,请将其更改为以“常规”开头的选项。然后创建一个新数据库,看看你是否还有问题。
这个建议的原因是Option Compare Database
告诉Access使用数据库的代码页设置进行排序。并且“新数据库排序顺序”可以将代码页设置为永远不会给我带来麻烦的代码页。但是,我对代码页详细信息的理解非常浅薄;我永远不会改变它,也不知道其他设置的后果是什么。