ADOのRecordSet.Openの引数について(2)

このQ&Aのポイント
  • ADOのRecordSet.Openメソッドの引数にはカーソルタイプの定数があります。adLockPessimisticはレコードごとの排他的ロックを行い、adLockOptimisticはレコードごとの共有的ロックを行います。adLockBatchOptimisticは共有的バッチ更新処理を行います。
  • adLockPessimisticはレコードごとの排他的ロックを行い、競合した場合にデータソースでレコードをロックし、必要な最小限のロックをします。
  • adLockOptimisticはレコードごとの共有的ロックを行います。Updateメソッドを呼び出した場合のみレコードがロックされ、他のユーザはアクセスできなくなります。
回答を見る
  • ベストアンサー

ADOのRecordSet.Openの引数について(2)

ADOを勉強中です。RecodeSetオブジェクトのOpenメソッドの引数について、本に以下のような内容があったのですが、意味が分かるようで、良く分かりません。 カーソルタイプの定数 (1)adLockPessimistic…レコードごとの排他的ロック。編集が競合した場合、データソースでレコードをロックすることで、確実にレコードを編集できるように、必要な最小限のロックをする。 (2)adLockOptimistic…レコードごとの共有的ロック。Updateメソッドを呼び出した場合のみレコードがロックされ、ほかのユーザはアクセスできなくなる。 (3)adLockBatchOptimistic…共有的バッチ更新処理を行う。即時更新モードに対して、バッチ更新モードの場合に必要。 それぞれどういうことを意味しており、どういうときにどれを選択したらよいのでしょうか。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • TAGOSAKU7
  • ベストアンサー率65% (276/422)
回答No.1

>それぞれどういうことを意味しており 書いてある通りです。 >どういうときにどれを選択したらよいのでしょうか。 それは目的によって違います。 勉強中ですよね? 違いがわからなければ、DBを更新するEXEを二つ作って、それぞれやってみたらよいと思います。 肌で感じた方が身につくと思います。 BeginTrans CommitTrans RollbackTrans との併用をお勧めします。

takaandhiro
質問者

お礼

ありがとうございました。 BeginTrans等の意味も良く分からないレベルなので、 勉強しながらいろいろ試してみたいと思います。

