• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:データベース操作時エラーについて)

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

このQ&Aのポイント
  • VB初心者でもわかる!データベース操作時のエラーを解決する方法とは?
  • VB6+Access2000の環境下でプログラムを実行する際に「実行時エラー’3219’ このコンテキストで操作は許可されていません」というエラーが発生します。特に(2)の箇所でエラーが発生する現象が報告されています。このエラーの原因や解決方法について詳しく解説します。
  • データベース操作時に発生するエラーについて知りたい方必見!VB初心者でもわかるように、具体的なプログラムの箇所やエラーメッセージを紹介しながら、エラーの原因や解決方法について解説します。必ず役立つ情報が得られるはずです。

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

  • ベストアンサー
  • TAGOSAKU7
  • ベストアンサー率65% (276/422)
回答No.1

載っている問題のソースは、コネクション/レコードセット共に デフォルト値を使用しています。 よってadOpenForwardOnly(前方専用)を使用したカーソルです。 それを回避するか、カーソルをローカルに持ってきたらよいと思います。 http://oshiete1.goo.ne.jp/kotaeru.php3?q=380932 方法は二つ Private mCn As ADODB.Connection Private mRs As ADODB.Recordset Private Const DEF_CONNECT As String = _ "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\word.mdb;" Private Const DEF_SQL As String = "Select * From week_cel" '※キーセット例 Private Sub ConnectKeyset()   Set mCn = New ADODB.Connection   mCn.ConnectionString = DEF_CONNECT   mCn.Open      Set mRs = New ADODB.Recordset   mRs.Open DEF_SQL, mCn, adOpenKeyset End Sub '※ユーザカーソル例 Private Sub ConnectUserCursor()   Set mCn = New ADODB.Connection   mCn.ConnectionString = DEF_CONNECT   mCn.Open      mCn.CursorLocation = adUseClient   Set mRs = mCn.Execute(DEF_SQL) End Sub

参考URL:
http://oshiete1.goo.ne.jp/kotaeru.php3?q=380932
gorou
質問者

お礼

ご回答ありがとうございました。 大変参考になりました。

その他の回答 (4)

  • TAGOSAKU7
  • ベストアンサー率65% (276/422)
回答No.5

>Private mRs As New ADODB.Recordset が気になったので発言するデシ。 As New 宣言は、テスト的には使用しますが、実際のコーディングではお勧めできません、、、 set mCn = Nothing と明示しても、アプリ起動中はnothingになりません。 MicroSoft(MSDN)にはAs Newサンプルを掲載しておりますが、多くのメーリングリストで、As Newは否定されております。 宣言にAs Newを使用するのは、コーディングに1行減るという以外、メリットは何もなく、むしろNothing状態を取得できないデメリットの方が大きいです。

  • todo36
  • ベストアンサー率58% (728/1234)
回答No.4

エラー問題はgoogleとMSで検索してみましょう。 例えば、参考URLによると mCn.CursorLocation = adUseClient とか

参考URL:
http://www.galliver.co.jp/book/vb300nd/supplement.html
  • k_kazari
  • ベストアンサー率68% (15/22)
回答No.3

ダメでしたか・・・ごめんなさい。 夜中に頑張ってますね!お疲れ様です。 ちなみに、 Private mRs As New ADODB.Recordset でもダメ? ( New を追加 ) 自分がADOでDB操作した時のコード見てみましたが これぐらいしか、思いつきません。 う~~~ん。ダメかなぁ・・・ う~~~ん。ボタンイベントでこけるって事は これもダメかな・・・ ダメならごめんなさい

  • k_kazari
  • ベストアンサー率68% (15/22)
回答No.2

こんばんわ。 >下のプログラムの(2)の箇所でエラーになります。 Private Sub Command2_Click() これ→ mRs.MoveNext  If mRs.EOF Then  mRs.MoveLast  End If End Sub で、こけるんですよね。 単純に考えて、 レコードセットがすでにEOFなのに、 .MoveNextしようとしている場合があると思います。 ここで、こけているのでは? その後に、カーソルを最後に持ってきているように見えます。 現状だと、レコードがEOFでエラーになるように思います。 Private Sub Command2_Click()  If mRs.EOF Then    mRs.MoveLast  Else   mRs.MoveNext  End If End Sub にしてみてはいかがですか? たまたま、エラーがでていないかもしれませんが レコードが0件だった場合。、(1)も(2)もこけると思います。 そんな場合はないのかもしれませんが>レコード0件の場合 はずしてたら、ごめんなさい。

gorou
質問者

お礼

ご回答ありがとうございました。 残念ながらうまく動作しませんでした。 もうすこしがんばってみます。

関連するQ&A