システムwiki

アクセスデータベース(BE)吹き付け-レコードレベルのロック

Dominik 受付中 最終更新日:2021-06-15 02:00

こんにちはマイクロソフトのコミュニティ!
私は今数日間苦労してきた問題があります.私はできる最善の方法で問題を説明します.追加情報が必要な場合は、それを解決するためにあなたとそれを共有してうれしいです.
データベースを作成し、それをフロントエンドとバックエンドに分割します.データベースは毎日4~8人のユーザー、24時間、週6日で使用されます.すべてのユーザーは自分のデスクトップに自分のフロントエンドを持っています.
データベースで:

1.ユーザーは毎日多くの情報を挿入して更新します.毎日2000以上の挿入/更新があります.

2.DAOオブジェクトを使用する(DBReadOnly Modeで開く)
3.レコードレベルのロックはすべてのクライアントでオフになり、使用されているすべてのフォームで
問題は次のとおりです.
データベースには爆発がたくさんあります.たとえば、1日の場合、ファイルサイズは200 MBから700 MB-1 GBになりますので、毎日コンパクトする必要があります.コンパクト後、そのサイズは201 MBに戻ります(毎日DBは約1 MB大きくなります).
私は1人のユーザーだけで挿入しようとしました.サイズは変わりません.複数のユーザーが一度に挿入するとき、または.laccdbファイルが変更されたときに言うべきです.すべての挿入は約3 MBです.
私はこれがレコードレベルのロックと関係があると確信していますが、私はそれがどこにでも無効にされてから何をするのか知りません、そしてすべてのレコードセットはDBReadonlyモードで開いています.
私はこの問題についてのアドバイスを本当に感謝します、

[アクセス/Windows 10/Office 2016から移動しました]

返信リスト(回答:5)

4 #
AlbertD

さて、この設定を試してください:

ファイル->オプション->クライアント設定:

チェックボックスをチェックしてください.

[x]レコードレベルのロックを使用してデータベースを開く.

これは:

したがって、上記はチェックされない必要があります.

いくつかのこと:

上記の設定はApplicationに接続されていません.

(したがって、各ワークステーションにこれを設定する必要があります)

上記は終了するまで有効になりませんアクセスやアクセスやApplicationを再入力してください.

1人のユーザーが上記の設定を「ON」でデータベースを開くと、他のすべてのユーザーがこの設定を強制されていると思います-クライアント側の設定に関係なく、この設定は強制されます.

