人に聞けない痔の悩み、これでスッキリ >>

すみません、、初めて質問しますが、
お手柔らかに宜しくお願い致します。

1.集計クエリ1
   ID--Group化 出庫数--合計 日付--Where条件
2..集計クエリ2
 ID--Group化 入庫数--合計 日付--Where条件

3.出力用クエリ
 ID 商品名 集計クエリ1の合計 集計クエリ2の合計
 IDと左結合で、上記のクエリを作成

デザインビューでは1~3は完成しており、

VBA上で1と2を3のSQLに置き換えるところで悩んでおります。。

どなたか教えてください。

ちなみに1.集計クエリの下記のように試してみましたが、

Dim dbs As DAO.Database
Dim qdf As QueryDef
Dim rst As DAO.Recordset

Set qdf = dbs.QueryDefs("Q_データ抽出をしたいクエリ")
With qdf
.Parameters("[Forms]![f_DataEx]![txt_YearStart]") = "2011"
.Parameters("[Forms]![f_DataEx]![txt_MonthStart]") = "02"
.Parameters("[Forms]![f_DataEx]![txt_DayStart]") = "23"
.Parameters("[Forms]![f_DataEx]![txt_YearEnd]") = "2011"
.Parameters("[Forms]![f_DataEx]![txt_MonthEnd]") = "02"
.Parameters("[Forms]![f_DataEx]![txt_DayEnd]") = "23"
Set rst = .OpenRecordset
End With

上記で求めた"rstを基にSQL文が実行できれば、実現できそうなんですが、
うまく行きません。

言葉足らずの内容もあるかと思いますが、宜しくお願い致します。

このQ&Aに関連する最新のQ&A

A 回答 (4件)

#1です。



> デザインビューでは1~3は完成しており、
1~3のクエリをSQLビューで表示して、開示できますか?
(クエリ1・2の日付--Where条件の年月日に関する列定義はどうなってる?)
    • good
    • 1

こういう事をやりたいのではと思います。


Parameters 何処 Text;
Select F1,F2 from t1 where F1 = [何処];
のようなSQLがあって
qDef.Parameters("何処") = "あそこ"
・・的なことをやって
qDef.Sql が
Select F1,F2 from t1 where F1 = 'あそこ';
のような感じにならないかな?という事でしたら
多分、出来ません。
以前さんざん悩んで結局玉砕しました。。。

結局、元のクエリのParameters句は無くして、それをひな形として、
そのSQLから一時的なクエリを作成し
sSql = qDef("Q1").SQL
sSql=replace(sSql,"何処","こっち") 的なことをしてWHERE句の部分を変換し
db.createquerydef("Q1_TMP")
qDef("Q1_TMP").sql = sSql
のようにしました。
以上、ご参考まで。
    • good
    • 0

> 上記で求めた"rstを基にSQL文が実行できれば、実現できそうなんですが、


> うまく行きません。

DAOのレコードセットと、SQLは全く別系統の物ですので、レコードセットをSQL文に渡すと言うことはできません。

> 3.出力用クエリ
>  ID 商品名 集計クエリ1の合計 集計クエリ2の合計
>  IDと左結合で、上記のクエリを作成
>
> デザインビューでは1~3は完成しており、

3.出力用クエリ がすでにできているのなら、そのクエリに対して、Parameters を設定すればいいかと思います。パラメータクエリを元にさらにクエリを作成した場合、親クエリは子クエリのパラメータを引き継ぎますので。
    • good
    • 0

> With qdf


> .Parameters("[Forms]![f_DataEx]![txt_YearStart]") = "2011"

テーブル・クエリの列名が[nYear]で、where [nYear]=[開始年] のような記述なら

.Parameters("[開始年]") = "2011"

のように、クエリのWhere条件で列に記述する名称を書くんじゃないですか?
    • good
    • 0
この回答へのお礼

早速の御回答有難うございます!!

Parametersに値を渡すところは出来て、Debug文で値を取得できるのは確認できました、、ただ、それを別のSQL文に渡せるのかどうかで悩んでおります、、

お礼日時:2012/09/06 22:22

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

関連するカテゴリからQ&Aを探す

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QVBAからクエリのパラメータを設定したいです。

