2016-05-27 18 views
0

MS Accessのレコードソースに構文エラー(「オペレータが見つかりません」)が表示されます。 SQL Server 2012は問題なく実行しますが、Access 2016に実行させるとこのエラーが発生します。私はAccessには別のケース・ステートメントの要件があると思いますが、わかりません。MS Accessクエリの構文エラー

SELECT 
    r.Rubrieknaam, 
    CASE 
     WHEN (SELECT count(Voorwerpnummer) 
      FROM VoorwerpInRubriek 
      WHERE rubrieknummer = r.Rubrieknummer) IS NULL 
      THEN 0 
      ELSE (SELECT count(Voorwerpnummer) 
       FROM VoorwerpInRubriek 
       WHERE rubrieknummer = r.Rubrieknummer) 
    END AS [nInRubriek], 
    CASE 
     WHEN (SELECT Count(*) 
      FROM Rubriek 
      WHERE HoofdrubriekNr = r.rubriekNummer) IS NULL 
      THEN 0 
      ELSE (SELECT Count(*) 
      FROM Rubriek 
      WHERE HoofdrubriekNr = r.rubriekNummer) 
    END AS [nSubrubrieken], 
    CASE 
     WHEN (SELECT Rubrieknaam 
      FROM Rubriek 
      WHERE Rubrieknummer = r.hoofdrubrieknr) IS NULL 
      THEN 'N.V.T.' 
      ELSE (SELECT Rubrieknaam 
      FROM Rubriek 
      WHERE Rubrieknummer = r.hoofdrubrieknr) 
    END AS [Hoofdrubrieknaam] 
FROM 
    Rubriek r; 

誰でも問題が分かっていますか?

ありがとうございます。

+1

MS Accessは 'case'をサポートしていません。さらに、サブクエリの 'count()'は 'NULL'を返しません。' 0'を返します。 –

答えて

2

はい。 CASE-ELSEはT-SQLです。

Access SQLでIIf(expression, true expression, false expression)を使用してください。

+0

これは問題を解決していただきありがとうございます。しかし、クエリのパフォーマンスに大きな影響を与えましたので、私のフォームには使用しないことにしました。これは、私が探していた質問に対する答えでした。 – Stefan

1

クエリは次のようになります。

SELECT r.Rubrieknaam, 
     (SELECT count(Voorwerpnummer) FROM VoorwerpInRubriek WHERE rubrieknummer = r.Rubrieknummer 
     ) AS [nInRubriek], 
     (SELECT Count(*) FROM Rubriek WHERE HoofdrubriekNr = r.rubriekNummer 
     ) AS [nSubrubrieken], 
     NZ(Rubrieknaam, "N.V.T.") AS [Hoofdrubrieknaam] 
FROM Rubriek r; 

条件付きロジックであっても必要とされていません。

+0

はい私はそれを見つけ出し、私のクエリを元のクエリ(あなたが送信したものに似ています)に返しました。0またはNULLが問題を作成したと思うように、無効な数値に関するエラーが発生しました。ただし、問題は、データベースへの接続でエラーが発生し、無効な値が返されていたことです。助けてくれてありがとう。 – Stefan

関連する問題