1

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 の再インストールを依頼する前に、どのように、そしてなぜそうなったのかを理解しておきたいと思います。また、私のボックスの他のソフトウェアとの競合を除外したいと思います。

4

1 に答える 1

2

Option Compareすべてのコード モジュールで同じ設定を共有する必要はありません。Option Compare Textしたがって、宣言セクションにあるモジュールにテキスト比較を使用する必要があるプロシージャを配置できます。

ただし、「単一のサブルーチン内でテキストと数値の比較を実行したい場合がありOption Compare Statementます」というあなたの声明は理解できません。文字列データを比較する場合」。つまり、Option Compare数値の比較には影響しません。

編集:問題はOption Compare Database1台のマシンでのみ作成されたデータベースファイルに限定されているため、そのマシンでAccessの「新しいデータベースのソート順」設定を確認することをお勧めします. それ以外に設定されている場合は、「一般」で始まる選択肢に変更します。次に、新しいデータベースを作成し、まだ問題があるかどうかを確認してください。

この提案の理由はOption Compare Database、並べ替えにデータベースのコードページ設定を使用するように Access に指示するためです。そして、「新しいデータベースのソート順」は、コードページをそのようなトラブルを起こさないものに設定することができます。ただし、コードページの詳細についての私の理解はかなり浅いです。私はそれを決して変更せず、他の設定の結果がどうなるかわかりません.

于 2012-05-23T19:13:58.957 に答える