
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
-
Access サブフォームでの選択行の取得
その他(データベース)
-
ACCESS VBA でのエラー解決の根拠がわかりません エラー「イベントプロパティに指定した式・・
Access(アクセス)
-
-
4
ADOを使ったDBアクセス後のメモリ解放
その他(データベース)
-
5
SQL文で パラメータが少なすぎます エラー
Access(アクセス)
-
6
ACCESSでクエリを作成したら「式が複雑すぎます。」の表記が…
その他(データベース)
-
7
Access2010 「演算子がありません」エラー
その他(データベース)
-
8
実行時エラー 3265「要求された名前、または序数
Visual Basic(VBA)
-
9
エクセルのVBAについて とあるサイトのコードを参考に、CSVの文字化けを直すVBAを作成しているの
Excel(エクセル)
-
10
Access VBAで行ラベルが定義されていないというエラーが出ます
Access(アクセス)
-
11
ACCESSでVBAから選択クエリの抽出条件を指定したい
Access(アクセス)
-
12
FindFirst を複数条件で検索
Visual Basic(VBA)
-
13
ACCESSのVBAにてExcelのシートをコピーしたい
その他(データベース)
-
14
MovePrevious関数について
Visual Basic(VBA)
-
15
Access フォームのテキストボックスに半角英字のみで入力する設定は
Access(アクセス)
-
16
アクセスのマクロ
Visual Basic(VBA)
-
17
ACCESS VBAの実行時エラーなんですが
PowerPoint(パワーポイント)
-
18
ACCESSのフォーム、開くんですが、見えないようにするには
Access(アクセス)
-
19
VB6+SQL サーバー 2000 で 実行時エラー '3704' がでます:
Visual Basic(VBA)
-
20
ExcelのVBA。public変数の値が消える
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAでfunctionを利用しようとし...
-
お助けください!VBAのファイル...
-
UserForm1.Showでエラーになり...
-
【VBA】ワークブックを開く時に...
-
Filter関数を用いた結果、何も...
-
String""から型'Double'への変...
-
VBA データ(特定値)のある最...
-
ACCESSで値を代入できないとは?
-
インポート時のエラー「データ...
-
pythonのopenpyxlについて
-
レコード登録時に「演算子があ...
-
Excel vbaについての質問
-
文字列内で括弧を使うには
-
実行時エラー 438 の解決策をお...
-
オブジェクト型の変数にフォー...
-
マクロで"#N/A"のエラー行を削...
-
VB2008 comboboxを連動させた...
-
エクセルVBAで埋め込みグラフ(C...
-
VBスクリプトでIEの404 not fou...
-
Null 値の使い方が不正です と...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
UserForm1.Showでエラーになり...
-
お助けください!VBAのファイル...
-
VBAでfunctionを利用しようとし...
-
【VBA】ワークブックを開く時に...
-
マクロで"#N/A"のエラー行を削...
-
文字列内で括弧を使うには
-
String""から型'Double'への変...
-
【Access】Excelインポート時に...
-
VBA データ(特定値)のある最...
-
On ErrorでエラーNoが0
-
インポート時のエラー「データ...
-
ACCESSで値を代入できないとは?
-
VBA エクセル で FIND でのエラ...
-
Filter関数を用いた結果、何も...
-
レコード登録時に「演算子があ...
-
ApplicationとWorksheetFunctio...
-
Excel vbaについての質問
-
【VBAエラー】Nextに対するFor...
-
実行時エラー 438 の解決策をお...
-
「実行時エラー '3167' レコー...
おすすめ情報