• ベストアンサー

同時編集防止の方法

TakaoPRと申します。 現在、顧客管理リストを作成ようとしているのですが、テーブルへの同時編集の防ぎ方がわかりません。 DBはSQLSERVER2000でプログラムは、VB、ACCESSのどちらかを予定しています。 同時編集の防止というのは、複数が同時に編集できるのを防止したいという意味です。 誰かがテーブルのあるレコードを編集中の場合は、他の人もそのレコードの編集が不可能(閲覧は可能)にしたいのです。それ以外のレコードには、普通にアクセスができるようにしたいと思っています。 以上を実現するためのSQLSERVERの設定、またはプログラム手法などございましたら、ぜひアドバイスをお願いしたいと思っております。 宜しくお願い致します。

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

  • ベストアンサー
  • abayama
  • ベストアンサー率48% (38/79)
回答No.2

通常、同時編集を防ぐには、分離レベルを使用しますが、これでは行単位で同時編集を制御できません。SQL Serverを使用する場合、行単位でロックを掛けるには、SQL文で テーブル名の後に WITH (ROWLOCK) を指定します。 例をいくつか示します。 update stocks.dbo.Fundamentals with (ROWLOCK) set hoge='eee'; select top 10 * from stocks.dbo.Fundamentals with (ROWLOCK); 詳細は、SQL Server Books Onlineを参照してください。

その他の回答 (1)

  • hiro_1999
  • ベストアンサー率31% (86/277)
回答No.1

アクセスですが、簡単に ツール - オプション - 詳細タブ において 共有/排他の設定と、レコードロックの設定が可能です。 ・ロックしない     ・すべてのレコード(編集中のフォーム、関連するデータシートをロック) ・編集済みのレコード(編集中のレコードのみロック) レコードロックの設定は以上の3通り、他のPCからの閲覧はどれも可能です。 参考:ツール - セキュリティ において    ユーザー権限の設定も可能です。 

