• 締切済み

テキストファイル形式データのレコード検索

Visual Basic初心者の質問です。 お分かりになった方,ご教示をお願いします。 VB6を用いたプログラミング環境でデータコントロールを用いてテキストファイル形式(CSVフォーマット)のデータベースファイルを読み込ませました。フィールドに見合ったテキストボックスを作成し,データコントロールと連結させたところ,フィールドデータを上手く表示できました(つまり,ここまでは問題なし)。 そこで,検索用のボタンを作成し,そのボタンがクリックされた時,Input boxを表示させて「検索したい文字列」を入力させ,検索結果をテキストボックスに表示させたいので,FindFirst methodを用いて次のようなコードを書きましたが,上手く動作しません。エラーメッセージは「このオブジェクトに対して,この操作は実行できません」でした。 Private Sub command1_Click () Data1.Recordset.MoveFirst Data1.Recordset.FindFirst "検索Field名='取得した文字列の変数'"" FindFirst以下のcriteriaの記述の仕方に問題があるのでは,と思っていますが,現時点では問題の解決を見ていません。 解決策,コメント等,お願いします。

みんなの回答

  • miya_777
  • ベストアンサー率31% (44/140)
回答No.3

Print.Debug Data1.Type Print.Debug dbOpenTable をData1.Recordset.MoveFirst の直前に入れたら、デバッグウィンドウにいくつが表示されますか? 両方とも「1」が表示された場合、FindFirstは使用できません。 テーブルのタイプによって、使用可能なメソッドとプロパティがあります。 詳しくはVBのヘルプで「Recordsetオブジェクト Recordsetsコレクション」 を表示して、「プロパティ」や「メソッド」を見ていただくと、各タイプに合わせて使用可否が表示されると思いますので、そちらで使用可・不可を確認してください。

cholerae
質問者

お礼

miya777様へ ご指摘の方法で検討してみました。 結果は「1」の表示でした。 そこで,Visual Basicのオンラインヘルプを精査しましたがFindFirst以外のMethodはありませんでした。 従って,もう一度基本に立ち返って,Active Controlのproperty windowの個々の設定の意味をチェックしました。 その結果,Recordsource TypeをDynaset(or Snapshot)にすることでFindFirstが使えることが分かりました。 それまで,ここの部分はTableになっていました。 ご迷惑をおかけしましたが,一応,「解決」をみました。 ありがとうございました。

  • miya_777
  • ベストアンサー率31% (44/140)
回答No.2

Data1.Recordset.FindFirst "検索Field名='取得した文字列の変数'"" となっていますが最後の「""」は間違いですか? ""と記述すると「"」1文字の文字として判断してしまいます。 Data1.Recordset.FindFirst "検索Field名='取得した文字列の変数'" であっていますか? また、変数を使うなら、 Data1.Recordset.FindFirst "検索Field名='" & 取得した文字列の変数 & "'" とすればOKかもしれません。

cholerae
質問者

補足

miya_777さん,コメントありがとうございます。 ご指摘の文字列変数の後の「""」は私のタイプミスです。 それと,解決策として提案頂いた内容ですが,すでに確認済みで「うまくいきません」でした。 私の「勘」で申し訳ありませんが,検索Field名のところが「おかしい」ように思います。 これまでのtrialでは,テキストファイルに示したフィールド名をそのままcriteriaの部分に記していますが,Data1.DataSourceのproperty windowでは,File名#txtを選んでいて(この記述はVBで「自動的に」出てきました),ここに個々のfield名は出てきません。アクセスデータファイルだと普通こんな形では出ないように思います。 以上,よろしくお願いします。

  • miya_777
  • ベストアンサー率31% (44/140)
回答No.1

Data1は、RecordSetオブジェクトですか? Data1のデータ定義はどうなっていますか? OpenResordSetは記述しました?

cholerae
質問者

補足

Data1はRecordSet Objectで間違いないと思います。 なぜなら,つぎのようなmethodは問題なく実行されます。 Data1.RecordSet.MoveLast Data1のデータ定義に関わる部分(property window中)は次のように設定してあります。 connectはTxt; Default typeは2-Jet RecordSourceはファイル名#txt です。 OpenRecordSetは特別に記述していません。 以上,よろしくお願いします。

関連するQ&A