sql
  • access-vba
  • 2017-02-10 9 views 0 likes 
    0

    カスタムVBA関数を使用してアクセスSQLクエリのWHERE IN関数のリストを作成しようとしていますが、動作しないようです。 GETLIST()関数は、私はこの場合には先頭と末尾の引用符の欠落など引用符で遊んで試みたWHERE IN条件でカスタムVBA関数を使用する方法

    Function getList() As String 
    
    If DCount("[CDP]", "[tblAdmin]", "[CDP] = '" & Environ("username") & "'") = 0 Then 
         getList= "'Performance', 'ReDeployment'" 
    Else 
         getList= "'Performance', 'ReDeployment', 'Absence'" 
    End If 
    
    End Function 
    

    でのクエリの簡易版を

    SELECT staffNo, [Staff Member], CoachingStage, 
    FROM tblCoachingStages 
    WHERE CoachingReason IN (getList()) 
    

    コードの下に示されていますコンパイラによって追加されますが、私はそれを動作させることはできません。

    私は、フォームのロード時にデータベースがロードされ、クエリがサブフォームを読み込むので、クエリのSQLを変更するためにqueryDefを使用しないようにしようとしています。すでにバックグラウンドでクエリを実行しています。

    ありがとうございました

    +0

    ?あなたのSQL文字列のdebug.printを追加するとどうなるでしょうか? – Minty

    答えて

    1

    私はこれがうまくいくとは思わない。 WHERE句が効果的にどちらかと(自分のDCOUNT関数の結果に応じて)出ているので、あなたの関数は、あなたに値を単一の文字列を返している:

    WHERE CoachingReason = "'Performance', 'ReDeployment'" 
    

    または

    WHERE CoachingReason = "'Performance', 'ReDeployment', 'Absence'" 
    

    をたぶん、あなたは試すことができる

    +0

    私の返事が遅れたことに対する謝罪、私はあなたの答えの前に金曜日に事務所を出ました。これはすごくうまくいく、私はこのようにするつもりはなかった。そんなにありがとうございます – Leroy

    0

    publicキーワードであるbasモジュールで関数getListを宣言するsoアクセスクエリでアクセスできます。テストのために、?getlist()のようなVBAコードの即時ウィンドウから関数を呼び出して、enterを押します。これはエラーではなく結果を返します。 関数の戻り値のハードコードされた値でクエリを実行した後、関数が文字列を返すときにクエリ構文とSQLがOKであることを確認します。

    +0

    こんにちは。はい、クエリはハードコードされた値で正しく実行されます。私は、クエリの一部として関数を実行するようにしようとしていました。私はSkippyの答えで今行くつもりです – Leroy

    1

    @Skippyが正しいです。クエリを実行する前に、イン・バリューを解決する必要があります。

    あなたは何ができる:あなたが取得しているどのようなエラー

    SELECT 
        staffNo, [Staff Member], CoachingStage 
    FROM 
        tblCoachingStages 
    WHERE 
        CoachingReason IN ('Performance', 'ReDeployment') 
        OR 
        CoachingReason = Nz(DLookup("'Absence'", "[tblAdmin]", "[CDP] = '" & Environ("username") & "'")) 
    
    +0

    グスタフありがとうございました。私が投稿した例題の質問が少し単純化され、getlistによって返された文字列が異なる値をたくさん含むことができるので、Skippyの答えに行くつもりです。ワイルドカードを使用するだけです。乾杯 – Leroy

    関連する問題