![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
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
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
No.5
- 回答日時:
>Private mRs As New ADODB.Recordset
が気になったので発言するデシ。
As New 宣言は、テスト的には使用しますが、実際のコーディングではお勧めできません、、、
set mCn = Nothing
と明示しても、アプリ起動中はnothingになりません。
MicroSoft(MSDN)にはAs Newサンプルを掲載しておりますが、多くのメーリングリストで、As Newは否定されております。
宣言にAs Newを使用するのは、コーディングに1行減るという以外、メリットは何もなく、むしろNothing状態を取得できないデメリットの方が大きいです。
No.4
- 回答日時:
エラー問題はgoogleとMSで検索してみましょう。
例えば、参考URLによると
mCn.CursorLocation = adUseClient
とか
参考URL:http://www.galliver.co.jp/book/vb300nd/supplemen …
No.3
- 回答日時:
ダメでしたか・・・ごめんなさい。
夜中に頑張ってますね!お疲れ様です。
ちなみに、
Private mRs As New ADODB.Recordset
でもダメ?
( New を追加 )
自分がADOでDB操作した時のコード見てみましたが
これぐらいしか、思いつきません。
う~~~ん。ダメかなぁ・・・
う~~~ん。ボタンイベントでこけるって事は
これもダメかな・・・
ダメならごめんなさい
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件の場合
はずしてたら、ごめんなさい。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
性格の違いは生まれた順番で決まる?長男長女・中間子・末っ子・一人っ子の性格の傾向
同じ環境で生まれ育っても、生まれ順で性格は違うものなのだろうか。家庭教育研究家の田宮由美さんに教えてもらった。
-
レコードセットをcloseする所でエラーが出ます
Microsoft ASP
-
ADO VBA 実行時エラー3021
Visual Basic(VBA)
-
アクセスで数値型のフィールドにNullをいれたい
その他(データベース)
-
-
4
ADOのRecordSet.Openの引数について(1)
Visual Basic(VBA)
-
5
実行時エラー 3265「要求された名前、または序数
Visual Basic(VBA)
-
6
実行時エラー3001「引数が間違った型、許容範囲外、または競合しています。」
Visual Basic(VBA)
-
7
「RunSQL」と「Execute」の違い
Access(アクセス)
-
8
カレントレコードが無い事を判定させる方法
Visual Basic(VBA)
-
9
On ErrorでエラーNoが0
Visual Basic(VBA)
-
10
ADOを使ったDBアクセス後のメモリ解放
その他(データベース)
-
11
VBAでループ内で使う変数名を可変にできないか。
Visual Basic(VBA)
-
12
アクセスVBAのMe!と[ ]
Access(アクセス)
-
13
ACCESS ADOでupdateが効かない
その他(データベース)
-
14
どこにもフォーカスを当てたくない
Access(アクセス)
-
15
レコードが存在しなかった場合
Microsoft ASP
-
16
アクセス 壊れた? 「ファイルが見つかりません」
Access(アクセス)
-
17
VBAでアクセスDBからデータの取得について
Visual Basic(VBA)
-
18
実行時エラー -2147217900 ADODBでレコードセットオープン時エラー
Access(アクセス)
-
19
Accessを開きなおすとテキストボックスの値がエラー#Name?になる
その他(データベース)
-
20
前のレコードの値を自動で入れたい
PowerPoint(パワーポイント)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
UserForm1.Showでエラーになり...
-
【VBA】ワークブックを開く時に...
-
VBAでfunctionを利用しようとし...
-
ActiveCell.FormulaR1C1の変数
-
オブジェクト型の変数にフォー...
-
ACCESSで値を代入できないとは?
-
HTMLソースが表示のページのも...
-
VBでSQL文のUPDATE構文を使った...
-
MDBへレコード挿入中にエラーが...
-
マクロの「SaveAs」でエラーが...
-
【VBAエラー】Nextに対するFor...
-
String""から型'Double'への変...
-
実行時エラー´5854´ 文字列型パ...
-
インポート時のエラー「データ...
-
On ErrorでエラーNoが0
-
ApplicationとWorksheetFunctio...
-
VBA データ(特定値)のある最...
-
VBAで、Excelの選択範囲をWeb形...
-
現在、QueryTableが設定されて...
-
VBAのリストボックスで、横スク...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
UserForm1.Showでエラーになり...
-
String""から型'Double'への変...
-
VBAでfunctionを利用しようとし...
-
マクロで"#N/A"のエラー行を削...
-
お助けください!VBAのファイル...
-
On ErrorでエラーNoが0
-
実行時エラー'-2147467259(8000...
-
文字列内で括弧を使うには
-
【VBA】ワークブックを開く時に...
-
実行時エラー 438 の解決策をお...
-
Excel vbaについての質問
-
【VBAエラー】Nextに対するFor...
-
ApplicationとWorksheetFunctio...
-
フランスの生年月日(jj/mm/aaaa)
-
VBでSQL文のUPDATE構文を使った...
-
VBA データ(特定値)のある最...
-
インポート時のエラー「データ...
-
ACCESSで値を代入できないとは?
-
ActiveCell.FormulaR1C1の変数
-
「実行時エラー '3167' レコー...
おすすめ情報