いつもお世話になっております。

クエリーは全く同じ内容ですが、
複数のフォームにパラメータを入力するユーザーインターフェースのため、ク
エリーを複数用意して、それぞれに
[forms]![F_TEST]![テキスト名]というパラメータを設定し、フォームの帳票やレポートの帳票に出力していま
した。

このクエリを一本にして、VBAから動的にパラメータを参照するフォームを指定
できないでしょうか?

よろしくお願いいたします。

Aベストアンサー

再びmaruru01です。
既存のクエリもVBAのSQLステートメント化をお奨めします。
それを標準モジュールに、

Public Sub myRunSQL(Para As String)

  Dim SQL As String

  SQL = "(SQL文の前の方)" & Para & "(SQL文の後ろの方)"
  DoCmd.RunSQL SQL

End Sub

という風にそれぞれのクエリを各プロシージャにしておけば、どこからでも呼び出せるわけです。
すでに作ってあるクエリを書き直すのは面倒ですが、一度書いてしまえばあとは楽です。
また、まったく同じじゃないんだけど結構似てるというクエリは、プロシージャをコピーして名前と中身をかえてやればすぐ出来るわけです。
ちなみに私は、基本的には、クエリもマクロも使用せず、すべてVBAで書いています。
では。

QAccess パラメータクエリーをVBAで実行

初めての質問になります、宜しくお願いします。

Access2007でのPG開発を行っています。

Insertのパラメータクエリーを作成してました(以下Q_Inst)。

VBA側でパラメータをセットして実行するとエラーが出てしまいます。

実行時エラー3265
要求された名前、または・・・

dbCmd.CommandText = "Q_Inst"
dbCmd.CommandType = adCmdStoredProc
dbCmd.Parameters.Refresh
dbCmd.Parameters("[ID]") = 1 ' ←ここでエラー
dbCmd.Parameters("[Name]") = TanakaTarou
dbCmd.Parameters("[Birth]") = "1980/12/01"

ADODB.Command をあまり使わないので勝手がいまいち分かりません。
SELECT、INSERT、UPDATEは今までdbCon.Execute(strSQL)でstrSQLの中にべた書きしてました。

エラーの対処方法をご教授お願い致しますm( _ _ )m

初めての質問になります、宜しくお願いします。

Access2007でのPG開発を行っています。

Insertのパラメータクエリーを作成してました(以下Q_Inst)。

VBA側でパラメータをセットして実行するとエラーが出てしまいます。

実行時エラー3265
要求された名前、または・・・

dbCmd.CommandText = "Q_Inst"
dbCmd.CommandType = adCmdStoredProc
dbCmd.Parameters.Refresh
dbCmd.Parameters("[ID]") = 1 ' ←ここでエラー
dbCmd.Parameters("[Name]") = TanakaTarou
dbCmd.Parameters("[Birt...続きを読む

Aベストアンサー

以下もみてください。

ADOでのパラメータクエリの使用例

http://www.accessclub.jp/ado/createparameter.html
http://www.accessclub.jp/ado/refresh.html

QAccessのRefresh・Requery・Repaintの違い

Requeryはもう一度ソースレコード(テーブル)を読み込むようです。このとき、テーブルの先頭レコードに移動してしまいます。
Refreshは最新のレコード(テーブル)を再表示するような気がします。レコードの移動は起こらない気がします。
Repaintは、VBAでキャプションなどを変更したとき使っています。
でも、よくわかっていません。
どんなときにどんなメソッドを使えばいいのでしょうか?
詳しい方、よろしくお願いいたします。

Aベストアンサー

たびたびすみません。
調べてたらこんなのがでてきました。
http://www.nurs.or.jp/~ppoy/access/access/acF007.html

参考URL:http://www.nurs.or.jp/~ppoy/access/access/acF007.html

QVBとアクセスでSQL文に変数を使いたいのですが

したいことはレコードの挿入をSQL文で変数を使用して処理したいのですがうまく動作してくれません

StrSQL_1 = _
"insert into 行先情報テーブル (社員ID, 行先, 帰社予定時刻, 備考)" & _
"values (7,'(変数1)','(変数2)','(変数3)')"

変数の部分が置き換わりません、いろいろ調べてみたのですがどうもわかりませんvaluesでは変数を使えないのでしょうか?

もしそうだとするとどのようにすればレコードを挿入するSQL文で変数を利用できるのかをおしえていただけないでしょうか

Aベストアンサー

文字列なんで、&で連結すればOKです。

StrSQL_1 = _
"insert into 行先情報テーブル (社員ID, 行先, 帰社予定時刻, 備考)" & _
"values (7,'" & 変数1 & "','" & 変数2 & "','" &(変数3)& "')"

QAccess サブフォームでの選択行の取得

こんにちは。

Access初心者です。

サブフォームでテーブルの項目を表示させていますが、
選択された行を取得する方法はありますか?
サボフォームの下の方に現在選択されているレコード数が表示されてますが、その値でかまいません。

調べているのですが、なかなか検討がつきません。
宜しくお願い致します。

Aベストアンサー

フォーム名がフォーム1、サブフォームコントロールの名前がサブフォーム1だとすると、

Forms!フォーム1!サブフォーム1.Form.CurrentRecord

で取得できます。
(「Forms」と「Form」がありますのでご注意下さい)


また、フォーム1にコードを記述する場合であれば

Me!サブフォーム1.Form.CurrentRecord

サブフォーム1へのコード記述であれば

Me.CurrentRecord

という構文によっても、それぞれ取得が可能です。

QACCESSで空白のデーターをクエリで判定/識別する方法を教えてくださ

ACCESSで空白のデーターをクエリで判定/識別する方法を教えてください。
EXCELでは空白を""で判定/識別表していますがACCESSではどうなるのでしょうか。

下の例はフィールドに試験番号があればその番号を、空白なら”欠席”と表示しようとしています。
IIf(([試験番号]="空白の場合何を入れる?"),[試験番号],"欠席")

Aベストアンサー

もうひとつの書き方は
式1: IIf([試験番号] Is Not Null,[試験番号],"欠席")
第2、第3引数の、質問の順序にあわせるとこうなる。

QVBAのAccessでDATE型のINSERT

テーブルに今日の日付でインサートしたいのですが、なぜか、まったく違う日付になってしまいます。
わかる方教えてください。
よろしくお願いします。

INSSQL = "INSERT INTO aaa(test)" _
& " Values(" & Format   (Date, "yyyy/mm/dd") & ");"

Aベストアンサー

INSSQL = "INSERT INTO aaa(test)" _
& " Values(#" & Format(Date, "mm/dd/yyyy") & "#);"

こうかな?

QVBAをつかってクエリの情報を抽出するには??

ACCESS VBAを使ってプログラムを組んでいるVBA初心者です。ヘルプやいろんなHPを参考にしているのですが、どうしてもわからないことがあるのでおしえてください。
クエリの情報をフォームの日付から抽出し、csvファイルを作成するというものを作ろうとしています。
クエリの抽出条件でフォームの日付の期間で抽出するようにしてあります。
VBAにてOpenRecordsetでクエリから情報を抽出しようとするのですがクエリがありませんとエラーをはかれてしまいます。クエリの指定方法がまちがっているのでしょうか?
また、以下の方法とは別の方法でクエリから抽出するやりかたがありましたら教えていただけませんでしょうか?よろしくお願いいたします。
以下にどのように記述しているか記します。
------------
Public Function value()
On Error GoTo ERRORRR
Set db = CurrentDb
Dim rs As Recordset

Set rs = db.OpenRecordset("[開通チェック]", dbOpenDynaset)
Debug.Print rs.EOF
Do Until rs.EOF
Debug.Print rs!ID
Debug.Print rs!登録状態
Debug.Print rs!開通年月日
rs.MoveNext
Loop
rs.Close: Set rs = Nothing
db.Close: Set db = Nothing
Exit Function
ERRORRR:
msgbox Err.number & ":" & Err.description
End Function

--------
開通チェック:クエリ (開通年月日には Between [Forms]![開通チェック]![開始日] And [Forms]![開通チェック]![終了日] の抽出条件が書かれています。)

使用しているACCESS Ver:ACCESS97

ACCESS VBAを使ってプログラムを組んでいるVBA初心者です。ヘルプやいろんなHPを参考にしているのですが、どうしてもわからないことがあるのでおしえてください。
クエリの情報をフォームの日付から抽出し、csvファイルを作成するというものを作ろうとしています。
クエリの抽出条件でフォームの日付の期間で抽出するようにしてあります。
VBAにてOpenRecordsetでクエリから情報を抽出しようとするのですがクエリがありませんとエラーをはかれてしまいます。クエリの指定方法がまちがっているのでしょうか?
...続きを読む

Aベストアンサー

パラメータがあるクエリはパラメータをParametersで入れてあげないと開けません。
パラメータを読み取れないのでRecordsetにクエリを渡せない状態でエラーが出ていると思います。

Dim db as Database
Dim qd as QueryDefs
Dim rs as Recordset
Dim pr1 As Date, pr2 As Date

Set db = CurrentDb()

pr1 = Format(Forms("開通チェック")("開始日"), "yyyy/mm/dd")
pr2 = Format(Forms("開通チェック")("終了日"), "yyyy/mm/dd")

Set qd = db.QueryDefs("開通チェック")
qd.Parameters("pr1").Value = pr1
qd.Parameters("pr2").Value = pr2

Set rs = qd.OpenRecordSet() 'ここでRecordsetにクエリを渡します。

これでいけると思います。

パラメータがあるクエリはパラメータをParametersで入れてあげないと開けません。
パラメータを読み取れないのでRecordsetにクエリを渡せない状態でエラーが出ていると思います。

Dim db as Database
Dim qd as QueryDefs
Dim rs as Recordset
Dim pr1 As Date, pr2 As Date

Set db = CurrentDb()

pr1 = Format(Forms("開通チェック")("開始日"), "yyyy/mm/dd")
pr2 = Format(Forms("開通チェック")("終了日"), "yyyy/mm/dd")

Set qd = db.QueryDefs("開通チェック")
qd.Parameters("pr1")....続きを読む

QAccessのフォームのみ表示させたい

Accessを起動した際、フォームのみ表示するにはどうすればよいのでしょうか?
(Accessを起動すると、オブジェクトメニュー?(テーブルやクエリ等のオブジクトを選択するウィンドウ)を表示させないで、フォームのみを表示させるには?)
また、上記と同じようにして、なおかつAccessを起動させないでフォームで起動や終了といったことが出来るのでしょうか?
やはりこれはVB等プログラミングでないと出来ないのでしょうか?ちなみに私はプログラミングは全く出来ません。
わかる方、教えて下さい。宜しくお願いします。

Aベストアンサー

ツールメニュー
”起動時の設定”を開き

フォーム/ページの表示にて起動時に表示させたいフォームを選択すれば、そのMDBを開いた時に、該当のフォームが表示されます。

メニュー画面等を作り、各処理のフォームを開いたり、アクセスを終了するマクロを呼び出すボタンを作ればフォームからの終了等も可能です。

また、データベースウィンドウの表示のチェックボックスを外せば、質問者様の言われているオブジェクトメニューは表示されなくなります。

メンテナンス等を行いたい時はshiftキーを押下しながら立ち上げればデータベースウィンドウが表示できます。

QAccessでグローバル変数を宣言して定数を定義したい

Access97でグローバル変数を持ちたいと思ったのですが、
それらしきものが見つかりません。

Public変数というものがあるのですが、これはプロシージャ-単位で
しか定義できないようです。

ひとつのデータベース全体でグローバルに定義できる定数を持ちたいのです。
たとえば、データベース内で頻繁に読み込む必要があるファイルのPATH
"C:\Program Files\Netscape\Communicator\"を
固定で持っておきたい。

何か方法はないでしょうか?
よろしくお願いします。

Aベストアンサー

もし、定数でいいのであれば、
標準モジュールに、

Const DATAPATH = "C:\Program Files\Netscape\Communicator\"

のように書けば、どこからでもDATAPATHと言う名前で参照することができます。

変数である必要があるのなら、同じく標準モジュールに、

Global glbDataPath as String

Public Sub PathSet()

glbDataPath = "C:\Program Files\Netscape\Communicator\"

Exit

と書いておき、AutoExecマクロのモジュールを開くでPathSetサブルーチンを呼び出せばよいと思います。


人気Q&Aランキング