none
Access 2010のAccess プロジェクト(.adp)でStrComp関数を実行するとDLL読み込みエラーとなる

    質問

  • はじめまして、W650と申します。

    Access2010のAccessプロジェクト(.adp)でStrComp関数を実行すると、
     実行時エラー'48':
     DLL読み込み時のエラーです。
    となります。

    ただし、エラーとなるのはStrComp関数の3番目の引数(compare)が、
    vbDatabaseCompareの場合のみです。
    vbBinaryCompareとvbTextCompareの時は問題ありません。

    OSはWindows7 Professionalです。
    また、接続しているデータベースは、SQL Server 2000 と SQL Server 2005 です。
    いずれも、サーバーの照合順序が「Japanese_BIN」となっております。(関係の有無は不明ですが)

    以上です。よろしくお願い致します。

    2010年8月27日 9:07

回答

  • (office.microsoft.com じゃなくて msdn.microsoft.com の内容を基にざっくり書き換え)

    http://msdn.microsoft.com/ja-jp/library/cc375966.aspx

    ちょっと古いような感じのないようですが、vbDatabaseCompare は Microsoft Access の検索モードを使用するので、対象データベースが Access の場合にのみ利用できるようです。

    対象が SQL Server として StrComp を使用する場合、Text, Binary のどちらかを選択する必要があり、SQL Server に依存したより詳細な順序付けが指定したい場合はパススルークエリなどを利用されるとよいのではないかと思います。(古いファイル形式の場合にどのような結果が返っているかにもよりますが、おそらく元DBの設定?)

    • 回答としてマーク W650 2010年8月30日 9:28
    2010年8月30日 7:48