この設定をApplicationの起動時に変更(設定)することができます(ただし、次回起動したときにのみ有効になります.

上記の設定をしてください.私はすべての行を更新する6 MEGファイルを表示します.更新後の成長はゼロです.

しかしながら、上記の設定では、同じコードが6メガルから126メガに成長する100メガメットを引き起こした.

次のアップ:

コードまたはApplicationは、作業または更新のための一時tableを使用しますか?tableを削除するか、解除することで、コンパクト+修復を行うまでファイルサイズを返したり、削減したりすることを忘れないでください.

そのため、レポートや他のものがいくつかの一時的な作業tableを持っていることを言うと、次のいずれかにします.

TEMPtableを使用しない、または避けないように設計すると、デザインを変更します.

または起動時に、外部のTempデータベースを作成します.次に、tableをその追加のデータベースに使用している/持っている.そのため、起動時に削除してからTEMPデータベースを再作成します.

しかし、上記の設定を試してみると、大量の肥満を減らすことがよくあります.Applicationの広い設定ではなく、各ワークステーションでこれを設定する必要がありますが、クライアント側の設定です.また、永続性を設定した場合
開いているデータベース接続を使用することで(tableを開くのは対照的に).これはこの肥大設定に乗ります.そのため、起動時に永続接続をどのように作成するかを確認する必要があります(1がある場合).を使用して接続を作成した場合
データベースオブジェクトアクセス内のリンク表が使用される前に、そのOpenDatabaseコマンド(1つがある場合)はアクセスクライアント側の設定を無視します.そのため、変更しようとしている場合は、必ず永続的な接続に対して開いているデータベースコマンドを使用できません.
設定を無効にします.(openDatabaseコマンドを使用する代わりにtable/レコードセットを開きます.
接続.(OpenDataBaseを使用すると、上記のクライアント設定は無視されます).

最後になりましたが?

あなたのツールが開くように設定されているFoxPro、VB6、VB.NET C#を使用している場合は、データベースを使用してください.上記の行ロック設定は、コントロールするために利用できません.それは設定としてのアクセスUIからのみ利用可能です.DAOオブジェクトモデル、さらにはOLEDBプロバイダから
またはODBCさえ?この設定を変更することはできません-もう一度:アクセスUIとAccessクライアントからのみ設定できます.述べたように、スタートアップコードでこの設定を変更することはできますが、それはクライアントソフトウェアがアクセスできない、またはいくつかの外部ではなく、クライアントソフトウェアがアクセスしなければならないことを意味します.
OLEDB、ODBC、またはDAOオブジェクトモデルを使用したプログラム

ADOはこの設定を変更できる可能性があります(わかりません)..

応答4# ->にスキップ
3 #
Dominik

あなたの豊富な返事をありがとう.私は本当にそれを感謝しています.
私の質問で言ったように、私はすでにすべてのクライアントで「レコードレベルのロックで開くデータベース」がすでにありませんが、なぜそれがうまくいかないのかわかりません.
私はこのようなデータベースにアクセスしています:
DAO.Database

としてDIM MYDB

mydb= currentdb

を設定してください

コードに変更を加える必要があるか、その設定もCurrentDBにも適用されることもありますか?

応答3# ->にスキップ
2 #
AlbertD

[OK]、設定が良いスタートであることを確認してください.

スクリーングラブに表示できる他の設定(表、または行のロック)は、肥大化に影響しません.

述べたように、チェックするための他の領域は、テンポtable、または多くのtableに多くのレコードをコピーし、次回再使用/クリーニングするコードの使用です.

繰り返しになりますが、たくさんのコピー+レコードがデザインの一部ではない場合は、他の場所に見てください.

そのため、ほとんどの場合、行ロック(オフ)は括弧の問題を減らすことになります.(しかし、あなたのデザインがたくさんの挿入や削除されてから削除させることを避けるようなものであるならば、この機能をオフにすることはできません.そして、私は使用する問題に注意しました
起動時のOpenDatabase (繰り返しますが、私はこれをやっているとは思わないが、あなたがするならば、行ロック設定は無視されます).

CurrentDBの使用?-いいえ、あなたがよく見たものはそうです.[起動コード]で[データベースを開く]コマンドが開いている場合は、「問題」だけです.最初のフォームまたはVBAレコードセットが作成されたと言う前にそのコードが実行されている場合、行ロック機能は無視されます.

チェックする他の分野:

データベースストアのファイルまたは写真はありますか?もしそうなら、この設定を確認してください:

ファイル->オプション->現在のデータベース

すべての上記の?

OK、それからチェックするいくつかのもの:

VBAコード-そのコードがレコードを挿入した場合-コードが実行された後にレコードセットを閉じるようにしてください.これはフォームレコードセットを言うのには適用されません.(そのため、Forms RecoverySetsetsの組み込み-あなたはそれらを開けませんでしたので、それらを閉じる必要はありません).

しかし、あなたのコードのために、あなたはRecodset

を閉じるべきです

ed:

RST.CLOSE

いくつかの長いショット:

tableデザイナーのサブデータシートをオフにします.

デザインビューでtableを開く.

tableセレクタを右クリックし、プロパティを表示します.

あなたはこれを見ます:

上記の自動をなしに変更してください.これはすべてのtableに対して行われるべきです.-あなたは後ろの端でこれをします.

もう一人は屋しましたか?クエリの追加失敗繰り返しになりますが、クエリを追加しない場合、または失敗していない場合は、これは適用されません.

ACCDBファイルを仮定しています-MDBではなく

私たちはアクセス2016年を仮定しています.

クライアントシステムとしてのアクセスを想定しています.ここでは3番手のApplicationはありません(VB、VB.NETなど、他のものなど).

ただし、ここで膨大な量のデータの更新を行っていることをたくさんのレコードや更新したことが確実に可能です.もっと
ここで探すために.

また、データをインポートしますか?またはアクセスだけの成長ですか?

1人のユーザーがこの大きな成長を見ていないと判明したので、これは1つのワークステーションがおそらく異なるversionのアクセスを実行すること、または一部のステーションが行ロック設定を無視していることを示唆しています.1駅がデータベースを開くと覚えておいてください
行ロック付き-その後、ワークステーションの設定に関係なく、他のすべての設定に従う必要があります.

この肥大は共有バックエンドで発生しています-クライアント側のぼかしが心配していません.

BEにはある種の汚職がある可能性があります.空白のものを作成し、それをその中にインポートすることができます.ただし、1人または2人のユーザーだけがそのような大きな肥大問題を生み出すようではないと述べています.

そして私は他のポスターに同意しますここで:表は読み取り専用です.まあ、それから彼らはその後更新できないでしょう、右?

フォームの設定を確認します(ロックをオフにする).しかし、私が述べたように、行ロックシステムと行ロックセットを持つ形式の形式の設定は非常に異なります.私の知ることに、行ロック設定(編集したレコード)を持つフォーム(編集レコード)
案件.しかし、行ロック設定で開くことは、最も確かに肥大源です.

その他その他、私たちがここで逃したことができるものの大部分は考えることはできません

応答2# ->にスキップ
1 #
Dominik

私はあなたがここに言及したいくつかのことを試みました、そして私は結果についてあなたに知らせます.
dbreadonlyに行く限り. 私はデータベース内のクエリのレコードセットを開いていますそれがtableを更新します.説明するのは本当に複雑ですが、うまくいって、私はあなたを保証することができます!
みんなのあなたの時間に感謝します、ありがとうございました!

5 #
TomvanS

あなたのポイント1と2は私を混乱させています.ReadOnly RecoverySetsetは挿入または更新できず、挿入と更新は通常バインドフォームで行われます.これら2点間の関係は何ですか?

tableには長いテキスト(メモ)やOLEなどのデータ型がありますか?