Microsoft Access ClubAccess超初心者対象ForumAccess初級者対象ForumAccess初・中級者対象ForumAccess VBA Tips ForumDAO、ADO、SQL Forum

     

No63527.検索ボタン2

タイトル検索ボタン2
記事No: 63527
投稿日: 2008/10/27(Mon) 14:11
投稿者: ニャロ
OS:2000
Access Version:2003

どうもこんにちは。
前回も検索ボタンについて教えていただきましたが、
今回、職員登録での検索フォームを作成中、
前回教えていただいた、

--------------------------------------------------------------------
InputBox関数を使っていますが、他にはフォームヘッダ部分に
1.検索氏名の入るテキストボックス(txt_kensakuN)
2.処理日の入るテキストボックス(txt_SyoriD)
( )内は、テキストボックスコントロールの名前
という2つのテキストボックスとコマンドボタンを貼り付けて
ボタンのクリック時にVBAで
Private Sub コマンド1_Click

Me.Filter = "漢字氏名 = '" & txt_kensakuM.Value & "'and 処理日 = '" & txt_SyoriD & "'"
         >
Me.FilterOn = True
Me.Requery

If Me.Recordset.RecordCount=0 then
msgbox("該当者がいませんでした。")
    Exit Sub
End If
End Sub

上記の漢字氏名と処理日は、フィールド名です。

----------------------------------------------------------------


を、使用して作っていたのですが、
今回は、職員登録のため、
中身が
******************************
職員番号
漢字氏名
カナ氏名
******************************
のために、
処理日がまったく関係なくなっているために
自分で
---------------------------------------------------------------
Private Sub コマンド1_Click

Me.Filter = "漢字氏名 = '" & txt_kensakuM.Value & "'"
Me.Filter = "漢字氏名 like '*' & '" & txt_kensakuM.Value & "'"

         
Me.FilterOn = True
Me.Requery

If Me.Recordset.RecordCount=0 then
msgbox("該当者がいませんでした。")
    Exit Sub
End If
End Sub

-------------------------------------------------------------------------
の、ように変更してみたのですが、
うまく動いてくれません。


解除ボタンも
------------------------------------------
Private Sub cmd_実施_Click()

Me.Filter = "処理日 = '" & [forms]![メニュー]![年月] & "'"
Me.FilterOn = True

End Sub

-------------------------------------------
というイベントプロシージャで作成していたのですが、
職員登録では、処理日が関係ないために
どのように変えればいいのかわからなくなってしまいました。


教えていただけたら助かります。
お願いいたします。

タイトルRe: 検索ボタン2
記事No: 63529
投稿日: 2008/10/27(Mon) 14:49
投稿者: ほげ
例えば、検索項目が

職員番号(数字型)
漢字氏名
カナ氏名(あいまい検索)

なら

DIM X AS STRING

IF NOT ISNULL(ME.TXT職員番号) THEN X = X & " AND 職員番号 = " & ME.TXT職員番号
IF NOT ISNULL(ME.TXT漢字氏名) THEN X = X & " AND 漢字氏名 = '" & ME.TXT漢字氏名 & "'"
IF NOT ISNULL(ME.TXTカナ氏名) THEN X = X & " AND カナ氏名 LIKE '*" & ME.TXTカナ氏名 & "*'"
Me.Filter = MID(X, 6)
Me.FilterOn = True


解除は以下でOK?
Me.FilterOn = False

タイトルRe^2: 検索ボタン2
記事No: 63531
投稿日: 2008/10/27(Mon) 15:19
投稿者: ニャロ
ほげ様

お返事ありがとうございます。

> 例えば、検索項目が
>
> 職員番号(数字型)
> 漢字氏名
> カナ氏名(あいまい検索)
>
> なら
>
> DIM X AS STRING
>
> IF NOT ISNULL(ME.TXT職員番号) THEN X = X & " AND 職員番号 = " & ME.TXT職員番号
> IF NOT ISNULL(ME.TXT漢字氏名) THEN X = X & " AND 漢字氏名 = '" & ME.TXT漢字氏名 & "'"
> IF NOT ISNULL(ME.TXTカナ氏名) THEN X = X & " AND カナ氏名 LIKE '*" & ME.TXTカナ氏名 & "*'"
> Me.Filter = MID(X, 6)
> Me.FilterOn = True

