こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

【Access】クエリをソースに移植する方法

下記のクエリをフォームのVisual Basicに移植したいと思ったのですが、どのように書けば良いか分からなかった為、アドバイスいただける方がいらっしゃいましたら、ご教示の程よろしくお願いします。

【クエリ(Q_FORM)】
INSERT INTO W_TBL
SELECT T_TBL.*
FROM T_TBL
WHERE (((T_TBL.key) Like '*' & Forms!F_FORM!txt_key & '*') And ((T_TBL.flag) Like '*' & Forms!F_FORM!txt_flag & '*'));

【テーブル(T_TBL)】
id| key|flag
1|1234|1
2| 12|0
3| 12|1

【テーブル(W_TBL)】
id| key|flag

【フォーム(F_FORM)】
テキストボックス:txt_key
テキストボックス:txt_flag
コマンドボタン:cmd_insert

【フォームのVisual Basic】
Option Compare Database
Option Explicit

Private Sub cmd_insert_Click()
DoCmd.OpenQuery "Q_FORM"
End Sub


それと、現在のクエリではtxt_keyが部分一致(txt_keyが12の場合、1234もヒットしてしまいます)すればヒットするようになっていますが、これを完全一致にする方法をご存知の方がいらっしゃいましたら、ご教示の程よろしくお願いします。
単純に完全一致させたいのであれば、txt_key前後のLikeや*を除けば良いのではと思うのですが、txt_keyが未入力の場合は全件ヒットさせたいと思っており、整合性を取る方法が分かりませんでした。

以上、よろしくお願いします。

投稿日時 - 2011-03-21 10:19:49

QNo.6608668

すぐに回答ほしいです

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

(1)
勘違いでなければ。
keyの抽出条件に以下を設定
[Forms]![F_FORM]![txt_key] Is Null

以下のようになります。
INSERT INTO W_TBL
SELECT T_TBL.*
FROM T_TBL
WHERE (((T_TBL.key) Like '*' & [Forms]![F_FORM]![txt_key] & '*') AND ((T_TBL.flag) Like '*' & [Forms]![F_FORM]![txt_flag] & '*')) OR (([Forms]![F_FORM]![txt_key] Is Null));


(2)
移植とはコードの中にSQL文を書く方法ということで、
書き方はいろいろですが、たとえば、

Dim strSQL As String

strSQL = strSQL & "NSERT INTO W_TBL "
strSQL = strSQL & "SELECT T_TBL.* FROM T_TBL "
strSQL = strSQL & "WHERE (((T_TBL.key) Like '*' & Forms!F_FORM!txt_key & '*') And "
strSQL = strSQL & "((T_TBL.flag) Like '*' & Forms!F_FORM!txt_flag & '*'));"

投稿日時 - 2011-03-21 19:10:02

お礼

ご回答ありがとうございます。
ご教示いただいた記述を参考にさせていただいた所、意図した動作となりました。

ちなみにやりたかった事とは下記のような動作となります。
txt_key = 12, txt_flag = 1・・・該当id3をINSERT
txt_key = 1234, txt_flag = 1・・・該当id1をINSERT
txt_key = 12, txt_flag = 0・・・該当id2をINSERT
txt_key = 1, txt_flag = 1・・・該当なし
txt_key = "", txt_flag = 1・・・該当id1, 3をINSERT
txt_key = "", txt_flag = 0・・・該当id2をINSERT

なお、上記の対応が出来たと思う【フォームのVisual Basic】は下記となります。
Option Compare Database
Option Explicit

Private Sub cmd_insert_Click()
Dim strSQL As String

strSQL = strSQL & "INSERT INTO W_TBL "
strSQL = strSQL & "SELECT T_TBL.* FROM T_TBL "
strSQL = strSQL & "WHERE T_TBL.flag Like '*" & Me.txt_flag & "*' "
If Nz(Me.txt_key, "") <> "" Then
strSQL = strSQL & "AND T_TBL.key = " & Me.txt_key
End If
DoCmd.RunSQL strSQL
End Sub

このたびはどうもありがとうございました。
以上、よろしくお願いします。

投稿日時 - 2011-03-21 21:39:59

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問