- ベストアンサー
データベース操作時エラーについて
- VB初心者でもわかる!データベース操作時のエラーを解決する方法とは?
- VB6+Access2000の環境下でプログラムを実行する際に「実行時エラー’3219’ このコンテキストで操作は許可されていません」というエラーが発生します。特に(2)の箇所でエラーが発生する現象が報告されています。このエラーの原因や解決方法について詳しく解説します。
- データベース操作時に発生するエラーについて知りたい方必見!VB初心者でもわかるように、具体的なプログラムの箇所やエラーメッセージを紹介しながら、エラーの原因や解決方法について解説します。必ず役立つ情報が得られるはずです。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
載っている問題のソースは、コネクション/レコードセット共に デフォルト値を使用しています。 よって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
その他の回答 (4)
- TAGOSAKU7
- ベストアンサー率65% (276/422)
>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)
エラー問題はgoogleとMSで検索してみましょう。 例えば、参考URLによると mCn.CursorLocation = adUseClient とか
- k_kazari
- ベストアンサー率68% (15/22)
ダメでしたか・・・ごめんなさい。 夜中に頑張ってますね!お疲れ様です。 ちなみに、 Private mRs As New ADODB.Recordset でもダメ? ( New を追加 ) 自分がADOでDB操作した時のコード見てみましたが これぐらいしか、思いつきません。 う~~~ん。ダメかなぁ・・・ う~~~ん。ボタンイベントでこけるって事は これもダメかな・・・ ダメならごめんなさい
- k_kazari
- ベストアンサー率68% (15/22)
こんばんわ。 >下のプログラムの(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件の場合 はずしてたら、ごめんなさい。
お礼
ご回答ありがとうございました。 残念ながらうまく動作しませんでした。 もうすこしがんばってみます。
お礼
ご回答ありがとうございました。 大変参考になりました。