• 締切済み

テキストの通りにやってるのに、エラー発生。

VB5.0 のテキストを使って、VB6.0 でプログラミングしています。 テキスト内のサンプルプログラムを組んでいるのですが、検索がうまくいきません。 prompt$ = "******" SearchStr$ = InputBox(prompt$, "Search") 1 datBiblio.Recordset.Index = "Title" 2 datBiblio.Recordset.Seek "=", SearchStr$ If datBiblio.Recordset.NoMatch Then datBiblio.Recordset.MoveFirst End If とコードが書かれています。 1 の "Title" を Title とすると、とりあえずそのエラーはクリアできるのですが、 2 で「カレントインデックスを指定してください。」とエラーになります。 何が間違っているのかイマイチ分かりません。 補足はいたしますので、よろしくお願いします。

noname#5356
noname#5356

みんなの回答

noname#102878
noname#102878
回答No.1

テキストでサンプルに使用しているMDBファイルはVBに付属してくるサンプル用MDBだと思います。 VB5.0に付属するMDBとVB6.0に付属するMDBは別物じゃないですかねぇ、普通に考えて。 「="Title"」だとその行でエラーが出るっていうのは、「="Title"」だと、サンプルMDBの中に「Title」という名前のIndexが存在していないとダメなんです。 「=Title」でエラーが回避できるようですが、これはIndexに対してTitleという名前の変数の値を入れてるからですね。 おそらくTitleなんて変数は使ってないでしょうから変数の中身は空っぽです。 なので「=""」ってしてるのと同じ。 「Seek」の行でエラーになるのは、Indesに指定した名前が存在しないからでしょうね。 -------------------- 以下蛇足です。 「"Title"」と「Title」は大違いです。 「"Title"」は「Title」という文字を表します。 「Title」は「Title」という名前の変数を表します。変数の中身はその時の状況で変化します。 コードを見る限り「変数の宣言を強制する」のオプションを使っていないようです。 この場合、初めて登場してきた「VBが知らない意味不明な文字」はすべて変数だと認識され、その行を実行する直前にメモリ上に変数が作成されます。 当然中身は空っぽの初期値です。 現在のモジュールの先頭行に「Option Explicit」とだけ書いて実行すると新しいエラー体験ができることでしょう。 ヒントは[ツール]-[オプション]-[変数の宣言を強制する]です。 --------------------

noname#5356
質問者

お礼

先輩に聞いたところ、解決しました。 ありがとうございました。

noname#5356
質問者

補足

回答、ありがとうございます。 >VB5.0に付属するMDBとVB6.0に付属するMDBは別物じゃないですかねぇ、 もちろん分かっています。MDBは自分で別に作り直しています。 テーブルの内容も同じように作りました。 >サンプルMDBの中に「Title」という名前のIndexが存在していないとダメなんです。 これも分かりますし、Titleもちゃんとあります。 >「Seek」の行でエラーになるのは、Indesに指定した名前が存在しないからでしょうね。   存在するんですよ。これは何度も確認したので間違いありません。 >コードを見る限り「変数の宣言を強制する」のオプションを使っていないようです。 今のところ、使わないという設定でしています。 他に何かあれば、教えていただきたいのですが。 よろしくお願いします。

