Microsoft Access 掲示板

accessで50音検索がしたい

9 コメント
views
4 フォロー

既存のフォームに50音検索を作りたいと思い、調べていたところhatena様のサイトを見つけ
そちらをもとに50音で検索できるシステムを作りました。

しかし、サイト通り作ったにも関わらずなぜか作動しません。
フォームを開いたときはlst得意先に名前がすべて表示されるのですが、Op50音選択ボタンを押すと名前が消え白紙になります。さらにOp段選択のボタンを押すとレコードに検索キーがないと出たり、式に未定義関数がありますと出ます。(なにも触っていないのにエラー内容が変わりました・・・)
lst得意先に出ている名前をクリックしてもなんの反応もありません。

恐らくどこかで間違えているのだと思うのですが、ほんとにその通りにしたつもりなので不思議です・・・

よく分からないエラーかと思いますが改善方法を教えて頂きたいです。
参考にしたサイトは下記です。
リンク

beep
作成: 2020/10/22 (木) 09:15:19
通報 ...
1

追記です。
もう一度確認したところOp段選択の更新後処理が間違っていました。
訂正すると、レコードに検索キーがないと出たり、式に未定義関数・・・というのは出なくなりましたが、今だにクリックしてもなんの反応もありません・・・

2

オプショングループで50音選択 高速版 - hatena chips

上記のサンプル通りに設定すれば動くはずです。
動かないならどこか間違っていると思います。

どうしてもわからなければ、このページの右カラムの下の方に「ファイル送信フォーム」がありますので、該当ファイルを送付してもらえればそれをみて原因を探れます。
ファイルには関係するテーブル、クエリ、フォームのみにしたものを送付してください。

3

ファイルの方送信致しましたので宜しくお願い致します。

4
hatena 2020/10/22 (木) 17:15:26 修正

ファイルの内容を見ました。
間違いは下記の部分です。

Const conSelect = "SELECT テーブル1.社員番号, テーブル1.氏名 FROM テーブル12"
Const conOrderBy = "台帳クエリ2.フリガナ"

テーブル名が間違ってます。下記に修正してください。

Const conSelect = "SELECT テーブル1.社員番号, テーブル1.氏名 FROM テーブル1"
Const conOrderBy = "テーブル1.フリガナ"

これで正常動作するのを確認しました。

5

回答ありがとうございます。
あれからこちらで修正しましたが、サンプルファイルは正常に作動するのですが、実際使っているファイルは作動せずです・・・
新たにファイルを送信しましたのでご確認お願い致します。

6
hatena 2020/10/26 (月) 11:55:33 修正

ファイル見ました。原因はフィールド名に( )を使っているのが原因ですね。
このような記号や半角空白が含まれるフィールド名はSQLで使うときは[ ]で囲む必要があります。

下記のように、氏名(フリガナ)の部分を[氏名(フリガナ)]と修正してください。

Option Compare Database
Option Explicit
Const conSelect = "SELECT 社員マスタ.社員番号, 社員マスタ.氏名 FROM 社員マスタ"
Const conOrderBy = "社員マスタ.[氏名(フリガナ)]"

Private Sub Form_Error(DataErr As Integer, Response As Integer)
'フォームのエラー時

  If DataErr = 3021 Then
    'カレントレコードなしエラー(エラー番号:3021)は無視する
    Response = acDataErrContinue
  End If
End Sub

Private Sub Op50音選択_AfterUpdate()
    fnc50音選択_lst "[氏名(フリガナ)]", Me.lst得意先, conSelect, conOrderBy
End Sub
 
Private Sub op段選択_AfterUpdate()
    fnc段選択_lst "[氏名(フリガナ)]", Me.lst得意先, conSelect, conOrderBy
End Sub

Private Sub Form_Open(Cancel As Integer)
    Me.lbl件数.Caption = "件数: " & Me.lst得意先.ListCount
End Sub

このような記号や半角空白はトラブルの元になりますので、最初からフィールド名やオブジェクト名には使わないようにするのが吉ですね。

例えば、氏名(フリガナ) ではなくて 氏名_フリガナ とするとか。_(アンダースコア)は使用しても問題ない数少ない記号の一つです。

7

とても勉強になりました!!
[氏名(フリガナ)]に直すときちんと動くようになりました。

これからフィールド名に()を使うのは控えたいと思います。
本当にありがとうございました。

1つ直したいところがあるのですが、今のフォームでは開いたときから名前の順で表示されるのですが、開いた時点では社員番号順に並べ替えたいのですがこちらは可能でしょうか?
すみませんが教えて頂きたいです。

8

開いたときだけでいいのなら、値集合ソースを下記に変更すればいいでしょう。

SELECT 社員マスタ.社員番号, 社員マスタ.氏名 FROM 社員マスタ ORDER BY 社員マスタ.社員番号; 

50音選択で抽出したあとも、社員番号順にしたいなら、さらに、コードの下記の部分を

Const conOrderBy = "社員マスタ.[氏名(フリガナ)]"

下記に修正すればいいでしょう。

Const conOrderBy = "社員マスタ.社員番号"
9

すごい!完璧です!
本当にありがとうございました。

またお力を貸して頂けると嬉しいです。