Access VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


1603 / 2272 ツリー ←次へ | 前へ→

【6088】テーブルの検索方法 masashi 05/8/29(月) 21:20 質問[未読]
【6089】Re:テーブルの検索方法 小僧 05/8/30(火) 9:28 発言[未読]
【6103】Re:テーブルの検索方法 masashi 05/8/30(火) 20:12 質問[未読]
【6105】Re:テーブルの検索方法 小僧 05/8/31(水) 9:57 回答[未読]
【6151】Re:テーブルの検索方法 masashi 05/9/2(金) 16:23 質問[未読]
【6152】Re:テーブルの検索方法 小僧 05/9/2(金) 16:48 回答[未読]
【6231】Re:テーブルの検索方法 masashi 05/9/8(木) 15:14 質問[未読]
【6235】Re:テーブルの検索方法 小僧 05/9/8(木) 16:16 回答[未読]
【6236】Re:テーブルの検索方法 小僧 05/9/8(木) 16:52 回答[未読]
【6340】Re:テーブルの検索方法 masashi 05/9/22(木) 14:58 お礼[未読]

【6088】テーブルの検索方法
質問  masashi  - 05/8/29(月) 21:20 -

引用なし
パスワード
   こんばんわ
 テーブルの検索方法を教えていただきたいです。
よろしくお願いします。

テーブルA
フィールドの定義:No→文字、A1〜A26→数値
No  A1  A2  A3  A4  A5  ・・・A26

パラメータに値を入力、
テーブルのTopレコードのA1→A26をチェックして、
その中に、一つのフィールドが値を超えるならば、検索の対象になる。
ずっとテーブルAの最後のレコードまで。
この複雑な検索って、どうしたら、できるのでしょうか?
ご伝授ください。

【6089】Re:テーブルの検索方法
発言  小僧  - 05/8/30(火) 9:28 -

引用なし
パスワード
   ▼masashi さん:
おはようございます。

>パラメータに値を入力、
>テーブルのTopレコードのA1→A26をチェックして、
>その中に、一つのフィールドが値を超えるならば、検索の対象になる。
>ずっとテーブルAの最後のレコードまで。
>この複雑な検索って、どうしたら、できるのでしょうか?
>ご伝授ください。

検索の対象になったものを実際にどうされたいのでしょうか?

例えば…

No A1  A2  A3…
1 10  20  30
2 15  25  35

パラメータを「23」とした場合、
No:1 - A3
No:2 - A2
No:2 - A3

とイミディエトウィンドウに表示させるだけでよければ
DAO を使えばできると思います。

※「No」というフィールド名は、SQL や VBA 上で「Yes/No」の「No」と
  判断される場合があるので名前を変更されたほうが良いですよ。

【6103】Re:テーブルの検索方法
質問  masashi  - 05/8/30(火) 20:12 -

引用なし
パスワード
   ▼小僧 さん:
>▼masashi さん:
>おはようございます。
>
>>パラメータに値を入力、
>>テーブルのTopレコードのA1→A26をチェックして、
>>その中に、一つのフィールドが値を超えるならば、検索の対象になる。
>>ずっとテーブルAの最後のレコードまで。
>>この複雑な検索って、どうしたら、できるのでしょうか?
>>ご伝授ください。
>
>検索の対象になったものを実際にどうされたいのでしょうか?
>
>例えば…
>
>No A1  A2  A3…
>1 10  20  30
>2 15  25  35
>
>パラメータを「23」とした場合、
>>パラメータに値を入力、
>>テーブルのTopレコードのA1→A26をチェックして、
>>その中に、一つのフィールドが値を超えるならば、検索の対象になる。
>>ずっとテーブルAの最後のレコードまで。
>>この複雑な検索って、どうしたら、できるのでしょうか?
>>ご伝授ください。
>
>検索の対象になったものを実際にどうされたいのでしょうか?
>
>例えば…
>
>No A1  A2  A3…
>1 10  20  30   →表示する
>2 15  25  35   →表示する 
>3 20  22  19   →表示しない
 
>パラメータを「23」とした場合、
レコードのフィールドの中に一つのデータが「23」を超えたら、そのレコード
を表示させたい(クエリ)。

問い合わせ結果は、
Model  A1   A2   A3   ・・・
1    10   20   30
2    15   25   35

