• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:DataAdapterのSELECT句に変数を使いたい)

DataAdapterのSELECT句に変数を使いたい

このQ&Aのポイント
  • Access2000とVB.NET2003で作ったアプリを手直ししています。アクセスのテーブルから読み込んでいたデータをアクセスクエリーで作ったビューから読み込むようにしたいと思っています。
  • データアダプタのSELECT文で日付の比較をするため、日付を変数に格納して対処したいと考えています。しかし、式1で変数を扱うことができず、エラーが起こる状況です。
  • VB.NETのバージョンに関わらず同じエラーが発生しているため、解決策を模索しています。どのように対処すれば良いかヒントを頂けませんか?

質問者が選んだベストアンサー

  • ベストアンサー
  • _rainman
  • ベストアンサー率84% (11/13)
回答No.2

SQLの問題なのでしょうか? そうであれば参考にしてください。(但し、SQLはSQLServerです) もう少し具体的な内容がわかれば又助言させて頂きます。 ■データ テーブル名[テーブル] [店舗コード] [売上日付] [売上金額] 001     2008-09-01 1000 001     2008-09-10 2000 001     2008-09-11 3000 001     2008-09-20 4000 001     2008-09-21 5000 001     2008-09-30 6000 001     2008-10-01 7000 001     2008-10-10 8000 001     2008-10-11 9000 001     2008-10-20 10000 001     2008-10-21 11000 001     2008-10-31 12000 ■SQL文 SELECT 店舗コード, 売上年月, SUM(DAY01_10) AS [1日~10日], SUM(DAY11_20) AS [11日~20日], SUM(DAY21_31) AS [21日~末日] FROM (     SELECT     店舗コード,     (年 + '/' + 月) AS 売上年月,     CASE WHEN 日 BETWEEN 1 AND 10 THEN 売上金額 END AS DAY01_10,     CASE WHEN 日 BETWEEN 11 AND 20 THEN 売上金額 END AS DAY11_20,     CASE WHEN 日 BETWEEN 21 AND 31 THEN 売上金額 END AS DAY21_31     FROM (         SELECT         店舗コード,         DATENAME(year,売上日付) AS 年,         DATENAME(month,売上日付) AS 月,         CONVERT(int,DATENAME(day,売上日付)) AS 日,         売上金額         FROM テーブル     ) AS T ) AS T1 GROUP BY 店舗コード,売上年月 ■結果 [店舗コード] [売上年月] [1日~10日] [11日~20日] [21日~末日] 001     2008/09  3000     7000    11000 001     2008/10  15000    19000    23000

danchor
質問者

お礼

