Access 2003 から Access 2010 にアップグレードしたばかりですが、既定の条件を使用すると、文字列比較が無効なプロシージャ コール エラーで失敗します。既定のテーブルのみを含む新しい Access 2007 形式のデータベース、以下の SQL を含むクエリ、および以下のコードのみを含むモジュールで、関連すると思われる 2 つの問題を再現しました。最初に、If Then 行で次のサブルーチンが実行時エラー 5 で失敗します: Invalid procedure call or argument
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 に変更すると、サブは期待どおりに機能しますが、単一のサブ内でテキストと数値の比較を実行したい場合があるため、これは悪い考えのようです。
また、SQL 内の文字列比較関数で「無効なプロシージャ コール」エラーが発生します。Replace 関数には、おそらくオプションの比較パラメーターが必要です。
Select replace("foo-bar-baz", "-", "|", 1,-1);
「無効なプロシージャ コール」エラーを生成する
比較パラメーターを使用可能な値 (0 ~ 3) のいずれかに設定すると、期待どおりに機能します。
SELECT replace("foo-bar-baz", "-", "|", 1,-1, 0);
「foo|bar|baz」を生成します</p>
他の誰かがこれを見たことがありますか?微調整が必要な設定はありますか?「データベースの破損」以外の他のアイデアは、Google で見つけたすべてです。ティア
ずさんなコード ブロックに対するお詫び。
更新: XP Pro sp3 を実行していることを言及する必要がありました。
問題は、自分のボックスで作成したデータベースに限定されているようです。ボックスで作成したテスト データベースをネットワーク上の他のワークステーションから開いたときに問題が発生しましたが、これらのワークステーションで上記のように新しいデータベースを作成するときに問題を再現できませんでした。他の 2 台のワークステーション (同じ OS と MS Office のバージョンがインストールされている) で作成したデータベースも、自分のマシンで開くと正しく機能しました。また、自分のマシンからこれらの DB に新しいモジュールを挿入したときにも、問題を再現できませんでした。
要するに、問題は私のマシンで作成されたデータベースにのみ存在するようです (そして、私のマシンで 2007 形式に変換した古い 2003 形式のデータベース)。私の最善の推測では、私のインストールはホースで行われていますが、IT 部門に Office の再インストールを依頼する前に、どのように、そしてなぜそうなったのかを理解しておきたいと思います。また、私のボックスの他のソフトウェアとの競合を除外したいと思います。