関連するQ&A

  • ADOでエクセルからアクセスにデータを追加したいのですが、「CursorType」と「LockType」がどれが適切かわかりません。

    ADOでエクセルからアクセスにデータを追加したいだけなのですが 「CursorType」と「LockType」がどれが適切かわかりません。 CursorType 0 adOpenForwardOnly   レコードの前方スクロールだけが可能な静的カーソル。 (デフォルト) 1 adOpenKeyset 他のユーザによる変更データを参照可能。但し、追加データは参照できず、削除データにはアクセスできない。 2 adOpenDynamic 他のユーザーによる追加、変更、削除の操作が即座に反映される。 3 adOpenStatic レコード集合のコピーによる静的カーソル。前方、後方への移動が可能。 LockType 1 adLockReadOnly 読み取り専用。 2 adLockPessimistic レコード単位での排他的ロック。編集操作開始時にレコードをロックする。 3 adLockOptimistic レコード単位での共有的ロック。Updateメソッドを呼び出し時にレコードをロックする。 4 adLockBatchOptimistic 共有的バッチ更新。即時更新モードに対するバッチ更新モード。 ・エクセルもアクセスも使用しているのは自分ひとりです。 ・LockTypeについては Updateメソッドを使用してアクセスにデータを追加するため「adLockOptimistic」が適切かなと思うのですが CursorTypeの静的・動的がわからず判断できません。 ご教授よろしくお願いします。

  • ADOで排他ロックがうまくいかない

    VB6.0+access98で開発してます。 ADOを使ったレコード単位の排他ロックについて教えてください。 rs.Open時に,adLockPessimisticを指定しても,ロックされません。 rs.Update のところで一瞬ロックされているようです。 あるレコードの編集中は登録またはキャンセルされるまで、 ずっとロックしていたいのです。 他端末からそのレコードにアクセスした際にエラーが返るように したいのです。 上手く出来る方法ありませんか?

  • Access200 ADO adLockPessimisticとadLockOptimisticの違い

    ADOのレコードセットを編集可能でオープンするときの引数に adLockOptimisticとadLockPessimisticがありますが、 違いは何なんでしょうか? 初心者向けの解説書しか見ていないので詳しく書いていません。 どちらでオープンしても編集できるので結果オーライなんですが、 知っておくと、今後の開発に参考になるかもしれません。 よろしくお願いいたします。

  • 【Access】排他モードで利用時のタイムアウト

    社内の部署で共有のアクセスデータベースを作成し、複数の人が同時に編集できないよう、 「排他モード」か「レコードロック」の設定を考えていますが、「排他モード」にした場合、ファイルを 開く時間(タイムアウト)の設定は可能でしょうか?

  • Access ADO RecordSetについて質問です。

    Access ADO RecordSetについて質問です。 Openイベントでフォームにレコードセットを挿入しています。 その際のフォームにはレコードセットをコントロールソースとしてテキストボックスが10個ほどあります。 しかし、テキストボックスを修正しようとしても、入力が出来ません。 レコードセットの作り方が悪いのか、フォームがおかしいのかわかりません。 流れとしては、帳票フォームより、単票フォームを呼び出し、IDでSQLを発行し、レコードセットを挿入しています。 その単票フォームは修正フォームとして更新したいのですが、入力が出来ず困っています。 詳しい方や同じ事で悩んだ方のアドバイスよろしくお願いいたします。 Private Sub Form_Open(Cancel As Integer) Call SetRecordSet("SELECT * FROM T_Agent WHERE ID =" & Me.OpenArgs, Me) End Sub Public BackEndCn As ADODB.Connection Public BackEndRs As ADODB.Recordset Public Sub SetRecordSet(strSQL As String, FormName As Form) Set BackEndCn = New ADODB.Connection Set BackEndRs = New ADODB.Recordset BackEndCn.ConnectionString = DbPass BackEndCn.Open BackEndRs.Open strSQL, BackEndCn, adOpenKeyset, adLockOptimistic Set FormName.Recordset = BackEndRs BackEndRs.Close: Set BackEndRs = Nothing BackEndCn.Close: Set BackEndCn = Nothing End Sub

  • ADOレコードセットをExcelファイルへエクスポート

    ADOレコードセットをExcelファイルへエクスポート ADOのレコードセットをExcelファイルへ出力したいと考えています。 レコードセットを使用した場合、TransferSpreadsheet の様なメソッドは使えないのでしょうか? ファイルサーバーにAccessクエリを作成する事も考えたのですが、多数で使用する為、 トラブルが怖いので避けました。 レコードセットを直接出力できるメソッドor関数等はないものでしょうか? アドバイスよろしくお願いいたします。 m(__)m

  • ADOのRecordSet.Openの引数について(1)

    ADOを勉強中です。RecodeSetオブジェクトのOpenメソッドの引数について、本に以下のような内容があったのですが、良く意味が分かりません。 カーソルタイプの定数 (1) adOpenForwardOnly:前方スクロールタイプカーソル。既定値。 (2) adOpenStatic : 静的カーソル (3) adOpenDynamic : 動的カーソル (4) adOpenKeyset : キーセットカーソル それぞれどういうことを意味しているのでしょうか。 よろしくお願いします。

  • VBAからADOを使ってクエリのクエリを作成したい

    VBAからADOを使ってクエリのクエリを作成したい ADO初心者です。 VBA側で入力された引数を元に、ADOを使ってあるmdbファイルにあるクエリ(1)の抽出条件を変更した上で(抽出条件はVBA側の引数によって毎回変わります)、クエリ(1)の中から重複したレコードを抽出するクエリ(2)を作成したいと考えています。クエリ(1)並びにクエリ(2)をそれぞれ単独で作成する事は出来たのですが、クエリ(1)の結果を反映したクエリ(2)を作成する方法が分かりません。 なお、クエリ(1)の抽出条件変更は、RecordsetオブジェクトのOpenメソッドを使って行っています。何となくこれはレコードの更新は出来てもクエリの更新は出来ないような気がしており、それが原因のような気がしているのですが、クエリの更新をしたい場合はどうすればよろしいでしょうか?

  • 更新ロックとデッドロック

    データベースを勉強中の者です。ロックの種類についてどなたかご教示いただけますでしょうか。 ロックの種類は、次の三種類ですよね。 ・共有ロック ・排他ロック ・更新ロック 共有ロックの意味は理解できていると思うのですが、更新ロックがよくわかりません。 更新ロックにすると次のように動作するそうですね。 1.更新を前提にして共有ロックをかける。 2.更新する前に排他ロックに切り替わる。 排他ロックも更新時に使うロックですが、排他ロックと更新ロックの違いというか、使い分けがよくわかりません。 データを更新するためには排他ロックをかけないといけないのはわかりますが、その前に共有ロックをかける意味は? http://f29.aaa.livedoor.jp/~snaka/PukiWiki/PukiWiki.php?SQLServer%2F%A5%ED%A5%C3%A5%AF#na5d5d64 上のサイトを読んで「デッドロックを回避するため」といったんは理解したのですが、上司は「更新ロックとデッドロックは関係ない」と言います。 私の解釈が間違っているのでしょうか。それとも上司?

  • oracleとexcelのADOによる連携について

    お世話になります。 excelからADOでoracleのデータベースにある テーブルの必要なデータのみを抽出してexcelに 書き出そうとしています。 excelのvbaコードで、まず、ADOコネクションの生成として、 「cn.Open "Provider=OraOLEDB.Oracle;Data Source=" & "DB名" & ";User ID=hpsuser;Password=○○○;", "○○○", "○○○"」と書き、 ADOレコードセットの生成で、 「 rs.Open "~(1)~", cn, adOpenDynamic, adLockOptimistic, adCmdText」 と書いていますが、上記「~(1)~」の部分がかなり長いクエリ文になっているからなのか、 エラーがかかってしまいます。 単純なテーブルのデータを呼び出す事しかできないのか、又、 長いクエリ文のデータを抽出したい場合どの様にしたら良いのか、 どなたかご親切な方、ご教示頂けます様、宜しくお願いいたします。

専門家に質問してみよう