ご回答有り難うございます。 まとめレスで失礼します。 以下の日付の部分を変数化すべく悩んでいたのですが、自己解決しました。 SELECT (前略  セレクト項目たくさんあり) SUM(IIf(([入出庫データ].[IODATE] >= #10/1/2008# AND [入出庫データ].[IODATE] < #11/1/2008#) AND [入出庫データ].[IOKUBUN_ID] = '1', [入出庫データ].[KOSUU] * Val([入出庫データ].[IOKUBUN_ID]), 0)) AS 入庫個数, round(SUM(IIf(([入出庫データ].[IODATE] >= #10/1/2008# AND [入出庫データ].[IODATE] < #11/1/2008#) AND [入出庫データ].[IOKUBUN_ID] = '1', [入出庫データ].[WEIGHT] * Val([入出庫データ].[IOKUBUN_ID]), 0) * 10), 0) / 10 AS 入庫数量,  (後略) 要はクエリビルダ内のペインでのみエラーが起こり、SQLのせいではなかった ことがわかり以下のように記述後正常に動作しています。 (セレクトコマンドテキストに記述してある箇所なのでダブルクォーテーションは無視してください) いろいろ説明不足のところご教示いただきまして有り難うございました。 SELECT (前略) SUM(IIf(([入出庫データ].[IODATE] >= #" & datestart & "# AND [入出庫データ].[IODATE] < #" & datenext & "#) AND [入出庫データ].[IOKUBUN_ID] = '1', [入出庫データ].[KOSUU] * Val([入出庫データ].[IOKUBUN_ID]), 0)) AS 入庫個数, round(SUM(IIf(([入出庫データ].[IODATE] >= #" & datestart & "# AND [入出庫データ].[IODATE] < #" & datenext & "#) AND [入出庫データ].[IOKUBUN_ID] = '1', [入出庫データ].[WEIGHT] * Val([入出庫データ].[IOKUBUN_ID]), 0) * 10), 0) / 10 AS 入庫数量, (後略) もっと簡単な方法等があれば、あるいはこのやり方に不適切なところがあれば引き続きご指摘 いただけないでしょうか。 よろしくお願いいたします。

その他の回答 (2)

  • ShowMeHow
  • ベストアンサー率28% (1424/5027)
回答No.3

>これまでアクセスのテーブルから読み込んでいたものを、アクセスクエリーで作ったビューから読み込むようにしたいと思っています。 何のためにvbを使っているのでしょうか? ADOなどを使ってMDBにSQLにて取得したほうが良いと思います。

danchor
質問者

お礼

ご回答有り難うございます。 まとめレスで失礼します。 以下の日付の部分を変数化すべく悩んでいたのですが、自己解決しました。 SELECT (前略  セレクト項目たくさんあり) SUM(IIf(([入出庫データ].[IODATE] >= #10/1/2008# AND [入出庫データ].[IODATE] < #11/1/2008#) AND [入出庫データ].[IOKUBUN_ID] = '1', [入出庫データ].[KOSUU] * Val([入出庫データ].[IOKUBUN_ID]), 0)) AS 入庫個数, round(SUM(IIf(([入出庫データ].[IODATE] >= #10/1/2008# AND [入出庫データ].[IODATE] < #11/1/2008#) AND [入出庫データ].[IOKUBUN_ID] = '1', [入出庫データ].[WEIGHT] * Val([入出庫データ].[IOKUBUN_ID]), 0) * 10), 0) / 10 AS 入庫数量,  (後略) 要はクエリビルダ内のペインでのみエラーが起こり、SQLのせいではなかった ことがわかり以下のように記述後正常に動作しています。 (セレクトコマンドテキストに記述してある箇所なのでダブルクォーテーションは無視してください) いろいろ説明不足のところご教示いただきまして有り難うございました。 SELECT (前略) SUM(IIf(([入出庫データ].[IODATE] >= #" & datestart & "# AND [入出庫データ].[IODATE] < #" & datenext & "#) AND [入出庫データ].[IOKUBUN_ID] = '1', [入出庫データ].[KOSUU] * Val([入出庫データ].[IOKUBUN_ID]), 0)) AS 入庫個数, round(SUM(IIf(([入出庫データ].[IODATE] >= #" & datestart & "# AND [入出庫データ].[IODATE] < #" & datenext & "#) AND [入出庫データ].[IOKUBUN_ID] = '1', [入出庫データ].[WEIGHT] * Val([入出庫データ].[IOKUBUN_ID]), 0) * 10), 0) / 10 AS 入庫数量, (後略) もっと簡単な方法等があれば、あるいはこのやり方に不適切なところがあれば引き続きご指摘 いただけないでしょうか。 よろしくお願いいたします。

  • miyuyu
  • ベストアンサー率61% (30/49)
回答No.1

こんにちは 式1~3はフィールドの別名を表示したいのでしょうか。 でしたら As を使えばよいと思います。 が、月によって表示が変わるのであれば 表示側(Form)のタイトルだけ変更して、データはフィールド名そのままで持ってくるのもアリかと思います。 >この式には 1日~10日・・式1 11日~21日・・式2  21日~末日・・式3 という風に >アクセスの中では明示的に #2008/10/01# とか書いています。 この辺の意味が、よく判りません。 WHERE句が、#2008/10/01# と言う事でしょうか。 もう少し説明がほしいところです。

danchor
質問者

お礼

ご回答有り難うございます。 まとめレスで失礼します。 以下の日付の部分を変数化すべく悩んでいたのですが、自己解決しました。 SELECT (前略  セレクト項目たくさんあり) SUM(IIf(([入出庫データ].[IODATE] >= #10/1/2008# AND [入出庫データ].[IODATE] < #11/1/2008#) AND [入出庫データ].[IOKUBUN_ID] = '1', [入出庫データ].[KOSUU] * Val([入出庫データ].[IOKUBUN_ID]), 0)) AS 入庫個数, round(SUM(IIf(([入出庫データ].[IODATE] >= #10/1/2008# AND [入出庫データ].[IODATE] < #11/1/2008#) AND [入出庫データ].[IOKUBUN_ID] = '1', [入出庫データ].[WEIGHT] * Val([入出庫データ].[IOKUBUN_ID]), 0) * 10), 0) / 10 AS 入庫数量,  (後略) 要はクエリビルダ内のペインでのみエラーが起こり、SQLのせいではなかった ことがわかり以下のように記述後正常に動作しています。 (セレクトコマンドテキストに記述してある箇所なのでダブルクォーテーションは無視してください) いろいろ説明不足のところご教示いただきまして有り難うございました。 SELECT (前略) SUM(IIf(([入出庫データ].[IODATE] >= #" & datestart & "# AND [入出庫データ].[IODATE] < #" & datenext & "#) AND [入出庫データ].[IOKUBUN_ID] = '1', [入出庫データ].[KOSUU] * Val([入出庫データ].[IOKUBUN_ID]), 0)) AS 入庫個数, round(SUM(IIf(([入出庫データ].[IODATE] >= #" & datestart & "# AND [入出庫データ].[IODATE] < #" & datenext & "#) AND [入出庫データ].[IOKUBUN_ID] = '1', [入出庫データ].[WEIGHT] * Val([入出庫データ].[IOKUBUN_ID]), 0) * 10), 0) / 10 AS 入庫数量, (後略) もっと簡単な方法等があれば、あるいはこのやり方に不適切なところがあれば引き続きご指摘 いただけないでしょうか。 よろしくお願いいたします。