関連するQ&A

  • コンパイルエラーが出ます。助けて下さい。

    初歩的な質問ですみません。 参考書を参考に検索するVBAを書いたのですが、 12行目のFindfirstの所で、「コンパイルエラー:メソッドまたはデータメンバが見つかりません」 というメッセージが出てしまいます。 VBAは、下記の通りです。 宜しくお願いします。 ******************************************************************************************************************************************** Private Sub 検索_Click()   Dim kaizen_rs As Recordset   Dim field_name As String   Dim find_txt As String   Dim criteria As String   field_name = "提案内容"   find_txt = InputBox("検索したい文字を入力してください。")   criteria = field_name & "='" & find_txt & "'"   Set kaizen_rs = CurrentDb.OpenRecordset("管理/提案テーブル", dbOpenDynaset)   kaizen_rs.FindFirst criteria     If kaizen_rs.NoMatch Then       MsgBox find_txt & "は見つかりません"     Else       Do Until kaizen_rs.NoMatch         MsgBox find_txt & "を" & kaizen_rs.AbsolutePosition + 1 & "レコード目で見つけました。"         kaizen_rs.FindNext criteria       Loop     End If End Sub ******************************************************************************************************************************************************

  • 重複チェック

    いま、重複チェックをしているのですが、MoveFirstで データをある分だけ調べていて、データが重複してなかったら、データを更新したいのですが、はじめにMoveFirst で、データを調べたので、カレント行が最終行にあると思うので、それを例えば、3行目のデータだったり、5行目のデータを変更したいのですが、よろしくお願いします。 重複チェック rs.MoveFirst   Do While Not rs.EOF    If Text2(0).Text <> rs.Fields(1) Then rs.MoveNext End If Loop rs.Fields(1) = Text2(0).Text

  • VBAのinputboxで何もいれずに[OK]を押した時エラーになります

    よろしくお願い致します。 EXCELのVBAで「inputbox」を使ってセルを選択させたいと考えております。 下記のコードだと「キャンセル」や「×」で閉じられた時はmsgbox「キャンセル」が出てExit subするのですが、何も入力しないで「OK」を押した場合がどうしてもエラー(入力した数式は正しくありません)になります。 いろいろ調べて試したのですがどうしてもできず困っています。 どなたか教えてください。 Sub test() Dim myAns As Range On Error Resume Next Set myAns = Application.InputBox(Prompt:="セルを選択してください。", Title:="セル選択", Type:=8) On Error GoTo 0 If myAns Is Nothing Then MsgBox "キャンセル" Exit Sub ElseIf myAns = "" Then MsgBox "最低1つは選択してください" Exit Sub Else MsgBox myAns.Address(0, 0) End If End sub

  • エラー時の MsgBox の出し方

    VB5 WIN2000  です。 おはようございます。初心者の質問で申し訳ありませんが、宜しくご指導頂きたいと思います。 MsgBoxの質問です。顧客管理表を作っていますが、存在しない顧客番号等を検索をした時に 《実行時エラー'3021': カレントレコードがありません》 というエラーが出ます。これを、 MsgBoxで、「データーは存在しません。」という感じで表示できるようにするには、どのようなコードを書けばいいでしょうか? ちなみに今は、データを抽出できた時に rs.MoveNext If rs.EOF Then MsgBox "(^ω^)Already at end of recordset!" rs.MoveLast Exit Do End If Loop というメッセージを出すようにしてます。 これの後に続くコードとしては、どのような感じにすれば・・? BOFとかも考えたのですが、さっぱりうまく動きません・・。 どうかご指導宜しくお願いします。

  • Access2010 「演算子がありません」エラー

    フォーム上に別フォームを開くボタンがあるのですが、クリックすると実行時エラーが表示されます。 実行時エラー 3075 クエリ式”コード IN(○○,××)の構文エラー 演算子がありません。 コードを数値型からテキスト型に変更したのが原因だと思います。 エラーが出ない方法を教えていただければ助かります。 よろしくお願いいたします。 Dim rst As Recordset Dim strWhere As String Set rst = Me.RecordsetClone With rst If .RecordCount = 0 Then Beep Exit Sub End If .MoveFirst strWhere = "" Do Until .EOF strWhere = strWhere & IIf(Len(strWhere) > 0, ",", "") & !コード .MoveNext Loop .Close strWhere = "コード IN (" & strWhere & ")" End With DoCmd.OpenForm "フォーム", , , strWhere

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

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

  • データベース操作時エラーについて

    VB初心者です。 VB6+Access2000の環境下でプログラムを実行すると 「実行時エラー’3219’ このコンテキストで操作は許可されていません」とエラーになります。 下のプログラムの(2)の箇所でエラーになります。 (1)はエラーになりません。 つまり次のレコードに移動は問題ないのですが、前のレコードを表示 させようとするとエラーになります。 原因と解決方法をご教授ください。 ----------------------------------------------------------- プログラム Private mCn As ADODB.Connection Private mRs As ADODB.Recordset --------------------------------- Private Sub Form_Load() Set mCn = New ADODB.Connection mCn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data    Source=.\word.mdb" mCn.Open Set mRs = mCn.Execute("Select * From week_cel") End Sub --------------------------------- Private Sub Command1_Click() ’(1) mRs.MovePrevious If mRs.BOF Then mRs.MoveFirst End If End Sub -------------------------------- Private Sub Command2_Click() ’(2)   mRs.MoveNext If mRs.EOF Then mRs.MoveLast End If End Sub   

  • 未記入でエラー表示するスクリプト

    下記のスクリプトはFLASHの掲示板&CGIです。 もし、名前とコメントが記入していなければ「名前とコメントは必ず入力してください。」とエラーが出ます。 on (release) { if (name.text != "" && com.text != "") { error = ""; _root.action = "regist"; _root.name = escape(name.text); _root.mail = escape(mail.text); _root.home = escape(home.text); _root.title = escape(title.text); _root.com = escape(com.text); _root.pass = escape(pass.text); _parent.gotoAndPlay("send"); } else { error = "名前とコメントは必ず入力してください。"; } // end else if } タイトルも記入しなければエラーにしたいので、 if (name.text != "" && title.text != "" && com.text != "") と修正したのですが、タイトルが未記入でもエラーになりませんでした。 どこが間違っておりますか? 宜しくお願いします。

  • VB初心者ですAccessを更新したいのですが

    VB初心者です、よろしくお願いします。 VBでAccessのレコードの一項目を更新したいのですが出来ません。 抽出条件からAccessのデータを持ってきた後、更新したいのですがどうすればいいのでしょうか? 因みに抽出条件までは変更できません、AddNew以降でお願いします。 VB6でAccess2003です。 エラーは現在のRecordsetは更新をサポートしておりませ。プロダイバーかロックタイプの限界の可能性があります。 Set rst = New ADODB.Recordset '処理をするテーブル指定 rst.Open "[**]", db, adOpenStatic, adLockOptimistic With rst .MoveFirst .Filter = "" criteria1 = "" criteria1 = "**= '" & Module1.** & "'" .Filter = criteria1 If .RecordCount = 0 Then MsgBox "は登録されていません" Else .Filter = "" criteria2 = "" criteria2 = "**= '" & Module1.** & "' " .Filter = criteria2 If .RecordCount = 0 Then MsgBox "登録されていません" Else .Filter = "" criteria3 = "" criteria3 = "**'" & Module1.** & "' " .Filter = criteria2 If .RecordCount = 0 Then MsgBox "登録されていません" Else Module1.** = rst.Fields("**") .AddNew .Fields("***") = Module1.** .Update End If End If End If End With

  • 検索機能を付けたhtmlにジャンプ機能を付けたい

    いま、下のような状態で作成しています。 <html lung="ja"> <head> <title>参考資料</title> </head> <body> <!--search--> <form method="get" action="" name="search"> <div class="search">キーワード検索(キーワード入力>「Search」押下)・・・赤く反転したところが、該当箇所です<br /> <input id="search" name="search" size="20" style="width:300px" class="form" /> <input type="hidden" name="mySearch" value="" /> <input type="button" value="Search" class="button" onClick="javascript:doSearch()" /> </div> </form> <pre>   ・   ・   ・ </pre> <script type="text/javascript" language="javascript"> <!-- // フォント(font = "" などを指定する) var fontName = ""; // フォントカラー(変更しない場合は、fontColor = "" とする) var fontColor = ""; // フォントサイズ(単位はpx、変更しない場合は 0 を指定する) var fontSize = 0; // 太字(0:太字にしない、1:太字にする) var isBold = 0; // 斜体(0:斜体にしない、1:斜体にする) var isItalic = 0; // 下線(0:下線をつけない、1:下線をつける) var isUnderline = 0; // 背景色(変更しない場合は、backColor = "" とする) var backColor = "#FF8080"; searchWordHighlighting(); function searchWordHighlighting() { if (!document.body.createTextRange) return; var range = document.body.createTextRange(); var searchStr = getSearchStr(); if (searchStr == "") return; range.collapse(true); while (range.findText(searchStr)){ if (fontName != "") range.execCommand("fontName", true, fontName); if (fontSize > 0) range.execCommand("fontSize", true, fontSize); if (fontColor != "") range.execCommand("foreColor", true, fontColor); if (isBold != 0) range.execCommand("bold"); if (isItalic != 0) range.execCommand("italic"); if (isUnderline != 0) range.execCommand("underline"); if (backColor != "") range.execCommand("backColor", false, backColor); range.collapse(false); } } function getSearchStr() { var urlStr = "" + window.location; var baseStr = "mySearch="; var index = urlStr.indexOf(baseStr); if (index == -1) return ""; urlStr = urlStr.split("%25"); urlStr = urlStr.join("%"); return decodeURIComponent((urlStr.substring(index + baseStr.length)).replace("%25", "%")); } function doSearch() { window.document.search.mySearch.value=encodeURIComponent(window.document.search.search.value); window.document.search.submit(); } //--> </script> </body> </html> これに「Serch」クリック後、該当箇所にジャンプする機能を付けたいです。 教えていただければ幸いです。 宜しくお願いします。

専門家に質問してみよう