Access (一般機能)

Accessの一般機能に関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10 Pro : Access 2010)
前方一致の検索
投稿日時: 18/11/01 13:04:02
投稿者: oyoyo

ACEESS2010で、「山田太郎」さんを検索したいときは、フォーム画面
のテキストボックスに「山田太郎」と入力し、コマンドボタンをクリックし、マクロを走らせたら、「山田太郎」さんが検索出来ることはわかります。
「山田」と入力してコマンドボタンをクリックすれば、「山田」の姓の人を全員検索できるようにしたいです。テキストボックスに「山田*」と入力では無理でした。どのようにしたらよいでしょうか。

回答
投稿日時: 18/11/01 13:23:20
投稿者: sk

引用:
ACEESS2010で、「山田太郎」さんを検索したいときは、
フォーム画面のテキストボックスに「山田太郎」と入力し、
コマンドボタンをクリックし、マクロを走らせたら
「山田太郎」さんが検索出来ることはわかります。

具体的にどのアクションを使用されたのでしょうか。

回答
投稿日時: 18/11/01 14:37:20
投稿者: Suzu

・検索
・抽出
どちらでしょう。
 

引用:
「山田」の姓の人を全員検索できるようにしたいです

からすると抽出ですよね。
 
簡単なのは、フォームのレコードソースのクエリにて、抽出を行ってしまう方法。
 
【フォームのテキストボックスに入力された値をクエリの抽出条件に設定する】
https://www.moug.net/tech/acopr/0040014.html
 
 
テキストボックスに何も入っていない時(フォームを開く時)に 対応する為
IIf の中で、テキストボックスの Null判定を行っていますが、
 
先頭一致の場合、
抽出条件に、
LIKE "*" & [Forms]![フォーム名]![テキストボックス名]
で、テキストボックスがNullの時には、LIKE "*" となりますから、全レコードが対象になりますね。
 
あとは必要時に再クエリを行う様にすれば良いです。

投稿日時: 18/11/06 15:56:17
投稿者: oyoyo

ご回答ありがとうございます!
「山田太郎」さんのようにフルネームの場合は、クエリは使わず、マクロのwhere条件式に入れており、これでうまく出来ました。
[テーブル名]![フィールド名] = [Forms]![フォーム名]![テキストボックス名]
という具合です。
 
「山田」さんの姓全員を検索するため、下記のようなマクロを作りました。
[テーブル名]![フィールド名] = [Forms]![フォーム名]![テキストボックス名] &"*"
これででいけると思ったのですが、検索しても出てきません。どうすれば良いでしょうか。

回答
投稿日時: 18/11/06 16:18:25
投稿者: sk

引用:
「山田太郎」さんのようにフルネームの場合は、クエリは使わず、
マクロのwhere条件式に入れており、これでうまく出来ました。

それがどのアクションなのかが不明なままですが、
 
引用:
[テーブル名]![フィールド名] = [Forms]![フォーム名]![テキストボックス名] &"*"

="[フィールド名] Like '" & [テキストボックス名] & "*'"

投稿日時: 18/11/07 10:06:57
投稿者: oyoyo

それがどのアクションなのかが不明なままですが、
 
「フォームを開く」です。
  
 
 ="[フィールド名] Like '" & [テキストボックス名] & "*'"
 
ここで、
・[フィールド名] は[氏名]
・[テキストボックス名] は[N検索]
なので、where条件式に下記のように入れました。
   
  "[氏名] Like '" & [N検索] & "*'"
  
 これでマクロを実行すると、パラメータダイヤログボックスが表示され、再度「山田」と入力すると、山田さんだけでなく、全員が表示されてしまいました。
もしかして、[フィールド名]は[フォーム名]かと思い、そのようにしましたが、同じでした。
なお、私の認識では
[テーブル名]、[フィールド名]、[フォーム名]、[テキストボックス名]
全て出そろわないとならないと思っていましたが、
="[フィールド名] Like '" & [テキストボックス名] & "*'"
を見る限りでは、そうではありません。それもわかりません。
 
ところで、「'」シングルクォーテーションマークは、どのような意味があるのでしょうか。この位置に入っている意味もわかりません。
何度も申し訳ありませんが、ご教示いただけないでしょうか。

回答
投稿日時: 18/11/07 10:34:57
投稿者: sk

oyoyo さんの引用:
ここで、
・[フィールド名] は[氏名]
・[テキストボックス名] は[N検索]
なので、where条件式に下記のように入れました。
    
  "[氏名] Like '" & [N検索] & "*'"
   
これでマクロを実行すると、パラメータダイヤログボックスが表示され、
再度「山田」と入力すると、山田さんだけでなく、全員が表示されてしまいました。

式の先頭に = を記述されていないからでしょう。
 
sk さんの引用:
="[フィールド名] Like '" & [テキストボックス名] & "*'"

="[氏名] Like '" & [N検索] & "*'"

投稿日時: 18/11/07 16:01:54
投稿者: oyoyo

ご回答ありがとうございます。
= は、ACCESSの画面に既に表示しています。
つまり、= を入れると == と2つ並ぶことになります。
また、「'」(シングルクォーテーションマーク)は、何のために使っているのでしょうか。
本当にこの位置でよいのでしょうか。
念のためですが、私が使用しているのは、ACCESS 2013です。

回答
投稿日時: 18/11/07 16:15:58
投稿者: sk

引用:
= は、ACCESSの画面に既に表示しています。
つまり、= を入れると == と2つ並ぶことになります。

それでよいので、とりあえず = を挿入してから
マクロを実行してみて下さい。

投稿日時: 18/11/08 09:58:52
投稿者: oyoyo

where条件式= ="[氏名] Like '" & [N検索] & "*'"
ですね。
しかし、このように 「=」 を入れてもダイヤログボックスが別に表示します。
ダイヤログボックスは、表示させたくありません。
念のため、そのダイヤログボックスに「山田」と入力すると、全てのレコードが表示されてしまいました。
そもそも、ダイヤログボックスが表示される仕組みがよくわかりません。
大変お手数ですが、再度ご教示いただけないでしょうか。

回答
投稿日時: 18/11/08 11:14:54
投稿者: sk

引用:
where条件式= ="[氏名] Like '" & [N検索] & "*'"
ですね。
しかし、このように 「=」 を入れてもダイヤログボックスが別に表示します。

[パラメータの入力]ダイアログに表示されている
パラメータの名前は何でしょうか。
 
仮に[氏名]が表示されているのであれば、
開こうとしているフォームのレコードソースに
[氏名]という名前のフィールドが存在していない
可能性があります。
 
引用:
where条件式= ="[氏名] Like '" & [N検索] & "*'"

もしくは上記の [] が全角文字になっているか。

投稿日時: 18/11/08 14:22:38
投稿者: oyoyo

どこが間違いなのかわからないため、初めから全て作り直しました。すると、うまくできました。どこかで打ち間違いをしていたと思います。大変お世話になりました。ありがとうございました。