Excel2013 vba-> Access2013 mdbファイル
問題点:以下のソースを実行すると、エラーが発生します。このエラーをなくしてアクセスデータベースのテーブルの情報の更新、新規追加、削除を行いたいです。
エラー内容:実行時エラー'3251' 現在のRecordsetは更新をサポートしていません。プロバイダーか、選択されたロックタイプの限界の可能性があります。
ソース:
Sub 登録処理()
Dim Rst As adodb.Recordset
Dim SQL As String
Dim Rg As Range
Dim RgData As Range
Dim lngLastRow As Long
Dim RgDel As Range
On Error GoTo errH
Set RgData = mySh.Range("B2")
lngLastRow = RgData.End(xlDown).Row
Set RgData = mySh.Range(RgData, mySh.Range("AB" & lngLastRow))
SQL = "Select * from [会社管理テーブル]"
Call DBconection2
Set Rst = New adodb.Recordset
With Rst
.ActiveConnection = Cn
'SQL文でテーブル名と抽出条件を指定する
.Source = SQL
.CursorLocation = 3 ' クライアントサイドカーソルに変更
.Open
End With
Dim y As Long
Sheets("会社管理").Select
If Rst.EOF = False And Rst.BOF = False Then
For i = 1 To RgData.Rows.Count
If Cells(i + 1, 1).Value = "変更" Then
Rst.MoveFirst
Rst.Find "[施工会社ID]=" & RgData(i, 1).Value
If Rst.EOF Then
Else
Rst.Fields("会社ID").Value = RgData(i, 2).Value
Rst.Fields("会社名").Value = RgData(i, 3).Value
Rst.Fields("フリガナ").Value = RgData(i, 4).Value
Rst.Update
End If
Cells(i + 1, 1).Value = ""
ElseIf Range(i, 1).Value = "削除" Then
Rst.MoveFirst
Rst.Find "[会社ID]=" & RgData.Cells(i, 1).Value
If Rst.EOF Then
Else
Rst.Delete
End If
Set RgDel = Rows(i + 1 & ":" & i + 1)
RgDel.Select
RgDel.Delete
ElseIf Range(i, 1).Value = "新規" Then
Rst.AddNew
Rst.Fields("会社ID").Value = RgData(i, 2).Value
Rst.Fields("会社名").Value = RgData(i, 3).Value
Rst.Fields("フリガナ").Value = RgData(i, 4).Value
Rst.Update
Cells(i + 1, 1).Value = ""
End If
Next i
End If
exitH:
Rst.Close: Set Rst = Nothing
Call DBclose2
Exit Sub
errH:
MsgBox Err.Number & "(" & Err.Description & ")"
GoTo exitH
End Sub
Sub DBconection2()
Set Cn = New adodb.Connection
Cn.Provider = "Microsoft.Jet.OLEDB.4.0"
Cn.Open modPublic.DBPATH
End Sub
Function MakeDBconection() As adodb.Connection
Set Cn = New adodb.Connection
Cn.Provider = "Microsoft.Jet.OLEDB.4.0"
Cn.Open modPublic.DBPATH
Set MakeDBconection = Cn
End Function
Sub DBclose2()
Cn.Close
Set Cn = Nothing
End Sub
Sub EraseContents(s_Rg As Range)
s_Rg.ClearContents
End Sub
誰か、解決方法がおわかりの方がいましたら、アドバイスをよろしくお願いします。
No.1ベストアンサー
- 回答日時:
>Sheets("会社管理").Select
この辺で止めて
debug.print Rst.locktype
してみてください。
以下Access2010のヘルプより
LockTypeEnum
編集時にレコードに適用されるロックの種類を表します。
定数 値 説明
adLockBatchOptimistic 4 共有的バッチ更新を示します。バッチ更新モードの場合に必要です。
adLockOptimistic 3 レコード単位の共有的ロックを示します。Update メソッドを呼び出した場合にのみ、プロバイダーは共有的ロックを使ってレコードをロックします。
adLockPessimistic 2 レコード単位の排他的ロックを示します。プロバイダーは、レコードを確実に編集するための措置を行います。通常は、編集直後にデータ ソースでレコードをロックします。
adLockReadOnly 1 読み取り専用のレコードを示します。データの変更はできません。
adLockUnspecified -1 ロックの種類を指定しません。複製の場合、複製元と同じロックの種類が適用されます。
で、
LockType プロパティ (ADO)
編集時にレコードに適用されるロックの種類を示します。
設定値と戻り値
LockTypeEnum の値を設定または取得します。既定値は adLockReadOnly です。☆★☆注目!
解説
プロバイダーが Recordset を開くときに使用するロックの種類は、LockType プロパティを使用して事前に設定します。開いている Recordset オブジェクトで使用されているロックの種類は、このプロパティを取得することで確認できます。
プロバイダーによってはすべての種類のロックをサポートしていないものもあります。要求した LockType 設定をプロバイダーがサポートしていない場合は、他の種類のロックに置き換えられます。Recordset オブジェクトで実際に使用可能なロック機能を調べるには、adUpdate と adUpdateBatch で Supports メソッドを使用します。
CursorLocation が adUseClient に設定されている場合、adLockPessimistic 設定はサポートされません。サポートされていない値を設定してもエラーにはなりませんが、サポートされる LockType のうち、最も近いロックが使用されます。
LockType プロパティは、Recordset が閉じているときは読み取り/書き込み可能で、開いているときは読み取り専用になります。
リモート データ サービスでの使用 クライアント側の Recordset オブジェクトで使う場合、LockType プロパティは adLockBatchOptimistic にのみ設定できます
ご回答有難うございます。御礼が遅くなりすみませんでした。
まだ、不明な点がありますので、改めて質問をさせていただきたいと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) Excelで下記のようにマクロを作ったところ、一回目は実行できたのですが、二回目以降「実行時エラー1 1 2022/03/25 08:08
- Excel(エクセル) VBAの指示の内容 昨日こちらでご教示頂いたのですが初心者な為、一つ一つの指示が何をやっているのかわ 2 2022/10/25 18:08
- Visual Basic(VBA) VBAが止まります。 3 2022/08/31 14:09
- Visual Basic(VBA) オブジェクトが見つかりません 1 2023/06/24 19:43
- Visual Basic(VBA) VBA処理追加 こちらでご教示頂いたのですが回答完了させてしまいましたのでこちらからまた質問させてく 2 2022/10/27 09:57
- Visual Basic(VBA) VBAでoutlook365が起動しません。 4 2022/08/25 13:31
- Visual Basic(VBA) 動きっぱなしです。止め方とプロシージャの間違いを教えて下さい! 5 2022/08/15 23:08
- Excel(エクセル) VBAについて 3 2022/06/19 18:19
- Visual Basic(VBA) 稀に1円合いません? Sheet1から金額と個数を貼り付ける下記コードで、金額を切り上げるコードを何 3 2022/09/05 15:11
- Visual Basic(VBA) vbaを早くしたい 5 2022/09/09 10:58
このQ&Aを見た人はこんなQ&Aも見ています
-
カンパ〜イ!←最初の1杯目、なに頼む?
飲み会で最初に頼む1杯、自由に頼むとしたら何を頼みますか? 最初はビールという縛りは無しにして、好きなものを飲むとしたら何を飲みたいですか。
-
人生最悪の忘れ物
今までの人生での「最悪の忘れ物」を教えてください。 私の「最悪の忘れ物」は「財布」です。
-
これ何て呼びますか Part2
あなたのお住いの地域で、これ、何て呼びますか?
-
許せない心理テスト
私は「あなたの目の前にケーキがあります。ろうそくは何本刺さっていますか」と言われ「12本」と答えたら「ろうそくの数はあなたが好きな人の数です」と言われ浮気者扱いされたことをいまだに根に持っています。
-
お風呂の温度、何℃にしてますか?
みなさん、家のお風呂って何℃で入ってますか? ぬるめのお湯にゆったり…という方もいれば、熱いのが好き!という方もいるかと思います。 我が家は平均的(?)な42℃設定なのですが、みなさんのご家庭では何℃に設定していますか?
-
実行時エラー3251対応処理方法
Access(アクセス)
-
日付型のフィールドに空白を入れる方法を教えてください
その他(データベース)
-
ACCESS ADOでupdateが効かない
その他(データベース)
-
-
4
ACCESSでデータ読み取り専用を解除する方法
その他(データベース)
-
5
【ACCESS】フォーム名/コントロール名を文字列型変数で指定するには
Access(アクセス)
-
6
SQLでエラーです。
Visual Basic(VBA)
-
7
アクセスで#エラーを表示させない方法は?
Access(アクセス)
-
8
エクセルVBAでエラー!
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/22】このサンタクロースは偽物だと気付いた理由とは?
- ・お風呂の温度、何℃にしてますか?
- ・とっておきの「まかない飯」を教えて下さい!
- ・2024年のうちにやっておきたいこと、ここで宣言しませんか?
- ・いけず言葉しりとり
- ・土曜の昼、学校帰りの昼メシの思い出
- ・忘れられない激○○料理
- ・あなたにとってのゴールデンタイムはいつですか?
- ・とっておきの「夜食」教えて下さい
- ・これまでで一番「情けなかったとき」はいつですか?
- ・プリン+醤油=ウニみたいな組み合わせメニューを教えて!
- ・タイムマシーンがあったら、過去と未来どちらに行く?
- ・遅刻の「言い訳」選手権
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
SELECT文でのデッドロックに対...
-
SELECT時の行ロックの必要性に...
-
SELECT文でタイムアウト...
-
accessのロック
-
Oracleの排他制御について教え...
-
AccessShareLock はどの程度気...
-
ExcelからAccess2013DBを更新す...
-
SQLServer Insertが遅い
-
アクセス負荷の分散
-
UPDATE文で発生するデッドロッ...
-
排他ロックしたレコードが、別...
-
更新ロックとデッドロック
-
DB2でSelectした時(rollback,c...
-
「マスタ」と「テーブル」の違...
-
Access VBA [リモートサーバー...
-
Access 1レコードずつcsvで出力...
-
ACCESS2007 フォーム 「バリア...
-
3つ以上のテーブルをUNIONする...
-
ビューで引数を使いたい
-
Select ~ into ~ で作成した...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
SELECT時の行ロックの必要性に...
-
SELECT文でのデッドロックに対...
-
accessのロック
-
Oracleの排他制御について教え...
-
AccessShareLock はどの程度気...
-
SQLServer Insertが遅い
-
INSERTにおいてロック処理は必要か
-
DB2のロック調査
-
DB2でSelectした時(rollback,c...
-
ExcelからAccess2013DBを更新す...
-
トランザクションとlast_insert_id
-
SELECT FOR UPDATE にトランザ...
-
SELECT文でタイムアウト...
-
トランザクション中にSELECTし...
-
UPDATE文で発生するデッドロッ...
-
デッドロックが発生します。
-
MongoDBのデータ更新はDBを排他...
-
書き込みの衝突
-
更新ロックとデッドロック
-
同時書き込み
おすすめ情報