人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

パラメータークエリ?というのを使って実行時エラー3601から抜け出したい

Accessで、Excelにデータを書き込むプログラムを動かしていますと、

---------------
実行時エラー"3601":
パラーメーターが少なすぎます。1を指定してください
--------------

というエラーが出てきまして、一向に希望通りの処理が行われず…。
調べますと、ある変数に格納された下記のSQL文。

-----------------------
select b.都道府県,count(B.都道府県) as 店舗実績
from(select a.都道府県,
a.担当者
from(select 都道府県,
担当者ID as 担当者
sum(目標値)/10 as ksum
from 概要テーブル
where 更新日 between 200401 and 200430
group by 都道府県,担当者ID
union all
select 都道府県
,担当者
,sum(契約件数) as ksum
from 契約詳細テーブル
where 更新日 between 200401 and 200430
group by 都道府県
,募集者
) as a
group by a.都道府県,
a.募集者
having sum(a.ksum) >= 0.5
) as b
group by b.都道府県
order by b.都道府県
------------------------

これに何か原因があるのでは?と考え、ネット上で色々と調べました。

●質問者: moon-fondu
●カテゴリ:コンピュータ 学習・教育
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

質問者から

(1)1885-1 | パラメータが少なすぎます。 - VB初心者友の会 - Q&A掲示板過去ログ
http://www.gizcollabo.jp/vbtomo/log/archive/vbqanda_1885_1.html

にありますように、where句の後の「更新日」の型が数値型なのがいけないのか?等と考えたりしましたが、
これを文字列型にすると別のエラーのダイアログが出てきたので、検討違いのようでした。
そしてさらに調べますと、

(2)パラメータクエリを含むSQLをVBAから実行する - hatena chips
https://hatenachips.blog.fc2.com/blog-entry-478.html

にありますように、パラメータークエリが存在するのが原因ではないかと考えまして。
上記SQLだけをAccessのクエリデザインで実行してみますと、「パラメーターの入力」というダイアログが出てきて、

------------
契約件数
(テキストボックス)
------------

が出てきます。つまり上記SQL内の「sum(契約件数)」という箇所の"契約件数"という項目に原因があるのでは?と推測したのですが。

(2)の記事を参考にしても、SQL文をどのように修正したら、3601エラーが解消できるのか、応用ができず…具体的にどうすればエラーから抜け出せるか、お知恵をお貸しいただければ幸いです。
よろしくお願い致しますm(__)m


1 ● chsm
●100ポイント

中に書いてる0.5が原因です。
別の数字に変更しろという意味だと思います。


moon-fonduさんのコメント
ご回答ありがとうございます。「1」に変えて実行してみたのですが。 ---------------------- エラー番号:3307 ユニオンクエリで選択した2つのテーブルまたはクエリの引数が一致しません。 ---------------------- というエラーが出てきてしまいました…。

chsmさんのコメント
返信遅れてすみません、 0.5と、ここに記載されていない2つのテーブル内の記述に問題があるのだと思います 設定した2つのテーブルないのデータを見せていただかないとちょっと苦しいです。

chsmさんのコメント
概要テーブルと契約詳細テーブルのことです。

moon-fonduさんのコメント
chsmさん失礼しました、再度テーブルが入っているファイルをアップしました。

chsmさんのコメント
ファイルを確認したら、何かの列が欠けているようです。

質問者から

皆さま、失礼しました。テーブルをこちら https://xfs.jp/mJk9Wn にアップしましたので、よかったら再度、ご確認いただけますと幸いです<m(__)m>
「概要テーブル」と「契約詳細テーブル」が入ってます。

最初の質問とエラー内容が変わってきておりますが…「演算子がありません」と出てきてしまいました。
下記のクエリを実行しようとした際です(ファイル内にはクエリとして保存されてないですが)。

--------------------------------------
select b.都道府県,count(B.都道府県) as 店舗実績
from(select a.都道府県,a.担当者
from(select 都道府県,担当者ID as 担当者,sum(目標値)/10 as ksum
from 概要テーブル
where 更新日 between 200401 and 200430
group by 都道府県,担当者ID
union all
select 都道府県,担当者,sum(契約件数) as ksum
from 契約詳細テーブル
where 更新日 between 200401 and 200430
group by 都道府県,担当者) as a
group by a.都道府県,a.担当者
having sum(a.ksum) >= 0.5) as b
group by b.都道府県
order by b.都道府県;
--------------------------------------

契約詳細テーブルに「契約件数」という列がないからでしょうか…でもテーブルを見ると、その列はやはり見当たらないような…もう1度、確認します。


2 ● a-kuma3
●1000ポイント ベストアンサー

質問の補足を受けて、確認してみました。

まず、これ。

最初の質問とエラー内容が変わってきておりますが…「演算子がありません」と出てきてしまいました。
下記のクエリを実行しようとした際です(ファイル内にはクエリとして保存されてないですが)。


多分、補足に貼りつけたままの SQL で実行していると思うのですが、インデントに全角の空白を使っているのがダメです。
半角の空白に置き換えると、最初の質問通りに、

上記SQLだけをAccessのクエリデザインで実行してみますと、「パラメーターの入力」というダイアログが出てきて

の状態になります。

これの原因は、「契約詳細テーブル」に、「契約件数」という列が無いからです。
勝手に想像するに、契約件数は担当者ごとに契約を取った件数でしょうから、こんな感じの SQL になるのではないかと思います。

select b.都道府県,count(B.都道府県) as 店舗実績
from(select a.都道府県,a.担当者
 from(select 都道府県,担当者ID as 担当者,sum(目標値)/10 as ksum
 from 概要テーブル
 where 更新日 between 200401 and 200430
 group by 都道府県,担当者ID
 union all
select 都道府県,担当者,count(担当者) as ksum
 from 契約詳細テーブル
 where 更新日 between 200401 and 200430
 group by 都道府県,担当者) as a
group by a.都道府県,a.担当者
having sum(a.ksum) >= 0.5) as b
group by b.都道府県
order by b.都道府県;

これで、とりあえずエラーはなくなります。
結果として抽出したデータに意味があるかどうかは、ちょっと疑問な感じはしますが。


moon-fonduさんのコメント
そうだったんですね、ありがとうございます。 確かにテーブルには「契約件数」という列がなく、これを実際に存在する列名にSQLを修正すると、プログラム全体でも「実行時エラー"3601":」は回避できました! ありがとうございます(^^)
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