Access VBの検索をする命令でエラー

このQ&Aのポイント
  • Access VBの検索をする命令でエラーが発生しています。テスト用データではエラーが出ないが、本番切り替え時にエラーが出ることがあります。
  • エラーの原因は不明ですが、動作環境はWinXP、WinVista、Win7でAccess 2003とAccess VBで構築したDBです。
  • 具体的なエラーメッセージは「実行時エラー’3265’。要求された名前、または序数に対応する項目がコレクションで見つかりません」となっており、エラー箇所は「rs2.Find criteria, 0」です。
回答を見る
  • ベストアンサー

access vb の検索をする命令でエラー

access vb の criteria を使用してデータ検索をする命令の箇所でエラーが出る (テスト用データではエラーが出ない)   テストを終え本番切り替え時にエラーが出る。   動作環境はWinxp,winvista、win7 access2003とaccessvbで構築したdb      実行時エラー’3265’もどこを見て原因があるかも不明です     (Accessデータベースを検索するためAccessのフォームにある Access vbの、(1)ロジックと、(2)エラー表示の内容) (1)ロジック      rs2.Open "講座開始日時テーブル",cx,adOpenKeyset,adLockOptimistic  criteria = "講座コード ='”& 講座コード & "'"   ’講座コードの属性は string      rs2.moveFist      rs2.find critera, 0    ’<- この命令のところでテスト用プログラムでは                    ’エラーがでないのに、本番用プログラムでは                    ’以下のエラーが出て原因が把握できない状態です       Do Until rs2.EoF                 If rs2.EOF Then 講座番号確認区分 = "エラー"  ’エラー表示 GoTo enda Else 講座コード = rs2!講座番号    ’データ検索OK          GoTo XXX  Endif      Loop (2)エラー表示  |ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー  |Microsoft Visual Basic  | 実行時エラー’3265’  | 要求された名前、または序数に対応する項目がコレクションで見つかりません。  |   |   | 継続  終了(E)  デバッグ(D)  ヘルプ(H)  |ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

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

  • ベストアンサー
  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.2

> テストを終え本番切り替え時にエラーが出る。 テスト環境と本番環境をどう区分け・切り替えされているのか、非常に気になりますね。 テスト環境と本番環境のテーブル[講座開始日時テーブル]の内容を 比較・確認できないのですか?

yama3ry
質問者

お礼

ありがとうございました。    「テスト環境と本番環境のテーブルの内容を比較・確認できないのですか」  と言っていただき、本番のDBとテストのDBの問題の個所の項目名(フィールド名) を比較したところテストの項目名が変更されていました。  本番のソフト・データを全てコピーしてテストを開始していましたが、 何回も問題の個所で止まってしまい原因がわからないまま思考錯誤をして いる間に、変更されていました。  criteria で使用する名称に()付の名称がつけてありましたがcriteriaでは 使用できないことが判明し()付の名称を修正し全て解決できました。  適切なアドバイス本当にありがとうございました。

その他の回答 (1)

  • MARU4812
  • ベストアンサー率43% (196/452)
回答No.1

> 講座コード = rs2!講座番号    ’データ検索OK 講座開始日時テーブル に 講座コード が無くて 講座番号 があるように見える。 この時点でテーブルの項目名の統一が出来ていない不具合満載プログラム臭くて 私は関わりたくないですね。 > 要求された名前、または序数に対応する項目がコレクションで見つかりません。 まずはエラーメッセージ通りの不具合が起こったと思って確認すべきでしょう? コレクション(rs2)の中身を検証するようなテストコードを書いて確認するのが普通。 フィールドインデックス指定でカラム名を出力して、単純なスペルミスなどが無いか 確認したの?

yama3ry
質問者

お礼

詳細な解説有難うございました。  原因は criteria = "講座コード4 ='" & 講座コード4 & "'"   をコーディングしてテストを繰り返していましたが エラーが出てテストをしている間にフィールド名称が何故か   講座コード(講座名) ⇒ 講座コード4 に自動的に変換   されてしまい テストではうまく作動するようになっていました。   正しくはフィールド名称が カッコ付きで次のように   criteria = "講座コード(講座名)='" & 講座コード(講座名) "'"  とすべきですがではうまく作動しないようです。   原因が分かりましたのであとは何とか対処できると思います。 本当にありがとうございました。

