2012-04-08 13 views
2
から

を実行:
Convert Null to zero in access databaseアクセスのSQL:Nzの()関数は、可能性の重複VBD

私はASP/VB.NETページを作成するには、MicrosoftのVisual Web Developerの2010のExpressを使用しています私の問題は次のとおりです。

このページには3つのドロップダウンリストがあり、DataTableをフィルタリングするために使用されます。この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 

QUERY:

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'; 

おかげ

答えて

2

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

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

VBA Nz()関数を含むクエリは、 "未定義関数 'Nz' in expression"というエラーをトリガします。 Access 'dbエンジンは、これを助けるために式サービスなしのNz()が何であるかを知らない。

Nz()の代替品を探してください。多くの場合、IIf Functionは良い代用品になります。

構文
式IIf(exprの、truepart、falsepart)クエリで

、あなたはこのような何かを行うことができます:

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

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

+0

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

0

利用isnullの代わりNz。 IsnullはSQL標準関数で、Nzはアクセス専用です。

+0

isNullはセルに空のセルが含まれているかどうかを確認します – Dav

+0

@ user1319587あなたは 'is null'を考えています。ベンは 'isnull'を考えています:http://msdn.microsoft.com/en-us/library/ms184325.aspx – phoog

+0

T-SQL ISNULLはAccess ISNULLと同じではありません。 – HansUp