2

重複の可能性:
アクセスデータベースでNullをゼロに変換する

Microsoft Visual Web Developer2010Expressを使用してASP/VB.NETページを作成し、Microsoft OfficeAccess07に接続しています。これが私の問題です。

このページには、DataTableのフィルタリングに使用する3つのドロップダウンリストがあり、Accessで完全に機能するこのAccess SQLクエリがありますが、VB.netからSQLを実行しようとすると、常にエラーが表示されます。 。「式の未定義関数'Nz'。」

バグがある可能性があることを確認しましたが、解決策が見つかりません。

VB.NETコード:

Shared Function SelectFilterWomen(ByVal tTypeCode As Integer, ByVal bBrandCode As Integer, ByVal sSize As Integer) As DataTable
    Dim Command As New OleDbCommand()
    Command.CommandText = "QUERY;"
    Command.Connection = DB.Conn()
    Command.Parameters.AddWithValue("@tTypeCode", tTypeCode)
    Command.Parameters.AddWithValue("@bBrandCode", bBrandCode)
    Command.Parameters.AddWithValue("@sSize", sSize)
    Dim Table As New DataTable("FilterWomen Shoes")
    Table.Load(Command.ExecuteReader())
    Return Table

質問:

SELECT S.sShoes_ID , S.sPicture, S.sSize , S.sPrice 
FROM ((Shoes S INNER JOIN Type T ON S.tTypeCode = T.tTypeCode)
INNER JOIN Brand B ON S.bBrandCode = B.bBrandCode) 
WHERE S.tTypeCode = Nz(@tTypeCode, T.tTypeCode) 
AND S.bBrandCode = Nz(@bBrandCode, B.bBrandCode) 
AND S.sSize = Nz(@sSize, S.sSize) 
AND S.sSex = 'Female' AND S.sActive = 'Y';

ありがとう

4

2 に答える 2

2

Accessクエリは、Expression Serviceが使用可能な場合にのみ、 VBA関数(およびユーザー定義関数)を使用できます。また、Expression Serviceは、Accessアプリケーションインスタンス内からのみ利用できます。

OleDbを使用してDot.NetからAccessデータベースファイルに接続する場合、Accessアプリケーションインスタンス(そのdbエンジンのみ)に接続していないため、ExpressionServiceを使用できません。したがって、クエリでVBAまたはユーザー定義関数を使用することはできません。dbエンジンによって実装される関数のみに制限されます。

したがって、何を試しても、VBA関数を含むクエリは、 「式の未定義関数'Nz'」エラーNz()をトリガーします。Accessのdbエンジンは、それを支援するExpressionServiceがないと何ができるかを知りません。Nz()

に代わるものを探してくださいNz()。多くの場合、IIf関数が適切な代替となります。

構文
IIf(expr、truepart、falsepart)

クエリでは、次のようなことを行うことができます。

SELECT IIf([SomeField] Is Null, "unavailable", [SomeField])
FROM YourTable;

VBA機能を知っている場合IIf()、これは矛盾のように聞こえるかもしれません。IIf()ただし、dbエンジンには、 VBAとは動作が異なる独自の実装が含まれていますIIf()truepartがTrueの場合のdbエンジンのIIf()「短い回路」なので、その状況ではfalsepartを評価しません。TruepartがTrueの場合でも、VBAは常にtruepartfalsepartの両方を評価します。IIf()

于 2012-04-09T19:09:30.793 に答える
0

isnullの代わりに使用してくださいNz。IsnullはSQL標準関数でNzあり、アクセス専用です。

于 2012-04-08T17:13:25.180 に答える