• ベストアンサー

文字のリアルタイム検索がしたいんです…

質問を見てくださってありがとうございます。 少し説明が長いのですがどうぞ見てやって下さい。 さっそく質問内容なのですが…。 私がしたいと思っているのは文字列のリアルタイム検索です。まず、それが具体的にどういうことなのかを説明します。 あるFORM1にテキストボックスと一覧表示系コントロール(私が使っているのはTDBGridというコントロールです…)を配置しています。その一覧系コントロールには名前とそのフリガナが表示されます。その状態でテキストボックスにフリガナを入力して沢山あるリストの中から該当する名前(フリガナ)を検索しカレント行にする。というものなのですが、この時"リアルタイム検索"というのがどういうことかといいますと…。 一覧系コントロールに以下のような内容が表示されているとします。 -------------------- 名前  フリガナ -------------------- 相田  アイダ 飯田  イイダ 石狩  イシカリ 石川  イシカワ 渡   ワタリ -------------------- この中の"イシカワ"を検索する時…、 「イ」を入力すると飯田さんの行がカレント行になり 続いて「シ」を入力すると石狩さんの行がカレント行る。 更に「カ」を入力して「ワ」を入力すると石川さんの行がカレント行になるというものです。 これは入力した文字を一文字づつ認識してやり、一覧から検索してきて一番初めにヒットしたものを探し出してくるのですが、ここで問題となるのが入力した文字を一文字づつ認識させるということだと思うんですね。 実際は、入力しても一度[Enter]キーを押すまで、変換待ちになってしまいますから…。 ホントにどうしたらいいんでしょう…。 ずっと考えているのですが分からなくて困っています、わからないけどこうしたらどうかな??なんて回答でもいただけたら嬉しいのでどうぞ宜しくお願いしますm(__)m

質問者が選んだベストアンサー

  • ベストアンサー
  • coco1
  • ベストアンサー率25% (323/1260)
回答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は、最近余り触っていないので、もっと良いルーチンがあるかも知れませんが思いつきません...。

ryuji0202
質問者

お礼

お礼が遅くなってしまって申し訳ありません。 回答ありがとうございました! 半角英数文字を入力させて比較させる、ってのはいい案ですね! そうすれば入力時にEnter待ちってなことにはならないですからね。 一度試して見たいと思います、本当にありがとうございました。

その他の回答 (4)

noname#11856
noname#11856
回答No.4

