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で質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセルVBAでオブジェクトが必要です 2 2022/09/10 16:37
- Visual Basic(VBA) 実行時エラー´5854´ 文字列型パラメーターが長すぎます。 3 2023/06/08 21:17
- Excel(エクセル) EXCEL マクロで行を挿入して貼り付けようとするとエラーになる。 2 2022/05/24 09:43
- Excel(エクセル) VBAのエラーが直せません 4 2023/06/12 22:10
- Visual Basic(VBA) VBAでファイルを開くプログラムがエラーです 2 2023/02/21 16:56
- Visual Basic(VBA) Excel vbaについての質問 3 2023/04/18 16:14
- Visual Basic(VBA) オブジェクトが見つかりません 1 2023/06/24 19:43
- Access(アクセス) 実行時エラー3131 FROM 句の構文エラーです について 7 2022/06/13 15:45
- Excel(エクセル) 2つのVBAを一緒にしたら機能しなくなりました(エクセル) 7 2022/06/02 12:41
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
このQ&Aを見た人はこんなQ&Aも見ています
-
「環境が人を育てる」って本当?環境によって人格や生き方は本当に変わるのか
環境が人生に与える影響は実際どれほどのものなのか、専門家の田宮由美さんに伺った。
-
レコードセットをcloseする所でエラーが出ます
Microsoft ASP
-
ADO VBA 実行時エラー3021
Visual Basic(VBA)
-
ADOのRecordSet.Openの引数について(1)
Visual Basic(VBA)
-
-
4
Access VBAで行ラベルが定義されていないというエラーが出ます
Access(アクセス)
-
5
アクセスで数値型のフィールドにNullをいれたい
その他(データベース)
-
6
「RunSQL」と「Execute」の違い
Access(アクセス)
-
7
実行時エラー 3265「要求された名前、または序数
Visual Basic(VBA)
-
8
サブフォームに対してGoToRecordするには?
その他(Microsoft Office)
-
9
実行時エラー3001「引数が間違った型、許容範囲外、または競合しています。」
Visual Basic(VBA)
-
10
On ErrorでエラーNoが0
Visual Basic(VBA)
-
11
カレントレコードが無い事を判定させる方法
Visual Basic(VBA)
-
12
MovePrevious関数について
Visual Basic(VBA)
-
13
Accessで、フォームからフォームへ値を引き継ぐやり方
Access(アクセス)
-
14
Access サブフォームでの選択行の取得
その他(データベース)
-
15
accessのレポートであとから他のテーブルのフィールドを追加する方法
Access(アクセス)
-
16
日付型のフィールドに空白を入れる方法を教えてください
その他(データベース)
-
17
前のレコードの値を自動で入れたい
PowerPoint(パワーポイント)
-
18
Accessでフィールド名を変数(文字列)で・・・
Access(アクセス)
-
19
ADOのCursorLocationプロパティ
Visual Basic(VBA)
-
20
DoEvents関数って何?
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
UserForm1.Showでエラーになり...
-
マクロで"#N/A"のエラー行を削...
-
お助けください!VBAのファイル...
-
String""から型'Double'への変...
-
VBでSQL文のUPDATE構文を使った...
-
インポート時のエラー「データ...
-
VBAでfunctionを利用しようとし...
-
実行時エラー'-2147467259(8000...
-
Python openpyxlを使用したセル...
-
実行時エラー 438 の解決策をお...
-
VBA データ(特定値)のある最...
-
VB.net 重複チェックがしたいです
-
文字列内で括弧を使うには
-
フランスの生年月日(jj/mm/aaaa)
-
html5 エラー
-
pythonのopenpyxlについて
-
【VBAエラー】Nextに対するFor...
-
error C2664: 'LPCTSTR' に変換...
-
日付書式のString型からData型...
-
Excel VBA 複数ブックシートご...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
UserForm1.Showでエラーになり...
-
String""から型'Double'への変...
-
VBAでfunctionを利用しようとし...
-
【VBA】ワークブックを開く時に...
-
マクロで"#N/A"のエラー行を削...
-
文字列内で括弧を使うには
-
実行時エラー 438 の解決策をお...
-
On ErrorでエラーNoが0
-
お助けください!VBAのファイル...
-
VBA データ(特定値)のある最...
-
インポート時のエラー「データ...
-
実行時エラー'-2147467259(8000...
-
ACCESSで値を代入できないとは?
-
VB.net 重複チェックがしたいです
-
ActiveCell.FormulaR1C1の変数
-
ApplicationとWorksheetFunctio...
-
【VB.NET】 パワポ操作を非表示で
-
「実行時エラー '3167' レコー...
-
フランスの生年月日(jj/mm/aaaa)
-
【マクロ】 IFERROR関数をマク...
おすすめ情報