よろしくお願いします。

【6105】Re:テーブルの検索方法
回答  小僧  - 05/8/31(水) 9:57 -

引用なし
パスワード
   ▼masashi さん:
おはようございます。

>問い合わせ結果は、
>Model  A1   A2   A3   ・・・
>1    10   20   30
>2    15   25   35
>
>よろしくお願いします。

クエリのみで解決するのであれば、

PARAMETERS [値を入力] Value;
SELECT T_Temp.Model,
    T_Temp.A1,
    T_Temp.A2,
    T_Temp.A3,
    T_Temp.A4,
    T_Temp.A5
FROM T_Temp
WHERE T_Temp.A1>[値を入力]
    Or T_Temp.A2>[値を入力]
    Or T_Temp.A3>[値を入力]
    Or T_Temp.A4>[値を入力]
    Or T_Temp.A5>[値を入力];

こんな感じでしょうか。

【6151】Re:テーブルの検索方法
質問  masashi  - 05/9/2(金) 16:23 -

引用なし
パスワード
   ▼小僧 さん:
>▼masashi さん:
>おはようございます。
>
>>問い合わせ結果は、
>>Model  A1   A2   A3   ・・・
>>1    10   20   30
>>2    15   25   35
>>
>>よろしくお願いします。
>
>クエリのみで解決するのであれば、
>
>PARAMETERS [値を入力] Value;
>SELECT T_Temp.Model,
>    T_Temp.A1,
>    T_Temp.A2,
>    T_Temp.A3,
>    T_Temp.A4,
>    T_Temp.A5
>FROM T_Temp
>WHERE T_Temp.A1>[値を入力]
>    Or T_Temp.A2>[値を入力]
>    Or T_Temp.A3>[値を入力]
>    Or T_Temp.A4>[値を入力]
>    Or T_Temp.A5>[値を入力];
>
>こんな感じでしょうか。
ありがとうございます。うまくいきました。
仮に一つ値ではなく、二つの場合は、
条件:20<=比較値<25
どのように修正を加えれば、いいでしょうか?
ご伝授ください。

【6152】Re:テーブルの検索方法
回答  小僧  - 05/9/2(金) 16:48 -

引用なし
パスワード
   ▼masashi さん:
こんにちは。

>条件:20<=比較値<25

20 <= 比較値 <= 25 になってしまいますが、Between 関数はいかがでしょうか?

PARAMETERS [値1を入力] Value, [値2を入力] Value;
SELECT T_Temp.Model,
      T_Temp.A1,
      T_Temp.A2,
      T_Temp.A3,
      T_Temp.A4,
      T_Temp.A5
FROM T_Temp
WHERE T_Temp.A1 Between [値1を入力] And [値2を入力] 
   OR T_Temp.A2 Between [値1を入力] And [値2を入力]
   OR T_Temp.A3 Between [値1を入力] And [値2を入力]
   OR T_Temp.A4 Between [値1を入力] And [値2を入力]
   OR T_Temp.A5 Between [値1を入力] And [値2を入力];


「未満」であればこんな感じです。

PARAMETERS 以上 Value, 未満 Value;
SELECT T_Temp.Model,
      T_Temp.A1,
      T_Temp.A2,
      T_Temp.A3,
      T_Temp.A4,
      T_Temp.A5
FROM T_Temp
WHERE T_Temp.A1>=[以上] And T_Temp.A1<[未満]
   OR T_Temp.A2>=[以上] And T_Temp.A2<[未満]
   OR T_Temp.A3>=[以上] And T_Temp.A3<[未満]
   OR T_Temp.A4>=[以上] And T_Temp.A4<[未満]
   OR T_Temp.A5>=[以上] And T_Temp.A5<[未満];

【6231】Re:テーブルの検索方法
質問  masashi  - 05/9/8(木) 15:14 -

引用なし
パスワード
   小僧 さん
こんにちは、返事遅くなり、申し訳ありません。
やってみましたので、思ったとおりの結果になりました。
本当にありがとうございました。

もう少し質問させていただきたい、よろしくお願いします。
質問1:変数の利用について
 もし、抽出条件のPARAMETERS、TableNameを変数に付与することができれば、
記述文はもっとわかりやすくなります、可能でしょうか?

質問2:コード記述のルールにつて
 ACCESSのSQLビューにて、見やすくするため、下記の記述文だと、エラーになります。