試してみましたら、
最初は検索できたのですが
最初に検索した(例)ヤマダ で検索致しましたら
次に キムラ を入力して実施をクリックしても
ヤマダがでてきてしまいます↓汗


解除の方も
> 解除は以下でOK?
> Me.FilterOn = False
だけでしたら
うんともすんとも
なりません↓

何かが足りないのでしょうか?


追伸:抽出画面の説明
   抽出したい名前を打ち込むテキストボックス名は「txt_kensakuM」です。
   実施ボタン・解除ボタンがある

                  です。

よろしくお願いします|;゜Å゜)

タイトルRe^3: 検索ボタン2
記事No: 63534
投稿日: 2008/10/27(Mon) 16:50
投稿者: ほげ
> 最初は検索できたのですが
> 最初に検索した(例)ヤマダ で検索致しましたら
> 次に キムラ を入力して実施をクリックしても
> ヤマダがでてきてしまいます↓汗

何か・・・おかしい?

さっぱり不明です・・・現状のコードを提示して見て?

(できれば、実施ボタン・解除ボタンの全コード)


> 抽出したい名前を打ち込むテキストボックス名は「txt_kensakuM」

抽出したい名前とは何?

例だと "ヤマダ" となっているが、txt_kensakuM には抽出したい値を入力するのと違うの?

また、画面に txt_kensakuM しかないのなら、txt_kensakuM で カナ氏名と漢字氏名の両方を

検索する考えなの?



解除の方も・・・うんともすんとも・・・ですか?

そのコードが実行されているのは、間違いない?

フィルタ設定できるのなら解除(Me.FilterOn = False)もできていいと思うのに・・・


とりあえずコードを見てみないと・・・抽出はフィルタだけですよね?

タイトルRe^4: 検索ボタン2
記事No: 63535
投稿日: 2008/10/27(Mon) 17:32
投稿者: ニャロ
口下手ですみません↓

> さっぱり不明です・・・現状のコードを提示して見て?
>
> (できれば、実施ボタン・解除ボタンの全コード)
>
>

まず【職員登録】というフォームがあります。
ここには、
職員番号・漢字氏名・カナ氏名で、職員が登録されています。
そこで【職員登録】のフォームヘッダーに
スペースを設けてラベルで職員抽出と書いて抽出する場を作成しました。
----------------------------------------------------------------------------------
[職員抽出]←ラベル

          職員氏名:[txt_kensakuM]←テキストボックス  [実施]←ボタン→[解除]
----------------------------------------------------------------------------------
このような抽出場です。

元々入れていた実施のコード↓
※元には、処理日が付いてました。
**************************************************
Private Sub cmd_実施_Click()

Me.Filter = "漢字氏名='" & txt_kensakuN.Value & "'and 処理日 ='" & txt_syoriD & "'"
Me.Filter = "漢字氏名 like '*' & '" & txt_kensakuN.Value & "' & '*' and 処理日 ='" & txt_syoriD & "'"

Me.FilterOn = True
Me.Requery

If Me.Recordset.RecordCount = 0 Then
MsgBox ("該当者がいませんでした。")
Exit Sub
End If

End Sub
************************************************

ほげさんのお力を借りてのコード↓

************************************************
Private Sub cmd_実施_Click()

Dim X As String

If Not IsNull(Me.職員番号) Then X = X & " and txt職員番号 = " & Me.職員番号
If Not IsNull(Me.漢字氏名) Then X = X & " and txt漢字氏名 = '" & Me.漢字氏名 & "'"
If Not IsNull(Me.カナ氏名) Then X = X & " and txtカナ氏名 like '*" & Me.カナ氏名 & "*'"

Me.Filter = Mid(X, 6)
Me.FilterOn = True
End Sub
*****************************************************



>
> フィルタ設定できるのなら解除(Me.FilterOn = False)もできていいと思うのに・・・
解除ボタンは
Me.FilterOn = False ←ここをTrueにしていてFalseにしていませんでした。
            Falseにしたらすんなり解除できました♪  








> > 抽出したい名前を打ち込むテキストボックス名は「txt_kensakuM」
>
> 抽出したい名前とは何?

> 例だと "ヤマダ" となっているが、txt_kensakuM には抽出したい値を入力するのと違うの?
名前とは、職員の名前です。
値も名前も両方使って抽出できればいいのですが
難しそうだったので、名前だけ使用しての
抽出を希望しました。

