■メニュー
1.得意先残高初期入力の作成(4回目)
===================================================================
こんにちは、ティウェアの高橋です。
得意先残高初期入力の作成の4回目です。
では、はじめましょう。
------------------------------------------------------------------
得意先問い合わせからの処理です。
1.カナ名の処理
1-1.カナ名_AfterUpdateについて
If mojisu = Int(0) Then
[カナ名] = ""
Set Me.Recordset = Nothing
Me![営業所コード].ControlSource = ""
Me![得意先コード].ControlSource = ""
Me![得意先名].ControlSource = ""
Me![住所1].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 営業所コード,得意先コード,得意先名,住所1 from _
得意先マスタ 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 = ""
Me![住所1].ControlSource = ""
Else
'◎ポイント解説 4 -----*-----*-----*-----
Set Me.Recordset = rs
Me![営業所コード].ControlSource = rs![営業所コード].name
Me![得意先コード].ControlSource = rs![得意先コード].name
Me![得意先名].ControlSource = rs![得意先名].name
Me![住所1].ControlSource = rs![住所1].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 = ""
Me![住所1].ControlSource = ""
2-3.◎ポイント解説 4 について
Me![営業所コード].ControlSource = rs![営業所コード].name
Me![得意先コード].ControlSource = rs![得意先コード].name
Me![得意先名].ControlSource = rs![得意先名].name
Me![住所1].ControlSource = rs![住所1].name
通常だと、ひとつのデータを取り出してそれを表示させる
それをある条件になるまで繰り返すというパターンを取るのですが、
この詳細にデータを送る場合は、一気に送る形となります。
それが、
”データ名.name”から”表示名.ControlSource”となります。
余計なデータがあるとそれらもいっしょに表示されますので
SQL文は大変重要となります。
SQL文をパンチしながら作るのは大変な作業です。
SQL文を簡単に作る方法は、クエリ(ビュー)で作ってみることです
そうすれば、確認しながら作れます。
思い通り表示できたらSQL文を少し加工します。
VBAまたはストアドプロシージャに貼り付ければ効率的に
作り上げることができます。
次回も、得意先残高初期入力の作成です。
===================================================================
◆
実践テクニック、Accessで作るクラサバシステム ◆
編集・構成:高橋浩
提供・発行:ティウェア
http://www.1tware.com/index.html
Access2000+MSDE2000、Access2002+MSDE2000、Access2003+MSDE2000で
作る販売管理ソフト、クライアントサーバーシステムを構築
※当メールマガジンに掲載された記事を許可なく転載することを禁じます。
===================================================================
実践テクニック、Accessで作るクラサバシステム(隔週 火曜日発行中)
SEが10年以上の開発ノウハウを惜しみなく完全公開!
|