横一列に打ちなおしますと、問題がないようです。  
SELECT T_Temp.Model,
      T_Temp.A1,
      T_Temp.A2,
      T_Temp.A3,
      T_Temp.A4,
      T_Temp.A5



【6235】Re:テーブルの検索方法
回答  小僧  - 05/9/8(木) 16:16 -

引用なし
パスワード
   ▼masashi さん:
こんにちは。

>質問1:変数の利用について
> もし、抽出条件のPARAMETERS、TableNameを変数に付与することができれば、
>記述文はもっとわかりやすくなります、可能でしょうか?

クエリには変数が使えませんが、フォームの値を持ってくる事は可能です。
PARAMETERS Forms![フォーム名].[txt以上] Value, Forms![フォーム名].[txt未満] Value;
SELECT T_Temp.Model,
      T_Temp.A1,
      T_Temp.A2,
      T_Temp.A3,
      T_Temp.A4,
      T_Temp.A5
FROM T_Temp
WHERE
  T_Temp.A1>=Forms![フォーム名].[txt以上] And T_Temp.A1<Forms![フォーム名].[txt未満]
Or T_Temp.A2>=Forms![フォーム名].[txt以上] And T_Temp.A2<Forms![フォーム名].[txt未満]
Or T_Temp.A3>=Forms![フォーム名].[txt以上] And T_Temp.A3<Forms![フォーム名].[txt未満]
Or T_Temp.A4>=Forms![フォーム名].[txt以上] And T_Temp.A4<Forms![フォーム名].[txt未満]
Or T_Temp.A5>=Forms![フォーム名].[txt以上] And T_Temp.A5<Forms![フォーム名].[txt未満];

フォーム名 というフォームの「txt以上」「txt未満」という
コントロールの内容によって値が変化します。

…とここまで書いて外している気が…。

SQL を動的に使いたいのでしたら VBA での処理になりますね。
ちょっとコードを作るのに時間が掛かりそうなので、投稿し直します。


>質問2:コード記述のルールにつて

SQL ビューに全角スペースが入っていないでしょうか?
(コピー & ペースト で貼り付けると全角になってしまうようです。)

半角スペースを使うことと、
行の終わりに必ず半角スペースが入っているかを確認されて下さい。

(SELECT*FROMT_Temp のようにならないため)

【6236】Re:テーブルの検索方法
回答  小僧  - 05/9/8(木) 16:52 -

引用なし
パスワード
   ▼masashi さん:
動的に クエリを作ってみました。
こちらは VBA での操作になります。

適当なモジュールに貼り付けて実行させると
QName で指定した名前のクエリができていると思います。

Sub 変数でクエリを作成()
'要参照 Microsoft DAO x.x Object Library
Dim TName As String
Dim QName As String
Dim QD As DAO.QueryDef
Dim SelSQL As String
Dim WheSQL As String
Dim strSQL As String
Dim Ijyo As Long
Dim Miman As Long
Dim i As Long

  TName = "T_Temp"   '元テーブル名
  QName = "Q_Temp"   '作成クエリ名
  
  Ijyo = 20      '以上値
  Miman = 25      '未満値

  If DCount("*", "MSysObjects", "NAME = '" & QName & "'") Then _
    DoCmd.DeleteObject acQuery, QName
    
  For i = 1 To 5
    SelSQL = SelSQL & TName & ".A" & i & ","
    WheSQL = WheSQL & "(" & TName & ".A" & i & " >= " & Ijyo & " AND " _
            & TName & ".A" & i & " < " & Miman & ") Or "
  Next
  
    SelSQL = Left(SelSQL, Len(SelSQL) - 1)
    WheSQL = Left(WheSQL, Len(WheSQL) - 4)
  
    strSQL = "SELECT " & TName & ".Model, " _
        & SelSQL _
        & " FROM " & TName _
        & " WHERE " _
        & WheSQL
       
  Set QD = CurrentDb.CreateQueryDef(QName, strSQL)
  Set QD = Nothing

End Sub

【6340】Re:テーブルの検索方法
お礼  masashi  - 05/9/22(木) 14:58 -

引用なし
パスワード
   小僧さん
問題解決できました。

1603 / 2272 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
1078242
(SS)C-BOARD v3.8 is Free