> また、画面に txt_kensakuM しかないのなら、txt_kensakuM で カナ氏名と漢字氏名の両方を
>
> 検索する考えなの?
>
そのつもりでしたが・・・難しそうですね↓
テキストボックスを職員番号・カナ氏名分増やした方が良さそうでしょうか???
>
> 解除の方も・・・うんともすんとも・・・ですか?
>
> そのコードが実行されているのは、間違いない?

解除の方は、元々のコードからどのように
変えればいいのか全然わからなかったので
今のコードに何か足さないと動かないと思い調べていたのですが
いまいちよくわからずに困ってしまっています。

タイトルRe^5: 検索ボタン2
記事No: 63538
投稿日: 2008/10/27(Mon) 18:28
投稿者: ほげ
職員氏名だけで抽出するなら、以下でいいかと?

ME.FILTER = "漢字氏名 ='" & ME.txt_kensakuM & "'"
ME.FILTERON = TRUE


あいまい検索をしたいのなら、LIKE でワイルドカード(*)をお好きな位置で・・前か後か前後になるかと

ME.FILTER = "漢字氏名 LIKE '*" & ME.txt_kensakuM & "*'"
ME.FILTERON = TRUE


> テキストボックスを職員番号・カナ氏名分増やした方が良さそうでしょうか???

これもお好きに・・・必要なら追加・・・わからんかったらまた質問でいいかと



ちなみに、以下はおかしいのでは?

> If Not IsNull(Me.職員番号) Then X = X & " and txt職員番号 = " & Me.職員番号
> If Not IsNull(Me.漢字氏名) Then X = X & " and txt漢字氏名 = '" & Me.漢字氏名 & "'"
> If Not IsNull(Me.カナ氏名) Then X = X & " and txtカナ氏名 like '*" & Me.カナ氏名 & "*'"

IF NOT ISNULL([画面の検索項目]) THEN X = X & " AND [テーブルのフィールド名] =" & [画面の検索項目]

で・・

タイトルRe^6: 検索ボタン2
記事No: 63545
投稿日: 2008/10/28(Tue) 09:32
投稿者: ニャロ
ほげさん、ありがとうございました。


> 職員氏名だけで抽出するなら、以下でいいかと?
>
> ME.FILTER = "漢字氏名 ='" & ME.txt_kensakuM & "'"
> ME.FILTERON = TRUE
>
> ※
> あいまい検索をしたいのなら、LIKE でワイルドカード(*)をお好きな位置で・・前か後か前後になるかと
>
> ME.FILTER = "漢字氏名 LIKE '*" & ME.txt_kensakuM & "*'"
> ME.FILTERON = TRUE

このやり方で職員名検索もあいまい検索も
スィスィできるようになりましたッッ♪


>
> > テキストボックスを職員番号・カナ氏名分増やした方が良さそうでしょうか???
>
> これもお好きに・・・必要なら追加・・・わからんかったらまた質問でいいかと

今は、職員番号・カナ氏名の検索は必要ないみたぃなので保留にします。
実行しようとするときは、上記で教えていただいたあいまい検索の方法を
同じように行ったら出来ますよね(´ω`)V
>
>
> ちなみに、以下はおかしいのでは?
>
> > If Not IsNull(Me.職員番号) Then X = X & " and txt職員番号 = " & Me.職員番号
> > If Not IsNull(Me.漢字氏名) Then X = X & " and txt漢字氏名 = '" & Me.漢字氏名 & "'"
> > If Not IsNull(Me.カナ氏名) Then X = X & " and txtカナ氏名 like '*" & Me.カナ氏名 & "*'"

すみません。自分でもおかしいのは感じていたのですが、わかりませんでした↓


> IF NOT ISNULL([画面の検索項目]) THEN X = X & " AND [テーブルのフィールド名] =" & [画面の検索項目]
>
> で・・
このような内容だったのですね♪

今回は、本当にお世話になりました。

行き詰ってしまったときはココにお世話になっているのでちょくちょく
訪れていますがその時はまたお願いしてしまいますがよろしくお願いいたします★汗

★☆ありがとうございました★☆


このAccessフォーラム過去ログ集は、Microsoft Access Club が運営しています


 

ページの先頭へ 前ページへ戻る