プロが教えるわが家の防犯対策術!

ACCESSでの質問です。検索に関して、例えば「駅すぱあと」で「asa」と入力すれば「浅草」「浅香山」と表示され「asaku」で「浅草」と表示されるようなインクリメンタルサーチはどうやって実現できるのでしょうか?

A 回答 (3件)

#1です



> なぜ最後の「ma」から開始するのかは、最初に文字総数から
> Iを引いて行く方が効率が良いというか当然なのですね

足して行っても構わないのですが・・・

> Case "ぁ", "ぅ", "ゃ", "ぃ", "ゅ", "ぇ", "ょ", "っ"

の対応をどうするか?悩むと後ろの方が楽かなと^^;;;
例えば「とうきょう」だと、後ろからだと、「ょ」だから、「きょ」で割り当てなおし、前からだと、毎回、一時後ろを確認する必要が出てきます
と、言うことで、後ろからして見ました

> 最初に拗音をはねるのは、拗音は頻度が低く処理速度が遅くなる
> からでしょうか(費用対効果的な問題)

前述もしましたが、「き」で直した後、「ょ」ごと、取り替える必要が出てくるので、「きょ」で、変換したくて、先に拗音を取り出して、確認してます

> (1)「shi」「si」ローマ字の入力方法をユーザーに徹底する必要

これは、現状の話の中では、可能性がありますが・・・
アルゴリズムで、もう一つフィールドを追加すれば良いような、もしくは、先のひらがな→ローマ字ではなく、ローマ字→ひらがな(カナ)に変換してから、検索を掛けるのも手だと思いますよ

> (2)アクセスでふりがな自動入力の場合、ユーザーによっては雅夫と
> 入力する際、「みやびおっと」とふりがなされる可能性

ですね
これも、よく悩みます
どちらの「漢字」と「ひらがな」を両方示しておく必要があるかも・・・

> 4 参考書籍やホームページ(検索に関して)
> について、お勧めがあればご教示願います。

Microsoft Access Club
http://www.accessclub.jp/
ここと、おなじくQ&A板も兼ねてます
サンプル、解説なども、多いです
名前の通り「Access」専用サイト

MSDN ライブラリ
http://msdn.microsoft.com/ja-jp/library/default. …
「公式の技術資料サイト」
現在のヘルプよりも、詳しく書いてます
ただし、本当に技術者用で、解説が理解できないことも・・・

moug モーグ
http://www.moug.net/
「マイクロソフト認定資格」から、名前が来てます
「オフィス用Q&A」サイト
サンプル、解説なども、多いです

くらいかな?
大きいところはね
    • good
    • 0
この回答へのお礼

Dxakさんありがとうございました。
投稿は初めてなのですが、大変参考になりました。

魔法使いの開発工房を、たまに見てましたが、ACCESS CLUBは
あまり見たことがなかったので、じっくり見てみようと思います。

今後も、アクセスを中心にちょこちょこがんばろうと思います。
日経ソフトウェアなどたまに見ると、参考コードがほとんどC系統
なので、そっちも勉強しようと色気を出すこのごろではあります。

最近面白かった本は、小飼弾「アルファギークに逢ってきた」です。

どうもありがとうございました。

お礼日時:2008/07/20 19:37

#1です



関数化と言うのは、例えば

Function Test(usStr As String) As String

Dim usCher As String
Dim usAns As String
Dim I As Long

I = Len(usStr)
usAns = ""

While I > 0
usCher = Mid(usStr, I, 1)
Select Case usCher
Case "ぁ", "ぅ", "ゃ", "ぃ", "ゅ", "ぇ", "ょ", "っ"
I = I - 1
usCher = Mid(usStr, I, 1) + usCher
End Select
I = I - 1
Select Case usCher
Case "あ"
usAns = "a" + usAns
Case "い"
usAns = "i" + usAns
Case "う"
usAns = "u" + usAns
Case "え"
usAns = "e" + usAns
Case "お"
usAns = "o" + usAns
' 以下略
End Select
Wend
Test = usAns

End Function

