C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[1]: 0がNullとなる


(過去ログ 92 を表示中)

[トピック内 7 記事 (1 - 7 表示)]  << 0 >>

■54932 / inTopicNo.1)  0がNullとなる
  
□投稿者/ だい (57回)-(2010/11/10(Wed) 15:17:58)

分類:[VB.NET/VB2005 以降] 

mdbでInt32であるフィールドに条件を付けてSumするとなぜか0(ゼロ)の場合、Nullとして返ってきます。

Nullは0とする方法ありますでしょうか。

Nz関数を使ってみましたが、未定義関数としてエラーになりました。
引用返信 編集キー/
■54933 / inTopicNo.2)  Re[1]: 0がNullとなる
□投稿者/ 魔界の仮面弁士 (1921回)-(2010/11/10(Wed) 17:33:07)
No54932 (だい さん) に返信
> mdbでInt32であるフィールドに
Jet で Int32 型に相当するのは、INTEGER 型ですね。

> 条件を付けてSumするとなぜか0(ゼロ)の場合、Nullとして返ってきます。
その条件に合致するレコードが無かったのでは?

> Nullは0とする方法ありますでしょうか。
VB 側で置き換えれば良いかと。

> Nz関数を使ってみましたが、未定義関数としてエラーになりました。
Nz は Jet の関数では無く、Access の関数です。
JET SQL の場合は IIF 関数で代用してみてください。
引用返信 編集キー/
■54937 / inTopicNo.3)  Re[1]: 0がNullとなる
□投稿者/ shu (164回)-(2010/11/11(Thu) 07:52:27)
No54932 (だい さん) に返信

IsNull , IsDBNullあたりです。
引用返信 編集キー/
■54943 / inTopicNo.4)  Re[2]: 0がNullとなる
□投稿者/ 魔界の仮面弁士 (1922回)-(2010/11/11(Thu) 10:26:30)
No54933 (魔界の仮面弁士) に追記
>>Nullは0とする方法ありますでしょうか。
>>Nz関数を使ってみましたが、未定義関数としてエラーになりました。
> Nz は Jet の関数では無く、Access の関数です。
> JET SQL の場合は IIF 関数で代用してみてください。

たとえば、SQL 側で対応する場合は
 「SUM(COL1)」
としていた部分を
 「IIF(SUM(COL1) IS NULL, 0, SUM(COL1))」
と書くことができます。


>>mdbでInt32であるフィールドに
> Jet で Int32 型に相当するのは、INTEGER 型ですね。

「INTEGER」のほか、その別名である「INT」「LONG」「INTEGER4」型も
数値型(長整数型) を意味しますね。
http://office.microsoft.com/ja-jp/access-help/HP001032229.aspx

(Int32 という型名は、VB 側では使えますが mdb 側では使えません)
引用返信 編集キー/
■55044 / inTopicNo.5)  Re[3]: 0がNullとなる
□投稿者/ だい (58回)-(2010/11/15(Mon) 18:16:27)
No54943 (魔界の仮面弁士 さん) に返信
> ■No54933 (魔界の仮面弁士) に追記
> >>Nullは0とする方法ありますでしょうか。
> >>Nz関数を使ってみましたが、未定義関数としてエラーになりました。
>>Nz は Jet の関数では無く、Access の関数です。
>>JET SQL の場合は IIF 関数で代用してみてください。
>
> たとえば、SQL 側で対応する場合は
>  「SUM(COL1)」
> としていた部分を
>  「IIF(SUM(COL1) IS NULL, 0, SUM(COL1))」
> と書くことができます。
>
>
> >>mdbでInt32であるフィールドに
>>Jet で Int32 型に相当するのは、INTEGER 型ですね。
>
> 「INTEGER」のほか、その別名である「INT」「LONG」「INTEGER4」型も
> 数値型(長整数型) を意味しますね。
> http://office.microsoft.com/ja-jp/access-help/HP001032229.aspx
>
> (Int32 という型名は、VB 側では使えますが mdb 側では使えません)

ありがとうございます。
ご提示いただいたようにIIFを使ってみましたが、クエリビルダでISが不正であるとエラーになります。
引用返信 編集キー/
■55046 / inTopicNo.6)  Re[4]: 0がNullとなる
□投稿者/ 魔界の仮面弁士 (1932回)-(2010/11/15(Mon) 20:48:16)
No55044 (だい さん) に返信
>> 「IIF(SUM(COL1) IS NULL, 0, SUM(COL1))」
> ご提示いただいたようにIIFを使ってみましたが、クエリビルダでISが不正であるとエラーになります。

Access のクエリビルダでは、この SQL を処理できるのですけれどね…。JET 側では
 SELECT IIF(SUM(COL1) IS NULL, 0, SUM(COL1)) AS GOKEI FROM TBL WHERE COL2 = 1
のような SQL を処理できますし。

Visual Studio のクエリビルダを使わずに、DataAdapter に SQL 文字列を
直接指定して読んでみてください。これなら実行できると思います。


もしも TableAdapter を使いたいのであれば、あまり複雑な構文には
対応できないので、とりあえず『仮のSQL』として
 SELECT IIF(0, 0, SUM(COL1)) AS GOKEI FROM TBL WHERE COL2 = 1
のような、単純な(しかし正しくない)SQL でクエリビルダを騙しておき、後から、

 (案1) デザイナの CommandText 部に、正しい SQL を「一行」にしてコピー & ペーストする。
  ([...]ボタンで起動されるクエリビルダは使わず、プロパティペインに直接貼り付ける)

 (案2) xsd ファイルを右クリック→[ファイルを開くアプリケーションの選択]→[XML エディタ]で開き、
  先ほどの仮SQL を正しいものに差し替える。

のようにして、正しい SQL に後修正するという手法もあります。
引用返信 編集キー/
■55047 / inTopicNo.7)  Re[5]: 0がNullとなる
□投稿者/ 魔界の仮面弁士 (1933回)-(2010/11/15(Mon) 20:53:43)
No55046 (魔界の仮面弁士 さん) に返信
> Access のクエリビルダでは、この SQL を処理できるのですけれどね…。JET 側では
>  SELECT IIF(SUM(COL1) IS NULL, 0, SUM(COL1)) AS GOKEI FROM TBL WHERE COL2 = 1
> のような SQL を処理できますし。

ISNULL 関数を使う方法であれば、Visual Studio のクエリビルダでも解釈してもらえるようです。

SELECT IIF(ISNULL(SUM(COL1)), 0, SUM(COL1)) AS GOKEI FROM TBL WHERE COL2 = 1
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -