選択クエリの抽出条件はデザインビューの「抽出条件」欄に直接条件式を書き込むのが普通だと思いますが、この条件式をVBAで記述することは出来るでしょうか?

DoCmd.RunSQL ではアクションクエリしか実行できないようだし、
DoCmsOpenQuery では引数に抽出条件を指定することが出来ないし困っています。

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

A 回答 (3件)

おつかれさま~(^_^)


惜しいですね!
もう少しですね

さてさて、明日出張なので今日はたぶん最後のレスになってしまいますが、
ちなみに明日は返答できないのであしからず。。。

> Forms("サブフォーム").RecordSource = strSQL
駄目でしたか。。。

もし私が記載した内容で埋め込みのサブフォームを
利用しているのであれば
自分を参照する為に「Me」を使って

Me.埋め込みフォーム.Form.RecordSource = StrSQL
Me.埋め込みフォーム.Requery

に変更すれば動くと強く思います。
# 念じてます(^^)

ちなみに、
Me.
と打ち込んだ時点でオートコンプリート(名称あってるかな~)
機能が働いて参照できるオブジェクトが表示される
はずです。
その中にKojiさんが書いた埋め込みオブジェクトが
きっとあるはず
もしかすると"FormA"とか名前を付けたつもりでも
Visual Basic Editor君が気を利かせて
Form_formA
とかになってる場合があります。
最近やってないんでうろ覚えなんですが、こんな処を注意すれば大丈夫!

追伸
このコードって検索とかで使えますから
覚えておくときっと役に立ちますよ♪
    • good
    • 1
この回答へのお礼

ありがとうございます。
>Me.埋め込みフォーム.Form.RecordSource = StrSQL
>Me.埋め込みフォーム.Requery
ばっちり正常に機能しました。
感激です!
>覚えておくときっと役に立ちますよ♪
とりあえず自作テンプレート集に収録しておきました。(^v^)

お礼日時:2002/03/10 21:28

こんにちは(^^)




>> 選択クエリーを読み込んで何をするか? が重要なところだと思いますが
> 今回の場合は単に抽出条件を指定して表示したいだけなのです。

この場合単に表示するという記載ですが
「指定したフォームのレコードソースに指定した選択クエリーを入れてあげる」
という事だと思います。たぶん...


> この文字列を選択クエリを開くときの条件として指定したいのです。

実際にはVBAで処理をするという事なので
こんなフォームが欲しいのではないでしょうか?

親フォームにテキストボックス2ヶとコマンドボタンを配置する。
たとえば名称は下記と仮定する。
Text1
Text2
Commnd1

サブフォームに選択クエリーを表示する表を配置する。
サブフォームのレコードソースは適当な物にしておく。
(たとえば日付で選択していない物など)

コマンドボタンクリックイベントにコードを書き込む

Dim StrSQL as String 'SQL文を代入する
dim Dtm1 , Dtm2 as Date '日付を入れる
dim Str1 , Str2 as String

Date型で入力されているかのエラーチェックをしておく。
IsNull 関数あたりで IF 文あたりで行う。
dtm1 = Txet1
dtm2 = Txet2

「Text1 < Text2」 の条件になるかどうかのエラーチェック

SQLは文字列しか使えないので、日付型からFormat関数あたりで
文字列に変更し各 Str1 , Str2 に代入する。
この辺りはヘルプを参照してください。

StrSQL = "選択クエリーをカットアンドペーストで入れる"
StrSQL = StrSQL & "長いようだったらわけて見やすく"
StrSQL = StrSQL & "日付の前まで入れてあげる"
StrSQL = StrSQL & Str1 'ここで"2002/4/1"みたいな物を代入する事に
StrSQL = StrSQL & "# and < #"
StrSQL = StrSQL & Str2 'ここの説明は同様
StrSQL = StrSQL & "最後の文章"

これでSQL文が完成するので

サブフォーム名.レコードソース = StrSQL
( ↑日曜日なのでスペルは思い出せない...)
あたりで代入すればOKのはずですが...
あ、最後にサブフォームをリクエリーすれば完成じゃないでしょうか?

どうでしょう!

要するに文字列に無理やり入れてやる作業をすれば宜しいという事で
回答になってはおりませんでしょうか?

これでだめなら、選択クエリーをSQLビューでカット&ペーストしてUPして
ください。

それではうまく行くといいですね♪
脳内活動が日曜日モードに入っているので、この程度しか回答できないのですが
テキストエディターで書いたので、間違いがあったら適当に直してください。

この回答への補足

詳説ありがとうごっざいます。
テストファイルを作り実行してみましたが、

サブフォーム名.レコードソース = StrSQL

のところが問題です。
「VBAコードで参照されている“サブフォーム”フォームが見つかりません」
とエラーが出て止まってしまいます。
実際には
Forms("サブフォーム").RecordSource = strSQL
と記述しました。

何がいけないのでしょうか・・・

補足日時:2002/03/10 17:18
    • good
    • 0

思わずできますよ!と書いてしまいましたが


よく読んでみると駄目ですね(^_^)
実際なにをしたいんですか?

抽出するだけじゃ意味ないですよね~
抽出してなにかするという記述が無いと意味が。。。
抽出した物をカウントするとか
テーブルを作成するとか追加するとか
(Count だったらヘルプをみればきっと解決しますよ)

選択クエリーを読み込んで何をするか?
が重要なところだと思いますが
改めて検討してみてください。
ではでは

この回答への補足

>実際なにをしたいんですか?

「0203」など年号2桁+月2桁の文字列から
"> #2002/3/1# and < #2002/4/1#"といった抽出条件を算出し
この文字列を選択クエリを開くときの条件として指定したいのです。

デザインビューの抽出欄だけでこの処理をするのは難しいと思ったので、
VBAを利用しようと考えた次第です。

>選択クエリーを読み込んで何をするか? が重要なところだと思いますが
今回の場合は単に抽出条件を指定して表示したいだけなのです。

よろしくお願いします。

補足日時:2002/03/10 13:44
    • good
    • 0

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

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

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

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

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

QphpMyAdminでのフィールド削除(クエリ実行)

本当にMySQL初心者なので基本的にコマンドが理解できないのですが、phpMyAdminにてデータベースを管理していますが、一つのテーブルに数千のデータが入っており、例えばID番号1から500までを一気に削除したいと言うときに、最初はローカルにCSVデータをエキスポートして編集した後インポートさせようとしたのですが、文字コードの関係でエラーになってしまい、解決策はクエリでデータを削除するしかないとの結論になりました。
例えばテーブルを指定してからクエリのウィンドウを開くとSELECT * FROM `テーブル名` WHERE 1
とすでに入力されているのですが、これをどのように書き換えれば複数のフィールドをいっぺんに削除できるのでしょうか?
非常に困ってます、アドバイスよろしくお願いします

Aベストアンサー

普通にクエリを書いて実行してください

DELETE FROM `テーブル名` WHERE `ID` BETWEEN 1 AND 500;

QAccess クエリ抽出条件の「Between」の記述で

こんにちは。Access2000を使用しています。
「抽出条件」フォーム上のテキストボックス
"txt開始コード"と"txt終了コード"の入力条件を
「抽出」選択クエリの抽出条件として
Between [forms]![抽出条件][txt開始コード]
And [forms]![抽出条件][txt終了コード]
記述しました。
抽出条件は「業務データ」テーブルの"業務コード"
に対応しており、「業務コード」はテキスト型長さ4
で定義してありますが、「0000」~「9999」の数値
が格納されています。また、フォーム上のテキストボックスの書式は「0000」としています。
条件を何も入力しない時はデータを抽出しますが、条件
を指定すると何も抽出されなくなってしまいます。条件
の指定を、
Between '[forms]![抽出条件][txt開始コード]'
And '[forms]![抽出条件][txt終了コード]'
のようにシングルクォーテーションで囲んでもうまくいき
ません。文字列なのに数値が入っているのでアクセス側で
自動認識しうまくいかないのか、検討がつきません。
どなたか解決策をお願いいたします。

こんにちは。Access2000を使用しています。
「抽出条件」フォーム上のテキストボックス
"txt開始コード"と"txt終了コード"の入力条件を
「抽出」選択クエリの抽出条件として
Between [forms]![抽出条件][txt開始コード]
And [forms]![抽出条件][txt終了コード]
記述しました。
抽出条件は「業務データ」テーブルの"業務コード"
に対応しており、「業務コード」はテキスト型長さ4
で定義してありますが、「0000」~「9999」の数値
が格納されています。また、フォーム上のテキストボックスの書式は「...続きを読む

Aベストアンサー

No.2で既に回答が出ていますが、補足を。

>フォーム上のテキストボックスの書式は「0000」としています。
この「書式」と言うのは「見た目だけ、この形で表示してね」を意味します。
※※※この「見た目だけ」と言うのが重要※※※

ですので、テキストボックスに「1」を入れると「見た目だけ『0001』だけど、中身は『1』のまま」と言う状態になります。もちろん「4」も見た目だけ「0004」で中身は「4」のままです。

この状態では
業務コード Between [forms]![抽出条件][txt開始コード] And [forms]![抽出条件][txt終了コード]
とやっても、実際に実行される抽出は
業務コード Between 1 And 4
ですので、No2さんが書いたように
>もちろん、

>0001
>0002
>0003
>0004

>を BETWEEN 1 AND 4 では抽出できません。
と言う事になり、抽出が成功しません。

そこで、テキストボックスの「更新後処理」にコードを追加し
>Private Sub txt開始コード_AfterUpdate()
>  Me.txt開始コード = Format(Me.txt開始コード, "0000")
>End Sub

>としないと検索しませんよ!
と言う処理で「見た目と一緒に中身も4桁に」変えてあげる必要があるのです。

No.2で既に回答が出ていますが、補足を。

>フォーム上のテキストボックスの書式は「0000」としています。
この「書式」と言うのは「見た目だけ、この形で表示してね」を意味します。
※※※この「見た目だけ」と言うのが重要※※※

ですので、テキストボックスに「1」を入れると「見た目だけ『0001』だけど、中身は『1』のまま」と言う状態になります。もちろん「4」も見た目だけ「0004」で中身は「4」のままです。

この状態では
業務コード Between [forms]![抽出条件][txt開始コード] And [forms]![抽出...続きを読む

Qアクセスの削除クエリでいいのでしょうか?

 データベースで検索できるようにしたいのですが・・・・。クエリの検索結果をフォームに反映させています。
 検索結果表示後、もう一度検索フォームに戻り、検索をかけたときヒットするデータがないにも関わらず前回の検索結果が表示されたままになってしまいます。
削除クエリを使用すればいいのでしょうか?
 また削除クエリをどのように設定したらいいのでしょうか?(たとえば抽出条件が必要なのでしょうか?)
 この場合、マクロはいったん削除クエリを開き、もう一度クエリを開く設定でいいのでしょうか?分かりにくい質問ですいませんが教えてください

Aベストアンサー

はい、フォームのもとになっているクエリのデータが変わっても、更新行為をしないと反映されません。
具体的には、更新したいフォームに、コマンドボタンウイザードでフォーム→再表示を選択し、「再表示」ボタンを作ってみてください。押すとほら、更新されました。ボタン押し下げ動作を省略したい場合は、たとえば検索画面に戻るボタンがあるとしたら、そのボタンのクリック時イベントに、再表示ボタン内の主要ソースを貼り付ければ用を成すはずです。
但し、サブフォームをご利用の場合など、この方法がふさわしくない場合もあります。
確実に更新するには該当のフォームを閉じて開きなおすことです。マクロを作ってボタン化すれば少々画面がちらつくだけでそう不自然ではありません。
お試し下さい。

QACCESS2000でクエリを抽出条件で抽出

VBA上でクエリの抽出データを取得してファイルに書き込むというプログラムを書いております。

抽出条件として、今日の日付のレコードを取得したいのですが型が一致しませんとエラーになります。

strSQL = "SELECT * FROM " & (クエリー名)& " where (クエリー.カラム名)='" & Format(Date, "yyyy/mm/dd") & "'"

クエリーのカラム名は全角漢字です。

どこがおかしいのでしょうか?

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

Aベストアンサー

where (クエリー.カラム名)='" & Format(Date, "yyyy/mm/dd") & "'"
where (クエリー.カラム名)=#" & Format(Date, "yyyy/mm/dd") & "#"
では?
日付型の場合、# で、文字型は ' 、数値 は無しです
全角右括弧は投稿の際の手違い?

Qテーブル削除クエリ

テーブル作成クエリはあるけどテーブル削除クエリはないのでしょうか?
ADOXで削除するしかないですか?

Aベストアンサー

クエリーのSQLビューで、下記の様なSQLを入力して保存すると、一種のテーブル削除クエリができますね。
DROP TABLE Table1;
データベースウィンドウで右クリックする方が早そうな...
VBAからなら、下記で実行できました。ご参考まで。
Sub Sample()
DoCmd.SetWarnings False
DoCmd.OpenQuery "Q_Table1削除"
DoCmd.SetWarnings True
End Sub

QDoCmd.RunSQL "DROP Query

アクセスVBAで
DoCmd.RunSQL "DROP Query クエリ1;"
はできないのですか?

DROP TABLE または DROP INDEX ステートメントの構文エラーです。
(エラー 3295)

となります。

テーブルを削除する場合は
DoCmd.RunSQL "DROP Table テーブル1;"
でエラーにならずにできました。

DROPはクエリに対しては使えないのか教えてください。

Aベストアンサー

追伸、
普段は、DoCmd.DeleteObject acQuery ,"クエリ名"
にしてます。

QAccessの削除クエリについて

『先月分のデータを全て削除』という削除クエリを作りたいのです。
本を見ても、
『指定した日の○日前の分までのデータを削除する』はあるのですが・・・・。

例えば、
5月5日にクエリを実行しても、5月10日にクエリを実行しても、4月30日以前のデータが削除されて欲しいのですが。
よろしくお願いいたします。

Aベストアンサー

>『先月分のデータを全て削除』
ということであれば下記条件で削除クエリを作成
すればできます。
---
フィールド:式:Month([対象日付フィールド])
抽出条件:Month(DateAdd("m",-1,Now()))

Q[ACCESS]クエリで抽出したレコードをデータシートビューで編集するには?

ACCESS2003です。

クエリで集計&グループ化したレコードをデータシートビューで編集したいのですが無理なのでしょうか?

クエリ内容

フィールド |集計   |並び替え|抽出条件

製品名   |グループ化|    |
セイヒンメイ|グループ化|昇順  |
販売元   |最後   |    |
単価    |最後   |    |
在庫    |最後   |    |
残高    |最後   |    |
製品区分  |     |    |<=6

クエリ実行後の「在庫」と「残高」は空なので
データシートビューで編集(追加)したいのですが
無理なのでしょうか?

抽出したレコードの一覧で編集、追加を行いたいのです(エクセルのような感じ)が、
クエリではなく他の方法で可能であれば教えてください。

Aベストアンサー

> クエリで集計&グループ化したレコードをデータシートビューで
> 編集したいのですが無理なのでしょうか?

無理です。
クエリは、あくまで抽出・集計等の結果を表示するだけです。
実際の値はテーブルにもっており、レコードの更新をするには、
元のテーブルのレコードを特定する必要があります。

集計クエリにしてしまうと、そのレコードの特定ができなくなりますので。


> 抽出したレコードの一覧で編集、追加を行いたいのです(エクセルのような感じ)が、
> クエリではなく他の方法で可能であれば教えてください。

テーブル作成クエリで、テーブルにしてしまえば、編集・追加をすることはできますが。。

Qアクセスのクエリでレコード削除ができません。

アクセス超初心者です。

テーブルを商品コードでくっつけて、クエリのデザインビューで表示しました。

いらないレコードを削除しようとしたところ、できません。

くっつける前の、テーブルではできますが、クエリで実行させ、レコードを削除しようとしたところできません。

どうしたらよいのか教えてください。

あと、もうひとつ、クエリで、出力したいフィールド名をドラッグしたあと、削除したいときには、どうすればよいでしょうか?

表示しないなら、できるのですが・・・。削除がわかりません。

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

Aベストアンサー

二つのテーブル構造が不明
クエリのSQL文も不明
サンプルデータ

以上三点が分からないと回答のしようもありません。
SQL文はクエリをデザインビューで開いて
その上で右クリックすると現れるコンテキストメニューに
SQLビュー が有りますので切り替えると
SELECT ・・・・ てのが有りますのでコピーして此処に貼り付けできます。

クエリはSQL文を分かりやすいように作られたモノで実体はSQL文です。
掲示板ではこのSQL文でやり取りをします。
さて、なぜ削除できないかというと、そのように作ってしまっているからです。
このリンク先の説明を理解すれば原因が突き止められます。
クエリのデータを編集できない状況
http://office.microsoft.com/ja-jp/access-help/HA010097876.aspx

フィールドの削除は、Access2010の場合なら
リボンの中に「列の削除」が有ります。
または、フィールド名の少し上にマウスカーソルを持って行くと
下向きの太い矢印になるのでクリック、列全体が反転しますので Deleteキーで削除
なお、次回からはAccessのバージョンも明記しましょう。

二つのテーブル構造が不明
クエリのSQL文も不明
サンプルデータ

以上三点が分からないと回答のしようもありません。
SQL文はクエリをデザインビューで開いて
その上で右クリックすると現れるコンテキストメニューに
SQLビュー が有りますので切り替えると
SELECT ・・・・ てのが有りますのでコピーして此処に貼り付けできます。

クエリはSQL文を分かりやすいように作られたモノで実体はSQL文です。
掲示板ではこのSQL文でやり取りをします。
さて、なぜ削除できないかというと、そのように作ってしまっているか...続きを読む

Qクエリの抽出条件

クエリの抽出条件に
[担当者を選んでください]

クエリを開いた際に、担当者をドロップダウン一覧から選べるようにしたいのですが
[Forms]![フォーム名]![コンボ名]は分かるのですが・・・

フォーム名とは、何を入力すれば良いのでしょうか?
コンボ名はコンボボックスを作成した担当者名だと思いますが・・・?

基本的に1つのテーブルに全部の項目を入力し、クエリーを作成しています

フォームは作成していました。
しかし、フォーム名を入力しても、コンボボックス名を入力しても[担当者を選んでください]
の場所の名前が変わるだけなんです??

ご回答の程、よろしくお願い致します。

Aベストアンサー

参考になりそうですので
http://www.mahoutsukaino.com/ac/ac2000/ac2000/kensakua/kensaku01.htm
上記ではテキストボックスで抽出しています。
http://www.mahoutsukaino.com/ac/ac2000/ac2000/kensakua/kensaku01.htm
コンボボックスとリストボックスの利用方法説明しています。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報