すべての返信

  • エラーの原因はケースバイケースだと思いますが、一般的には何らかの原因でインストールが失敗している、もしくは、後からインストールした何かのプログラムによってそのdllが書きかえられているなどが考えられます。ベタな方法ですが、Access2010を再インストールされてみてはいかがでしょうか?

     


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/
    2010年8月27日 11:13
    モデレータ
  • trapemiya さん。回答ありがとうございます。

    私の環境だけではなく、別のPCでも同様のエラーが発生するので、インストールが失敗しているというのは考えにくかったのですが、念のため、Access2010(正確にはOffice Professional Plus 2010です)を再インストールしてみましたが、状況は変わりませんでした。
    さらに、Access2010のすべてのコンポーネントをインストールするようにしてもみましたが、ダメでした。

    引き続き、何か情報がありましたらお願いします。
    また、今回のケースで使用しているdllとは具体的にどれになるのでしょうか?そちらも分かりましたらぜひ情報をお願いします。

    2010年8月30日 1:34
  • 私も"Error in loading DLL” 辺りで"検索してみましたが情報が少ないようです。
    とりあえず問題を切り分けるために、ローカルのテーブルでは問題が発生しないか確かめてみられてはいかがでしょうか? ある程度問題が切り分けられたところで、コネクトに報告してみるのも手だと思います。

    >また、今回のケースで使用しているdllとは具体的にどれになるのでしょうか?そちらも分かりましたらぜひ情報をお願いします。

    オブジェクトブラウザで見てみましたが、StrCompはVBE7.DLLのようです。


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/
    2010年8月30日 2:59
    モデレータ
  • >とりあえず問題を切り分けるために、ローカルのテーブルでは問題が発生しないか確かめてみられてはいかがでしょうか?

    ローカルのテーブルとは、mdb形式やaccdb形式のファイルのことでしょうか?
    試してみたところ、前述の2つのファイル形式の場合はエラーは発生しませんでした。
    また、SQL Server の照合順序も気になって、「Japanese_CI_AS」の動作確認もしてみましたが、こちらはエラーが発生しました。(照合順序は関係ないようですね...)

    まとめると、以下のような状態です。

    adp形式(SQL Server 2000 照合順序「Japanese_BIN」) ・・・ NG
    adp形式(SQL Server 2005 照合順序「Japanese_BIN」) ・・・ NG
    adp形式(SQL Server 2008 照合順序「Japanese_CI_AS」) ・・・ NG
    mdb形式 ・・・ OK
    accdb形式 ・・・ OK

    >ある程度問題が切り分けられたところで、コネクトに報告してみるのも手だと思います。

    こちらのフォーラムに参加させいていただくのが初めてなもので、「コネクトに報告してみる」とは具体的にどういうことでしょうか?申し訳ありませんが、教えていただけますか?

    >オブジェクトブラウザで見てみましたが、StrCompはVBE7.DLLのようです。

    そうですね。オブジェクトブラウザで確認すればよいのですね。お手を煩わせてしまって申し訳ありませんでした。
    ちなみに、VBE7.DLLのバージョンは、7.00.1590 でした。

    2010年8月30日 6:24
  • こちらのフォーラムに参加させいていただくのが初めてなもので、「コネクトに報告してみる」とは具体的にどういうことでしょうか?申し訳ありませんが、教えていただけますか?

    コネクトは以下になりますが、この件に関する受付先が無いようですね・・・、すみません。(私の探し方が悪くて見つけられないだけかもしれませんが・・・)

    Microsoft Connect
    https://connect.microsoft.com/

    以下ではちゃんと「Microsoft Office に関するフィードバックをお寄せください。」と書いてありますが、やはりOfficeだと使用者が多いためかもしれませんね。

    Microsoft Office の開発
    http://msdn.microsoft.com/ja-jp/library/bb726434(office.12).aspx


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/
    2010年8月30日 6:46
    モデレータ
  • trapemiya さん、いろいろとありがとうございます。

    教えていただいたURLのほう参照してみます。
    何か解決策等ありましたらあらためてフィードバックさせていただきます。

    2010年8月30日 7:23
  • (office.microsoft.com じゃなくて msdn.microsoft.com の内容を基にざっくり書き換え)

    http://msdn.microsoft.com/ja-jp/library/cc375966.aspx

    ちょっと古いような感じのないようですが、vbDatabaseCompare は Microsoft Access の検索モードを使用するので、対象データベースが Access の場合にのみ利用できるようです。

    対象が SQL Server として StrComp を使用する場合、Text, Binary のどちらかを選択する必要があり、SQL Server に依存したより詳細な順序付けが指定したい場合はパススルークエリなどを利用されるとよいのではないかと思います。(古いファイル形式の場合にどのような結果が返っているかにもよりますが、おそらく元DBの設定?)

    • 回答としてマーク W650 2010年8月30日 9:28
    2010年8月30日 7:48
  • おー、そういうことでしたか。フォローありがとうございます。
    Access 2010のヘルプを見てみました。以下のように書いてありました。オンラインのヘルプは見つけられませんでした。

    StrComp関数
    vbDatabaseCompare  Microsoft Access の場合のみ有効。データベースに格納されている設定に基づいて比較を行います。

    それにしてもわかりにくいエラー表示ですね。エラー表示のわかりにくさもフィードバック対象でしょう。


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/
    2010年8月30日 8:06
    モデレータ
  • accdb で StrComp() を含むクエリを投げたら、StrComp() は Access がローカル処理をしていました。

    adp のどの部分で StrComp をどのように利用されているかにもよるかもしれませんね。

    2010年8月30日 8:30
  • K.Takaokaさん、trapemiyaさん ありがとうございます。

    実は、今回、過去にAccess2000で作成したAccess プロジェクト(.adp)をAccess2010に移行する作業をやっておりまして、Access2000やAccess2003の時はエラーにならなかったのですが、Access2010で動かしたところエラーになってしまいました。
    確かに、Access2000のヘルプを参照すると同様のことが記述されていますね。

    strComp()を使用しているところは、単純な文字列比較で、Text または Binary で充分置き換え可能なレベルです。
    元々のコーディングは、3番目の引数(compare)を省略していて、Option Compare ステートメントが、Databaseとなっていたため、結果的に、vbDatabaseCompareを指定したのと同じ結果になっていました。コーディングをした者は別の者になるのですが、そこまで深く考えて使用していないように思われます。(お恥ずかしい話しですが...)

    というわけで、今回は、Text または Binary に置換えて対応したいと思います。
    エラー表示の仕方や、Access2000やAccess2003ではエラーにならなかったことを含めてフィードバックできればしたいと思います。

    ありがとうございました。

    2010年8月30日 9:18