少々、めんどくさいですが。。。(^-^; IMEをオフ固定にし、KeyPress(お好みでKeyDownでもいいですが)でキーを拾う。拾ったらKeyAsciiを0にして入力がなかった事にする。 子音であればStatic変数にでもおいておき、母音が入力された時、前回の入力で子音が入力されていなければア行の表示。子音が入力されていれば・・・。 なんていうか、タイピングソフトでも作れそうな勢いです。(笑) うちのPCにはVB.NETしかインストールしていないのですが、一応、テストしてみました。ローマ字入力かつ、カタカナのみという条件付きであれば、結構できそうです。(カタカナだけとはいえAsciiコードを全部調べるのが面倒だったので途中でやめちゃいましたが。(笑))

ryuji0202
質問者

お礼

回答ありがとうございます! わざわざ試していただいたということでとても嬉しかったです。 私もこの方法を試してみようと思います。 「少々めんどくさいですが…」とありますが、とんでもない!!とてもいい案だと思います! また、何かあったらよろしくお願いしますね!

  • coco1
  • ベストアンサー率25% (323/1260)
回答No.3

開発環境がよくわからないので、細かい回答はできませんが、通常、この手の処理(インクリメンタルサーチ)では、テキストボックスのOnChangeイベントで入力された文字を検知して、その都度クエリを投げてグリッドのデータソースを更新し直す、という処理になると思います。 つまり、データソースとなるデータベースが「MF名簿」、そのフィールドが(氏名、ヨミ)だとすると、テキストボックスに次のようなSQLを連動させればよいのです。 select 氏名 from MF名簿 where left(ヨミ,len(txtbox.text)) = txtbox.text order by ヨミ; データソースがないのでしたら、ループ処理で、先頭文字と比較して、一致しないものはグリッドのアイテムから除外する、を繰り返す というのも考えられそうです。

ryuji0202
質問者

お礼

回答ありがとうございます! この回答でなんだかすごくできそうな気がしてきたのですが、分からない点がいくつかあるんです(まだまだ初心者なので申しわけないです…)。 私の開発環境はVB6.0+AccessのDAOです。 OnChangeイベントについてなのですが、テキストボックスにはChangeイベントはあるのですがこれのことですか?? Changeイベントでは文字を一度Enterで確定してやらないとイベントが発生してくれないのですが、どうしたらいいんでしょう? これについてもし何か分かったら教えてもらえませんか?どうぞお願いします!!

  • O-LEO
  • ベストアンサー率27% (205/740)
回答No.2

文字・編集ボタンをクリックする毎に 入力文字の編集演算→入力文字と読みの比較→表示 を実行すれば良いのでは。

ryuji0202
質問者

お礼

本当に回答ありがとうございます。 ただ、その方法も既にやってみたんです。 説明不足で本当にごめんなさい…。 また何かあったら教えてください!

  • O-LEO
  • ベストアンサー率27% (205/740)
回答No.1

入力じゃなくて五十音ボタンにしたらどうでしょう。

ryuji0202
質問者

お礼

さっそくの回答ありがとうございます! その五十音ボタンについては既に作成済みなんです。 どうしても今回上の内容を実現したいのです…。

関連するQ&A

  • VBAなのですが、B列にカタカナが入っているとする場合、C列にローマ字を自動入力したい。

    【質問】 Excel(VBA)で下のようにデータがある場合、C列のローマ字の場所とD列の英字の場所へ、B列のフリガナを参照して自動入力したいのですが、どのようにすればよいのでしょうか。 欲を言うと、ローマ字・英字の先頭の文字は大文字が良いです。 --------------------------------------------------  名前     フリガナ     ローマ字  英字 -------------------------------------------------- 相田 章  アイダ ショウ 飯田 香  イイダ カオリ 石狩 鍋  イシカリ ナベ 石川 梓  イシカワ アズサ 渡 哲也  ワタリ テツヤ -------------------------------------------------- VB初心者なのでよろしくおねがいします。

  • google検索のようなリアルタイムな反応

    googleの検索エンジンって文字を打ってエンターを押す前からもう結果が表示されていますよね? それも文字をうつ事に結果が反映されるほどリアルタイムに。 あのように検索結果をリアルタイムに表示してくれる物をサイトの検索エンジンにも使いたいなと思うのですが、あれはどういう仕組なのでしょうか。 javascriptなどを組み合わせているのでしょうか。

    • ベストアンサー
    • CSS
  • Excel 文字列検索

        A      B      C 1  田中実    田中    田中実 2  石川武          田中康雄 3  中田英人 4  石崎甚平   石川    石川武 5  石川啓子         石川啓子 6  中田康雄 B列にA列の文字列に部分一致する文字列を入力すると C列にその検索結果を表示する様にしたい。 C1=IF(OR($B$2="",$B$2<1),"",VLOOKUP("*"&B2&"*",$A$2:$A$1500,1,FALSE))だと田中や石川のように名前がかぶると 1個しか表示されない。B2にも田中が該当する人を表示させたい。 説明が下手かもしれませんが、知恵を貸してください。よろしくお願いします。

  • EXCELで顧客管理

    EXCELで顧客管理をしたいと思います。 一行に・・・  名前、フリガナ、郵便番号、住所、生年月日・・・・・・ と一つずつのセルに入力してあります。 500名分を7シートに分けて打ち込んであります。 (1)「フリガナ」の2文字を入力すると適合する顧客が別シートに一覧として表示されるようにしたい。 (2)「フリガナ」を入力して・・・という作業をする入力フォームを作りたい。 (フリガナを入力する→検索ボタンをクリック→表に一覧が表示されるといった形式のもの) 以上、2点について教えていただければ幸いです。 これは可能なことなのかもよくわかりませんがよろしくお願いします。  

  • 検索できる文字とできない文字

    PostgreSQLでデータベースを構築している初心者です. 現在ブラウザから文字を入力し検索をかけることで, 検索結果を表示するプログラムを作っているのですが, その際に検索できる文字とできない文字があり困惑しています. 例えば,「医学」と入力するとデータベースからデータがブラウザに表示 されるのですが,「秋山浩二」と入力するとデータはあるのに 表示されないという状況に陥っています.他にも検索できる文字 とできない文字があり,なぜこうなってしまうのか分かりません. このようなことは何かの設定ミスにより起こりうることなのでしょうか. 何かお気づきの方がいらっしゃいましたら,ご教授をお願いします. 【環境】 Windows XP PostgreSQL8.0.4

  • エクセルで文字検索を簡単に。

    エクセルで文字検索を簡単にする方法はありますか? B列2行目以降に年月日(曜日)・・・同じ年月日(曜日)の行がたくさんある場合もあります。 C列以降はB列に関する文字が入力されています。 検索対象は年月ですが、検索するのに標準コマンドで検索すればよいことかと思いますが、年月日(曜日)がかなり増え、簡単に検索する方法がないかと、ネットなどで調べましたがなかなかヒットしません。 H19年4月、5月・・・H20年1月、2月・・・・○○年月の文字を1行目に作成し、その文字をクリックすると該当する年月の行の始まりまたは、該当する年月の行のいずれかを表示させる方法はありますでしょうか? エクセルは2000です。 参考サイト等ご存じでしたらよろしくお願いします。

  • エクセルで任意の文字を指定範囲から検索

    お世話になります。 エクセルにて特定のセルに入力した文字を指定してある範囲から検索し、指定した位置に表示をさせると言った事は出来るのでしょうか? 例 シート1:A1に検索したい文字を入力 シート2:A1~A50までの行を検索 シート1:上記検索で該当する行をA2~A50に表示 こういった検索は可能なのでしょうか? Ctrl+Fやフィルタではなく、セルに入力した文字を検索するようにしたいのです。 可否のみでも、こうゆうマクロを使えば出来ると言った事でも構いません。 よろしくお願いします。

  • 「このページの検索」の文字が消える

    メールの中の文字を探すとき「このページの検索(Ctrl+F)」に文字入力して単語を探しています。 Ctrl+Fを表示させ、文字入力をします。その後、そのメールは削除して次のメールを表示させ、またCtrl+Fで検索を始めるのですが、そのとき、前に入力した言葉が消えているんです。 前に入力した文字が引き続きCtrl+Fを押すだけで表示されているようにするにはどうしたら良いですか? 以前は、いったん「検索」が消えてもう一度「検索」を表示させても、検索する文字は入力されたままだったんですが、最近は消えてしまうようになりました。 教えてください。 お願いします。

  • 検索について・・・ お願いします!

    携帯用サイトで待受画像の検索に文字で検索するCGIを設置したいのですが・・・。 一覧に表示されるものは予め自分でインデックスを作成しておき、ユーザーが検索窓にキーワードを入力し検索すると、そのキーワードに合った(?)ものが一覧になって表示されるようにしたいです。 分かる方がいましたらお願いします。

    • 締切済み
    • CGI
  • 文字列の検索と比較

    文字列の検索と比較 以下の手順に従ってプログラムを作成せよ.適宜printf を利用して,入力支援(「文字列を入 力して下さい」などの画面表示)を行うこと. (1) 文字配列name[5][64] を作成する. (2) キーボードから5 人分の名前を入力し,name 配列に格納する. (3) キーボードから名前を入力し,name 配列の何番目に格納されているかを検索して表示 する.ただし,見つからなかった場合には,「見つかりません」と表示する. (4) 「quit」が入力されるまで(3)の処理を繰り返す. という処理です・・・・・。 #include <stdio.h> int main(void){ char name[5][36]; int i; for(i = 0; i < 5; i++ ){ printf("%d番目の名前を入力:", i + 1); scanf("%s", name[i] ); } printf("五人の名前を入力しました。\n"); printf("どこに格納されているか検索します。名前を入力:"); scanf("%s",name); /* ここに配列の何番目に格納されているかを検索して表示するプログラムを作成する ただし,見つからなかった場合には,「見つかりません」と表示する. 「quit」が入力されるまで処理を繰り返す処理を書く?? */ getchar(); getchar(); return(0); } 検索された文字と入力された文字が同じであることの処理はどうすればいいのでしょうか? 二つの配列を用意してループ文?でしょうか?

専門家に質問してみよう