関連するQ&A

  • ACCESSに同時アクセス(編集)をしたい

    教えてください。 ACCESSのDBに複数のユーザが同時にアクセスして、 データを追加・編集したいのですが、 やはり、不可能でしょうか?

  • Access VBAでクエリーのレコード件数を取得したいのですが

    Access2003のVBAで次のような構文を用いてクエリーの該当レコード数を取得したいのですがうまく出来ません。 構文又は手法が間違っているのでしょうか。 Dim db As Database Dim rs As Recordset Dim cnt As Long Set db = CurrentDb Set rs = db.OpenRecordset("該当顧客リストクエリ", dbOpenTable) cnt = rs.RecordCount ※OpenRecordsetの行で「実行時エラー'3219'無効な処理です」と出てしまいます。 又、”該当顧客リストクエリ”では特定の抽出条件を設定して、”顧客リストテーブル”の一部を抽出するようにしています。

  • データベースのレコードをaccessで修正出来ません

    なっちゃんです。 久しぶりのご質問です。よろしくお願いします。 早速ですが環境です  ・ OS Windows2000  ・ サーバー SqlServer2000  ・ アクセス access2003 ご質問です  上記の環境に SqlServer2000 をセットアップ  して access2003 を使いDBを登録したのですが  レコードの内容を更新(登録、削除、変更)する  ことが出来ません。    手順は SqlServer の EnterpriseManager を  使い空のDBを作成して それを access の  プロジェクトで開き、クライアントにあるmdb ファイルを別の access で開いてテーブルを  ドラッグ&ドロップで追加しました。  その登録されたテーブルの内容を変更することが  出来ません。 検証したこと  サンプルの NorthWind のレコードは access で  更新できます。  新規に作成したDBの内容は EnterpriseManager  を使うと変更できます。  サンプルの NorthWind のDBに上記の方法で  テーブルを追加しても、そのテーブルのレコードは  変更できませんでした。 以上のような状態で、たぶんどこかの設定(権限?) を変更する必要があると思うのですが、それが分からずに困っています。 どなたかお分かりの方がおられましたら 是非ご教授いただければと思います。 よろしくお願いいたします。  

  • SQLServer2005Expressのテーブル作成について

    こんにちわ。 いまSQLServer2005Expressをダウンロードして, vb.net2005expressからアクセスしようとしています。 そこでsqlserver2005でテーブルを作成しようと思うのですが, sqlserverのプログラムを起動してもテーブルを作成する箇所 が見当たりません。 どうすればテーブルを作成できるでしょうか? 教えてください。お願いします。

  • ビュー定義をプログラムで動的に扱う方法

    ビュー定義をプログラムで動的に扱う方法 SQLServer2008+VB6(ExcelVBA)構成のシステムで、日付フィールドを含むテーブルのビューを作成しておき、VBプログラムからSQL文でビューを呼び出す時、日付範囲を指定して絞り込まれた結果をビューで返したいのですが、ストアドを使わずにビューだけで実現することはできないでしょうか?

  • Q.WindowsCEからのDB参照について。

    Q.WindowsCEからのDB参照について。 WindowsCE5.0用のプログラムをVB.NETで作成しました。 プログラムは、SQLServer2005のDBの任意のテーブルからSelect文でレコードを取得すると言った内容です。 作成したExeをWindowsCE5.0で実行したところ、 プログラム内で、コネクションをオープンする部分でエラーとなってしまいます。 エラーの内容は以下の通りです。 【 Pinvoke DLL 'dbnetlib.dll'が見つかりませんでした。 】 dllが無いようなのですが、何かセットアップが必要なのでしょうか?

  • ACCESS と VB でこんなプログラムを作ろうとしています。どうやれば・・

    今、VB と ACCESS を 使って簡単なプログラムを作ろうとしています。 ACCESSの中にはテーブルが1つだけあります。 そのテーブルの中のデータをVB上の DATAGRIDに単純に表示します。 ここまではできました。 GRIDへの表示は一度ワークテーブルに入れて そこから表示するのではなくて、 直接そのテーブルから表示しています。 今、そのテーブルの項目にPATHとファイル名 が入っていて、そのPATHにファイルがなかったら GRIDに× あれば ○を表示したいのです。 一度ワークテーブルに入れているのであれば、 あとで、そのワークテーブルを開いて、 ループさせて、DIR でひとつひとつ調べて 更新すればよさそうなのですが、 あくまで直接開きたいのです。 または、一時的なワーク (SQLServer上の##~~~みたいな感じの EXEを閉じたら勝手に消えるようなイメージのテーブル) をACCESSで実現できるならそれでもよいです。 こういう場合、どうやったら ○ と× を表示することができるのでしょう? 困っています。助けてください。 よろしくお願いします。 環境 VB6 SP5 ACCESS2000 Windows2000 SP3

  • Accessの帳票形式のフォームについて

    いつも楽しく勉強させていただいております。 OSはWindows7。 フロントエンドがAccess2013でSQLServer2012がバックエンドです。 複数レコードを一度に表示するいわゆる帳票形式のフォームを作ります。 [保存]ボタンで変更を保存、[キャンセル]ボタンで保存しないでフォームを閉じます。 このようなフォームを作る際、私はこれまでこの方法でやってきました。 1.本物テーブルの内容をテンポラリのテーブルにコピー 2.テンポラリのテーブルと連結したフォームで編集 3.[保存]ボタンのクリックでテンポラリのテーブルで本物を上書き この方法の弱点は本物のテーブルにロックがかからないことです。 かといって本物のテーブルに連結したフォームにすると編集した内容をキャンセル することができません。 これを解決する根本的な方法はないものでしょうか。 たとえば帳票形式にする代わりにデータグリッドのようなコントロールを使用して 本物のテーブルにロックをかけつつ複数レコードの変更のキャンセルも可能という フォームは作れますか。 フォームをデザインビューで開いたときに見られるActiveXコントロールには データグリッドに類するコントロールはないようです。 ネットで調べるとVB6.0のDataGridコントロールを使用できるとか、 操作がうまくいかないとかAccessでVBのコントロールを使用するのはそもそも 許されないとか書いてあるのでデータグリッドを使う方法は無理でしょうか。 もう一度問題を整理すると、以下のようになります。 1.複数レコードを一度に表示して編集したい。 2.そのレコードにロックをかけたい。 3.編集のキャンセル(ロールバック)も可能にしたい。 帳票フォームでもデータグリッドでも方法は問いません。 あるいは「Accessでは実現できない」という情報でもいいです。 お詳しい方、どうかよろしくお願いいたします。

  • VB(カンマ編集)

    データベースから取得したデータをカンマ編集して、画面に表示するプログラムを作っているのですが、データ数が多すぎて画面に表示するまでに時間がかかってしまっています。何か処理を早くするいい方法はないでしょうか。 プログラムはVBを使っています。 データベースはSQLServerを使っています。 よろしくお願いします。

  • VBのプログラムでネット上のDBにアクセスする

    こんにちは。 私は勉強のためにVisualBasic2008とAccess2010を使ってローカルで動くプログラムを製作しています。 おいおいは、データベースをネットワーク上に配置してアクセスしたいのですが、 そのためにはどういう方法をとるべきなのでしょうか。 手法や参考になるHP、書籍などを教えてください。 なお、できるだけ書いているコードやソフトは流用したいと思っています。 DBについては作り直してもいいのですが、VBのプログラムは修正があまり生じないような手法をお願いします。