と、標準モジュールで、関数化すれば、クエリー上にでも使用可能ですよ
で、「ふりがな」コントロールと言うものが、Access2000以降には、あります
(Access97には無かったと思ったけど・・・)
Excelにも、ふりがな機能があるように、それと似たような機能です
但し、Excelと違い、Accessの場合、フィールドを1つ作る必要があります
テーブル作成で、テキスト型を使用する場合、プロパティに「ふりがな」とありますので、見て確認ください

・「BookShelf」も、見たことはありますが、使ったことは無いです
「キー入力時」ごとに、検索かけ直しを行ってるのかな?
あまり頻繁に抽出を行うと、操作性が著しく低下するから、前回の抽出した条件と相違した場合と、工夫も必要になってくるのでしょうけど・・・
    • good
    • 0
この回答へのお礼

Dxakさんありがとうございました。
「よこはま」の「ま」「ma」の次は「hama」とIが0になるまで
繰り返すわけですね。
・私は、初心者なので、以下お許しください。
1 確認点
 なぜ最後の「ma」から開始するのかは、最初に文字総数からIを引いて行く方が効率が良いというか当然なのですね(はじめ気づかなかった)
2疑問点
 最初に拗音をはねるのは、拗音は頻度が低く処理速度が遅くなるからでしょうか(費用対効果的な問題)
但し、文字の真ん中に拗音があるとはねられてヒットしない気が。
3 参考 
 アクセスでふりがな自動入力させた場合、関数でアルファベットを育成するのもよいと思いました。
 また、テーブルを作る際、読みのフィールドを作るなら検索の速さだけを考えた場合、読みは、ひらがなよりもアルファベットで入力しておいた方が断然早いと思いました。(BookShelfのサクサク感にこだわり)
なお、以下の問題点が
(1)「shi」「si」ローマ字の入力方法をユーザーに徹底する必要
(2)アクセスでふりがな自動入力の場合、ユーザーによっては雅夫と入力する際、「みやびおっと」とふりがなされる可能性
以上、うだうだと書いてしまいましたが、これも日本語独特の異字体によるヒットしない問題(渡辺の辺。高橋の高)←あいまい検索できるというのは、度外視して。
4 参考書籍やホームページ(検索に関して)
について、お勧めがあればご教示願います。
ありがとうございました。

お礼日時:2008/07/20 01:26

う~ん、「駅すぱあと」の「インクリメンタルサーチ」と言うものが、どう言う物か、よく判らない出の回答ですので、その辺りはご了承ください



いろいろな手法が、考えられますが・・・
・「浅草」「あさくさ」「asakusa」のデータをテーブルとして持っておく
・「浅草」「あさくさ」をデータをテーブルとして保持、ローマ字は、関数化して生成

など

1番目のが、最初のが作成は楽ですが、入力が大変
2番目のが、入力(ふりがなを使用すれば、1つ入力だけで済む可能性がある)が楽だけど、関数が大変

あとは、クエリーで

Select 漢字
From テーブル名
Where [漢字] Like [コントロール名] & '*'
or [ふりがな] Like [コントロール名] & '*'
or [ローマ字] Like [コントロール名] & '*';

と、言う感じで、抽出していけばよい
コントロール側で、入力中に絞っていくなら、「キー入力時」で、上記クエリーを、VBA側で[コントロール名]を実の値で置き換えてSQLを動作させないと、多分、抽出する値が、読み取れない可能性があるかな

で、書いていることは、大体、理解できますか?
    • good
    • 0
この回答へのお礼

Dxakさんありがとうございます。
1番目は、なんとなく分かるのですが2番目が分かりません。
ご教示願います。
以下内容です。
・1番目に対する私の理解は
特定の[コントロール名]に入力した値を変数に持って、 漢字、ふりがな、ローマ字のいずれで入力されても[漢字][ローマ字][ふりがな]各フィールドでor検索する です。
・2番目は、[漢字][ふりがな]の各フィールドを持つテーブルで、[ローマ字] フィールドの値をどのように関数化して生成するかという点、又、[ふりがな]だけでどのようにして漢字やローマ字が育成されるのか分かりません。
なお、
・インクリメンタルサーチのイメージは、駅すぱあとの他にありました。
例えばBookShelf(マイクロソフト)です。あんな挙動は、VB?C?(私は、どちらも知りません。しかし、少なくともvbaで実現できそうにない感じがするのです。速度とか)
以上です。

お礼日時:2008/07/17 23:06

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!