- ベストアンサー
DataAdapterのSELECT句に変数を使いたい
- Access2000とVB.NET2003で作ったアプリを手直ししています。アクセスのテーブルから読み込んでいたデータをアクセスクエリーで作ったビューから読み込むようにしたいと思っています。
- データアダプタのSELECT文で日付の比較をするため、日付を変数に格納して対処したいと考えています。しかし、式1で変数を扱うことができず、エラーが起こる状況です。
- VB.NETのバージョンに関わらず同じエラーが発生しているため、解決策を模索しています。どのように対処すれば良いかヒントを頂けませんか?
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
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
その他の回答 (2)
- ShowMeHow
- ベストアンサー率28% (1424/5027)
>これまでアクセスのテーブルから読み込んでいたものを、アクセスクエリーで作ったビューから読み込むようにしたいと思っています。 何のためにvbを使っているのでしょうか? ADOなどを使ってMDBにSQLにて取得したほうが良いと思います。
お礼
ご回答有り難うございます。 まとめレスで失礼します。 以下の日付の部分を変数化すべく悩んでいたのですが、自己解決しました。 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)
こんにちは 式1~3はフィールドの別名を表示したいのでしょうか。 でしたら As を使えばよいと思います。 が、月によって表示が変わるのであれば 表示側(Form)のタイトルだけ変更して、データはフィールド名そのままで持ってくるのもアリかと思います。 >この式には 1日~10日・・式1 11日~21日・・式2 21日~末日・・式3 という風に >アクセスの中では明示的に #2008/10/01# とか書いています。 この辺の意味が、よく判りません。 WHERE句が、#2008/10/01# と言う事でしょうか。 もう少し説明がほしいところです。
お礼
ご回答有り難うございます。 まとめレスで失礼します。 以下の日付の部分を変数化すべく悩んでいたのですが、自己解決しました。 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 入庫数量, (後略) もっと簡単な方法等があれば、あるいはこのやり方に不適切なところがあれば引き続きご指摘 いただけないでしょうか。 よろしくお願いいたします。
お礼
ご回答有り難うございます。 まとめレスで失礼します。 以下の日付の部分を変数化すべく悩んでいたのですが、自己解決しました。 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 入庫数量, (後略) もっと簡単な方法等があれば、あるいはこのやり方に不適切なところがあれば引き続きご指摘 いただけないでしょうか。 よろしくお願いいたします。