0

かなり前にまとめた VBA/SQL コードを使用する Access UDA があり、最近、特定のクエリを調整して 2 つの基準を除外するように依頼されました。単純に SQL AND OR ステートメントを追加できると思っていましたが、この単純な修正を機能させるためにかなりの苦労をしてきました。

私の元のコード:

SELECT * FROM [Master List] 
WHERE ([Master List].IB)='" & strIBTO & "' AND ([Master List].[Type])<>'N'"

これは、Type = "N" を含まない特定の渡された変数 "strIBTO" の結果を正しく返します。

基本的に、クエリから別のタイプも除外することが求められているため、コードを変更しました。

SELECT * FROM [Master List] 
WHERE ([Master List].IB)='" & strIBTO & "' AND ([Master List].[Type])<>'N' OR ([Master List].[Type])<>'T'" 

「N」と「T」の両方を含む結果を取得しているため、Access が AND ステートメント全体を破棄しているようです。AND ステートメント全体とその内部を括弧で囲んでさまざまな順列を試しましたが、正しい結果が得られません。

VBA SQL は MySQL と AND/OR の入れ子が異なりますか? 私は何を間違っていますか?

4

3 に答える 3

2

私の理解が正しければ、タイプ「N」に加えてタイプ「T」も除外しようとしています。以下を含むいくつかのオプションがありますが、これらに限定されません。

SELECT * FROM [Master List] 
WHERE ([Master List].IB)='" & strIBTO & "'
AND ([Master List].[Type])<>'N'
AND ([Master List].[Type])<>'T'

または(再度更新する方が簡単)

SELECT * FROM [Master List] 
WHERE ([Master List].IB)='" & strIBTO & "'
AND ([Master List].[Type]) NOT IN ('N', 'T')
于 2013-09-11T22:45:19.607 に答える
0

適切にブラケットしていないように見えます。これを置き換えます:

WHERE ([Master List].IB)='" & strIBTO & "' AND ([Master List].[Type])<>'N' OR ([Master List].[Type])<>'T'"

これとともに:

WHERE ([Master List].IB)='" & strIBTO & "' AND (([Master List].[Type])<>'N' AND ([Master List].[Type])<>'T') 

適切に括弧を付けたら、上で行ったように、その OR を AND に変更する必要があります。

于 2013-09-11T22:46:32.560 に答える
0

これは初等ブール代数です!

[Master List].[Type]<>'N' OR [Master List].[Type]<>'T'常にセット全体を返します!

反対に考えてください: set からs 個以上の s[Master List].[Type]='N' OR [Master List].[Type]='T'を返します。NT

これに対する否定は次のとおりです。

[Master List].[Type]<>'N' AND [Master List].[Type]<>'T'
于 2013-09-12T13:39:05.930 に答える