担当者マスタの作成、6回目です。
早速、はじめましょう。
-------------------------------------------------------------------
1.カナ名の処理
1-1.カナ名_AfterUpdateについて
If mojisu = Int(0) Then
[カナ名] = ""
Set Me.Recordset = Nothing
Me![担当者コード].ControlSource = ""
Me![担当者名].ControlSource = ""
Me![担当者名].ControlSource = ""
Exit Sub
End If
If ftKeyCode = 120 Then
Exit Sub
End If
If ftKeyCode = 118 Then
Exit Sub
End If
If ftKeyCode = 116 Then
Exit Sub
End If
If ftKeyCode = 35 Then
Exit Sub
End If
If mojisu >= Int(1) Then
'◎ポイント解説 1 -----*-----*-----*-----
Call 検索処理
Exit Sub
End If
-------------------------------------------------------------------
[カナ名]がNullまたは空白なら、mojisu = Int(0)をいれます。
各項目をクリアしてこの処理をせずに抜けます。
何かしら文字があれば、mojisu = Len([カナ名])で処理します。
Len 関数は、バイト数を返してくれます。
If mojisu >= Int(1) Then なら、担当者を表示させます。
中ごろにftKeyCode = 120、118、116、35があります。
これは、formのKeyDownで記述しています。
全表示(F9) → 120
btn1字消去(F5) → 116
btn全消去(F5) → 118
終了(END) → 35
これらのボタンが押されたときに、Call 検索処理をさせていません。
では、ないとどうなるのか?
実験して見てください。
ファンクションキーに処理を割り解けると簡単に操作ができます。
ファンクションキーにどんな数字が割り付けているのかを調べる
方法は、Form_KeyDownにftKeyCode = KeyCodeのところです。
1.そこにブレイクモードの設定をします。
すると茶色にかわります。
2.何かしらのファンクションキーを押します。
3.そこで止まりますのでKeyCodeの内容をクイックウォッチで
調べます。
ftKeyCodeに退避させて、その数値でさせたい処理を他の所で
記述すれば簡単にできます。
試してみて下さい。
1-1.◎ポイント解説 1 について
担当者マスタ読み込んで詳細に表示させます。
それが、 Call 検索処理 です。
-------------------------------------------------------------------
2.検索処理について
Subで検索処理()を作成します。
'◎ポイント解説 2 -----*-----*-----*-----
Set rs = New ADODB.Recordset
SqlStr = ""
SqlStr = "SELECT 担当者マスタ.担当者コード, 担当者マスタ.担当者名 _
,営業所マスタ.営業所名 "
SqlStr = SqlStr & " FROM 営業所マスタ INNER JOIN 担当者マスタ _
ON 営業所マスタ.営業所コード = 担当者マスタ.営業所コード "
SqlStr = SqlStr & " where 担当者マスタ.カナ名 Like "
SqlStr = SqlStr & "'" & [カナ名] + "%" & "'"
SqlStr = SqlStr & " order by 担当者マスタ.カナ名, _
担当者マスタ.担当者コード"
rs.Open SqlStr, cn, adOpenStatic
If rs.BOF Then
'◎ポイント解説 3 -----*-----*-----*-----
Set Me.Recordset = Nothing
Me![担当者コード].ControlSource = ""
Me![担当者名].ControlSource = ""
Me![営業所名].ControlSource = ""
Else
'◎ポイント解説 4 -----*-----*-----*-----
Set Me.Recordset = rs
Me![担当者コード].ControlSource = rs![担当者コード].name
Me![担当者名].ControlSource = rs![担当者名].name
Me![営業所名].ControlSource = rs![営業所名].name
End If
rs.Close
Set rs = Nothing
-*-------*-------*-------*-------*-------*-------*-------*-------*-
では、詳しく解説します。
2-1.◎ポイント解説 2 について
ここでは、ストアドプロシージャで作成しませんでした。
ここのポイントは、1、2となります。
1. 担当者マスタ.カナ名 Like [カナ名]%
2. order by 担当者マスタ.カナ名,担当者マスタ.担当者コード
Like演算子を使いワイルドカード検索をします。
*注意
メルマガでは、半角カタカナは不正文字となりますので
全角文字で解説します。
カナ名に入る文字は半角カタカナとなります。
[カナ名]に"オオ"のいれた場合を考えてみましょう。
デバッグモードで調べるとSqlStrには、Like オオ% と
記述されている箇所があります。
これは、"オオ"ではじまるものは全て抽出しなさいと
命令しています。
以下のデータがあったとします。
岡山太郎 カナ名"オカヤマタロウ"
大分一郎 カナ名"オオイタイチロウ"
大分二郎 カナ名"オオイタジロウ"
大分三郎 カナ名"オオイタサブロウ"
Like オオ%で表示されるものは、以下のとおりです。
大分一郎 カナ名"オオイタイチロウ"
大分三郎 カナ名"オオイタサブロウ"
大分二郎 カナ名"オオイタジロウ"
表示はこの順番で現れます。
岡山太郎 カナ名"オカヤマタロウ"
"オカ"なので岡山太郎は表示されません。
Like オ%であれば、全て表示されます。
大分一郎 カナ名"オオイタイチロウ"
大分三郎 カナ名"オオイタサブロウ"
大分二郎 カナ名"オオイタジロウ"
岡山太郎 カナ名"オカヤマタロウ"
この順番になります。
それとorder byによって担当者マスタ.カナ名順に表示されます。
五十音順だと探しやすいためこのような形にします。
カナ名が同じ場合は、コードの昇順に表示されます。
order byは、昇順、降順を指定できます。
ここでは、省略しているのでデフォルトで昇順(ASC)となります。
降順にする場合は、DESCを付けます。
order by 担当者マスタ.カナ名 DESC となります。
2-2.◎ポイント解説 3 について
まったくデータがない場合は各項目をクリアします。
Me![担当者コード].ControlSource = ""
Me![担当者名].ControlSource = ""
Me![営業所名].ControlSource = ""
2-3.◎ポイント解説 4 について
Me![担当者コード].ControlSource = rs![担当者コード].name
Me![担当者名].ControlSource = rs![担当者名].name
Me![営業所名].ControlSource = rs![営業所名].name
通常だと、ひとつのデータを取り出してそれを表示させる
それをある条件になるまで繰り返すというパターンを取るのですが、
この詳細にデータを送る場合は、一気に送る形となります。
それが、
”データ名.name”から”表示名.ControlSource”となります。
余計なデータがあるとそれらもいっしょに表示されますので
SQL文は大変重要となります。
SQL文をパンチしながら作るのは大変な作業です。
SQL文を簡単に作る方法は、クエリ(ビュー)で作ってみることです
そうすれば、確認しながら作れます。
思い通り表示できたらSQL文を少し加工します。
VBAまたはストアドプロシージャに貼り付ければ効率的に
作り上げることができます。
次回は、担当者マスタの作成の最終となります。
担当者問い合せのボタンの処理を説明します。
次回も、担当者マスタの作成です。
===================================================================
◆
実践テクニック、Accessで作るクラサバシステム ◆
編集・構成:高橋浩
提供・発行:ティウェア
http://www.1tware.com/index.html
Access2000+MSDE2000、Access2002+MSDE2000、Access2003+MSDE2000で
作る販売管理ソフト、クライアントサーバーシステムを構築
※当メールマガジンに掲載された記事を許可なく転載することを禁じます。
===================================================================
実践テクニック、Accessで作るクラサバシステム(隔週 火曜日発行中)
SEが10年以上の開発ノウハウを惜しみなく完全公開!
|