
質問を見てくださってありがとうございます。
少し説明が長いのですがどうぞ見てやって下さい。
さっそく質問内容なのですが…。
私がしたいと思っているのは文字列のリアルタイム検索です。まず、それが具体的にどういうことなのかを説明します。
あるFORM1にテキストボックスと一覧表示系コントロール(私が使っているのはTDBGridというコントロールです…)を配置しています。その一覧系コントロールには名前とそのフリガナが表示されます。その状態でテキストボックスにフリガナを入力して沢山あるリストの中から該当する名前(フリガナ)を検索しカレント行にする。というものなのですが、この時"リアルタイム検索"というのがどういうことかといいますと…。
一覧系コントロールに以下のような内容が表示されているとします。
--------------------
名前 フリガナ
--------------------
相田 アイダ
飯田 イイダ
石狩 イシカリ
石川 イシカワ
渡 ワタリ
--------------------
この中の"イシカワ"を検索する時…、
「イ」を入力すると飯田さんの行がカレント行になり
続いて「シ」を入力すると石狩さんの行がカレント行る。
更に「カ」を入力して「ワ」を入力すると石川さんの行がカレント行になるというものです。
これは入力した文字を一文字づつ認識してやり、一覧から検索してきて一番初めにヒットしたものを探し出してくるのですが、ここで問題となるのが入力した文字を一文字づつ認識させるということだと思うんですね。
実際は、入力しても一度[Enter]キーを押すまで、変換待ちになってしまいますから…。
ホントにどうしたらいいんでしょう…。
ずっと考えているのですが分からなくて困っています、わからないけどこうしたらどうかな??なんて回答でもいただけたら嬉しいのでどうぞ宜しくお願いしますm(__)m
No.5ベストアンサー
- 回答日時:
#3です。
私の言うOnChangeイベントはACCESSのchangeイベントと同じものです。最近、他のツールばかり触ってますので混同してました。
それから、私が例示したクエリですが、Likeを使うことも可能です。
あと、IMEを使う環境では、おっしゃるような不具合があるのはやむを得ません。
であれば、元になるテーブルに[yomi]というフィールドを追加し、テキストボックスにも半角文字で入力するようにすればどうでしょうか。つまり「タナカ」ではなく「tanaka」とするのです。当然、クエリも半角英字をキーにして投げます。
読み仮名自体は既に入力されているのでしょうから、それをローマ字に変換して格納するのは、自作関数などで比較的簡単にできると思います。
例えば、
function mbKana2Kana(Instr as string) as string
dim MBkana as string(5)
dim RKana as string(5)
dim TmpStr as string
TmpStr = InStr
MBKana(1)="あ"
MBKana(2)="い"
MBKana(3)="う"
MBKana(4)="え"
MBKana(5)="お"
RKana(1)="a"
RKana(2)="i"
RKana(3)="u"
RKana(4)="e"
RKana(5)="o"
for i = 1 to 5
MBKana2kana = replace(TmpStr, MBKana(i), RKana(i))
next i
end.
って感じで置換をかければいいと思います。
もしかして、replace関数というのがなかったかも知れませんが他の文字列置換関数で代行できると思います。
VBは、最近余り触っていないので、もっと良いルーチンがあるかも知れませんが思いつきません...。
お礼が遅くなってしまって申し訳ありません。
回答ありがとうございました!
半角英数文字を入力させて比較させる、ってのはいい案ですね!
そうすれば入力時にEnter待ちってなことにはならないですからね。
一度試して見たいと思います、本当にありがとうございました。
No.4
- 回答日時:
少々、めんどくさいですが。
。。(^-^;IMEをオフ固定にし、KeyPress(お好みでKeyDownでもいいですが)でキーを拾う。拾ったらKeyAsciiを0にして入力がなかった事にする。
子音であればStatic変数にでもおいておき、母音が入力された時、前回の入力で子音が入力されていなければア行の表示。子音が入力されていれば・・・。
なんていうか、タイピングソフトでも作れそうな勢いです。(笑)
うちのPCにはVB.NETしかインストールしていないのですが、一応、テストしてみました。ローマ字入力かつ、カタカナのみという条件付きであれば、結構できそうです。(カタカナだけとはいえAsciiコードを全部調べるのが面倒だったので途中でやめちゃいましたが。(笑))
回答ありがとうございます!
わざわざ試していただいたということでとても嬉しかったです。
私もこの方法を試してみようと思います。
「少々めんどくさいですが…」とありますが、とんでもない!!とてもいい案だと思います!
また、何かあったらよろしくお願いしますね!
No.3
- 回答日時:
開発環境がよくわからないので、細かい回答はできませんが、通常、この手の処理(インクリメンタルサーチ)では、テキストボックスのOnChangeイベントで入力された文字を検知して、その都度クエリを投げてグリッドのデータソースを更新し直す、という処理になると思います。
つまり、データソースとなるデータベースが「MF名簿」、そのフィールドが(氏名、ヨミ)だとすると、テキストボックスに次のようなSQLを連動させればよいのです。
select 氏名 from MF名簿 where left(ヨミ,len(txtbox.text)) = txtbox.text order by ヨミ;
データソースがないのでしたら、ループ処理で、先頭文字と比較して、一致しないものはグリッドのアイテムから除外する、を繰り返す
というのも考えられそうです。
回答ありがとうございます!
この回答でなんだかすごくできそうな気がしてきたのですが、分からない点がいくつかあるんです(まだまだ初心者なので申しわけないです…)。
私の開発環境はVB6.0+AccessのDAOです。
OnChangeイベントについてなのですが、テキストボックスにはChangeイベントはあるのですがこれのことですか??
Changeイベントでは文字を一度Enterで確定してやらないとイベントが発生してくれないのですが、どうしたらいいんでしょう?
これについてもし何か分かったら教えてもらえませんか?どうぞお願いします!!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Access(アクセス) capeofdragonと申します。 Access2016を使っております。 あるフォームがあり、テ 2 2022/09/09 13:18
- ライフスタイル・ヘルスケア URLを開くアプリが見つかりません 2 2022/09/16 12:09
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- その他(Microsoft Office) Outlookメール 連絡先の検索について 〈 ご説明 〉 Windows PC の Outlook 1 2022/09/23 14:43
- Excel(エクセル) 【Excel】指定のセル内容を基に別シートのセルを検索して選択する【VBA】 1 2022/06/16 16:16
- Excel(エクセル) エクセル関数の変わった使い方 3 2022/05/13 17:12
- Windows 10 Win11で絵文字が一部表示されない 1 2023/08/02 19:46
- Excel(エクセル) Excelヘルプの原文を表示する最速の方法(手順)には? 1 2023/08/11 11:30
- Excel(エクセル) エクセルの数式で教えてください。 1 2023/06/15 14:11
- Visual Basic(VBA) VBA 重複チェック後に値をワークシートに転記する方法を教えてください。 1 2023/03/19 12:43
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
数字以外が入力されたらエラー...
-
java初心者です。入力されたの...
-
*をユーザーが入力した数字の数...
-
ワードで文字を入力する時の変...
-
正負を反転させて出力するプロ...
-
プログラミング初心者です。 Py...
-
Eclipseコンソール表示を、リセ...
-
C言語 While文(ループ)内の...
-
4桁の数字以外を入力したらエラ...
-
プログラミングの問題です 「金...
-
if文の条件にscanf関数を使うと…?
-
数値の連続入力終了条件について
-
fgetsとループ処理
-
"scanf"でエンターで改行させな...
-
至急教えてください!プログラ...
-
C言語の入出力関数の違い
-
cout関数を使っているのですが...
-
getchar使用時の入力文字消去方法
-
C言語(構造体)
-
コマンドプロンプトからのEOFの...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
数字以外が入力されたらエラー...
-
*をユーザーが入力した数字の数...
-
java初心者です。入力されたの...
-
正負を反転させて出力するプロ...
-
Eclipseコンソール表示を、リセ...
-
scanfが2回使えない・・・?;
-
プログラミング初心者です。 Py...
-
C言語でgetchar();が上手く使え...
-
Excel VBAで、Application.Inpu...
-
電卓の小数点
-
cout関数を使っているのですが...
-
"scanf"でエンターで改行させな...
-
小数か整数かを判定する方法
-
至急教えてください!プログラ...
-
getchar()について 教えてくだ...
-
scanf が無視されます
-
batプログラム上で文字列を入力...
-
コマンドプロンプトからのEOFの...
-
IF文で戻ることはできますか?...
-
プログラミングの問題です 「金...
おすすめ情報