関連するQ&A

  • VB6.0DataGridでのUpdate文で疑問?

    ADOの勉強したばっかりで、あまり詳しくありませんのでよろしくお願いします。 DataGridを使ってある条件で抽出しています。その抽出したものを更新したいのですが、 Do rs!分類ID = text1 rs.Update rs.MoveNext Loop Until rs.EOF という命令を書くと、いいような気がするのですが、なぜか抽出したデータが一個おきに書き換わります。 でも、 Do rs!分類ID = text1 rs.Update rs.MoveNext  if rs.EOF then rs.Previous END IF Loop Until rs.EOF と命令するとすべてのデータが書き換わります。 なぜなんでしょうか?疑問です。 VB6.0、ACCESS2000です。

  • Access97で「パラメータが少なすぎる」のエラーとは?

    Win98SE、VB6.0+SP3からAccess97のmdbを読んで処理するプログラムで、 On Error GoTo Err_Hndr Set db = OpenDatabase(sDatabase) sSQL = "select * from station WHERE compare.[stationNo] = 1;" Set rs = db.OpenRecordset(sSQL, dbOpenSnapshot) このSet rs文のあと、エラールーチンに飛んでしまいます。 エラーコードは3061(パラメータが少なすぎます。1を指定して下さい) です。 このエラーはどういう意味で、どうやって解決すればいいのでしょうか?

  • 命令を変数に応じて変化させるには?

    「テーブル1」というテーブルの「データ」というフィールドにA~Jまで10個データが格納されていたとします。 このデータを変数 DATA01~DATA10 にそれぞれ格納したいと思っています。 下記ソースでは、レコードの終端までループしても、DATA01に「テーブル1」の1レコード目の値、"A"しか格納できませんが、これをDATA02に"B",DATA03に"C"・・・と順々に格納するにはどうしたら良いのでしょうか? それぞれの変数に応じた命令を一つ一つ書くのではなく、Countの値に応じて命令そのものを変化させて行いたいと思っています。他の言語ではわかるのですが、VBではどうするのかわかりません。 ご指導程お願い致します。 Private Sub テスト_Click()   Set DB = CurrentDb   Set RS = DB.OpenRecordset("テーブル1")   Count = 1   Do Until RS.EOF    DATA01 = RS!データ    RS.MoveNext    Count = Count + 1   Loop   End Sub

  • Access2002 VB がエラー

    Access2002 VBで以下のコーディングをしてます Dim db As Database Dim rs As Recordset Dim fld As Field Set db = CurrentDb Set rs = db.OpenRecordset("ConvertChar") これを実行するとdb宣言行で以下のエラーが表示されます。 コンパイルエラー: ユーザ定義型は定義されていません。 これは何が原因でエラーとなるのでしょうか? 宜しくお願いします。

  • ExcelVBAでAccessのデータを検索する

    Excel  VBA で、ADOを用いてAccess のデータを検索するにはどうしたらいいですか。 やりたいこと 検索結果を、Excel のセルにコピーすること。 ソースコード 'MDBファイルに接続します Set db = New ADODB.Connection db.Provider = "Microsoft.Jet.OLEDB.4.0" db.Open "C:\Database\test.mdb" 'レコードセットを開きます Set rs = New ADODB.Recordset 'テーブルを開きます rs.Open "PT_MST", db, adOpenForwardOnly, adLockReadOnly findName = ws.Cells(i, 1) & ws.Cells(i, 2) Do ' rs.Find "[S_NUM]='" & findName & "'" rs.Find rs.Fields(1).name & " Like '20k%'"  ← ここで、サポートしていない旨のエラーが出る。 If Not (rs.EOF) Then Debug.Print rs.Fields(1).Value Else Exit Do End If rs.MoveNext Loop Until rs.EOF '閉じる rs.Close db.Close '終了処理 Set rs = Nothing Set db = Nothing どう直したら、検出結果を取得できますか。 ご教示下さい。

  • ADOによる検索条件の書き方(アクセス2003)

    以下のようにADOを使った検索で, (1)と(2)の条件ではそれぞれうまくいくのですが、二つをつなげた(3)の条件ではエラーになります。なにが問題なのでしょうか criteria = "[年月] = '2013/10'"...........(1) criteria = "[部署ID] = 9".................(2) criteria = "[年月] = '2013/10' and [部署ID] = 9".........(3) rs.Find criteria

  • 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

  • VBでACCESS(アクセス)にSQLを発行したときのエラーについて

    VBでアクセスのデータにSQLを発行してテーブルに更新等の処理をしています、削除や検索では該当するレコードがないとエラーコードが返りますが、挿入の場合はすでにあるデータに重複するデータを登録する(二重登録)処理をしてもエラーになりません? なにもメッセージがないので登録されたのか、だめだったのかを判断することができません、このような場合に二重登録の判定をするには先に検索をして当該データの有無を調べた後に登録処理にを行うようにするしかないのでしょうか?(同じことが更新についてもあてはまります) データの挿入にはjetSQLのinsert intoステートメントを使用しています データの更新には同updateステートメントを使用しています

  • エラー時の 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とかも考えたのですが、さっぱりうまく動きません・・。 どうかご指導宜しくお願いします。

  • VB6でのファイル作成方法

    VB6.0でファイルを作成するにはOPEN命令を使用しますが、その時ファイル最後尾にEOFコードが入ってしまいます。このEOFコードが入らない様にするにはどうしたら良いか?試行錯誤していますが、どうにもうまくいきません。 どなたか分かる人がいたら教えて欲しいのですが・・・。