Access VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


84 / 500 ページ ←次へ | 前へ→

【11624】Re:コンボボックスにフォームから新規入力
お礼  オオガキ E-MAIL  - 10/4/21(水) 10:54 -

引用なし
パスワード
   出来ました!!!

サブフォームには記入していたのですが
色々やっている間にまたフォーカス喪失時に記入できていなかったのと、
失敗した時きちっと消せていなかったらしく
あの表記になったようです


本当に長々とありがとうございました!

本当に助かりました!
ありがとうございます
・ツリー全体表示

【11623】Re:コンボボックスにフォームから新規入力
発言  247b  - 10/4/20(火) 17:31 -

引用なし
パスワード
   コンボ4のプログラムはメインのフォームに記述していますか?
サブフォームに記述していますか?
メインに記述しているなら、サブフォームに書くように修正してください。
エラーの内容からすると、上記に関係ないところでストップしているように思います。

Private Sub 〜
End Sub

の間に入っていないプログラムの行が存在したりしませんか?
・ツリー全体表示

【11622】Re:コンボボックスにフォームから新規入力
質問  オオガキ E-MAIL  - 10/4/20(火) 17:04 -

引用なし
パスワード
   本当にありがとうございます!!

ひとつはできました
ずっと悩んでいたのですがやっと出来ました。

でも、もうひとつが同じことをしているのにできません。


Private Sub コンボ4_Exit(Cancel As Integer)
Dim cs As String
  Dim i As Long
  Dim Alreadyhas As Boolean

  cs = コンボ4.Text

  For i = 0 To コンボ4.ListCount - 1
    If コンボ4.ItemData(i) = cs Then
      Alreadyhas = True
      Exit For
    End If
  Next

  If Not Alreadyhas Then
    コンボ4.AddItem cs
  End If

End Sub


なのですが、プロシージャの外では無効です
と表示されます

ちなみにサブフォームのコンボボックスなのですが関係ありますか?

ご指摘いただけると幸いです。
・ツリー全体表示

【11621】Re:コンボボックスにフォームから新規入力
発言  247b  - 10/4/20(火) 14:45 -

引用なし
パスワード
   プログラムを拝見するかぎり、「フォーカス取得時」に記述していますね。
あと、プログラムは
Private Sub コンボ29_Exit()

End Sub
の間に記述します。

以下の様になるはずです。

Private Sub コンボ29_Exit()
    Dim cs As String
  Dim i As Long
  Dim Alreadyhas As Boolean
 
  cs = コンボ29.Text
 
  For i = 0 To コンボ29.ListCount - 1
    If コンボ29.ItemData(i) = cs Then
      Alreadyhas = True
      Exit For
    End If
  Next
 
  If Not Alreadyhas Then
    コンボ29.AddItem cs
  End If

End Sub
・ツリー全体表示

【11620】Re:コンボボックスにフォームから新規入力
質問  オオガキ E-MAIL  - 10/4/20(火) 14:23 -

引用なし
パスワード
   ▼247b さん:

早速、お返事ありがとうございます。


フォーカス喪失時に登録したのですが
コンボボックスに入力した後、新規作成をするとエラーが出ます

エラーの出ている所は


Private Sub コンボ29_Enter()

End Sub

End SubDim cs As String
  Dim i As Long
  Dim Alreadyhas As Boolean
 
  cs = コンボ29.Text
 
  For i = 0 To コンボ29.ListCount - 1
    If コンボ29.ItemData(i) = cs Then
      Alreadyhas = True
      Exit For
    End If
  Next
 
  If Not Alreadyhas Then
    コンボ29.AddItem cs
  End If

の一番上のPrivate Sub コンボ29_Enter()
という所です


入力の仕方が間違っているのだと思うのですが
どう間違っているのか教えていただけませんか


Private Sub コンボ29_Enter()

End Sub

を消去しても次開くと出てくるのです


初心者的な事だとは思いますがどうぞよろしくお願いします
・ツリー全体表示

【11619】Re:コンボボックスにフォームから新規入力
発言  247b  - 10/4/20(火) 13:16 -

引用なし
パスワード
   こんにちわ。

以下のプログラムを、該当のコンボボックスのイベント「フォーカス喪失時」に登録してみてください。
コンボボックスの名前は変更してください。

  Dim cs As String
  Dim i As Long
  Dim Alreadyhas As Boolean
  
  cs = コンボ0.Text
  
  For i = 0 To コンボ0.ListCount - 1
    If コンボ0.ItemData(i) = cs Then
      Alreadyhas = True
      Exit For
    End If
  Next
  
  If Not Alreadyhas Then
    コンボ0.AddItem cs
  End If
・ツリー全体表示

【11618】Re:データ抽出の方法について
発言  超初心者  - 10/4/20(火) 11:51 -

引用なし
パスワード
   ▼Masato さん:
> 工場名と実績の関係:A(あ、’’)、
"’’"はNull?空文字?

クエリを作ったら、抽出条件は
(工場名="A" AND 実績="あ") OR
(工場名="A" AND 実績="’’")
こんな感じになるでしょうか。

少しだけまとめて
工場名="A" AND
(実績="あ" or 実績="’’")
こんな感じでも良いかもです。
・ツリー全体表示

【11617】Re:テーブルのリレーションシップについて
発言  超初心者  - 10/4/20(火) 11:31 -

引用なし
パスワード
   ▼まい さん:
既に確認済みとは思いますが、INNER JOIN などでの
リレーションは出来ません。

変則的(?)な方法ですが、
WHERE条件で抽出することになるかと思います。

しかも
> 結果
> 品目3 区分   数量  品目
> BBB7  2    1     
LEFT JOIN のようで、更に変則的に!?


少しごちゃごちゃしてますが、

SELECT UQ.品目3, UQ.区分, UQ.数量, Last(UQ.品目) AS 品目
FROM (SELECT テーブル2.*, Null As 品目
FROM テーブル2
UNION
SELECT テーブル2.*, テーブル1.品目
FROM テーブル1, テーブル2
WHERE テーブル2.品目3 Like Replace([テーブル1]![品目],"*","?")
) AS UQ
GROUP BY UQ.品目3, UQ.区分, UQ.数量;

一応、質問例のものは実現できました。
後の作業がどのようなものかは分かりませんが、
作業テーブルを作って、追加・更新していく方が良いかもです^^;

参考までに。
・ツリー全体表示

【11616】データ抽出の方法について
質問  Masato  - 10/4/20(火) 10:30 -

引用なし
パスワード
   おはようございます。

 あるデータを抽出したいですが、抽出条件の組み合わせはうまくできないので、ご伝授ください。

実施したいのは、
工場名と実績の関係:A(あ、’’)、
          B(い、’’)、
          C(う、’’)、
          D(え、’’)
          ・
          ・
抽出条件は:年月、工場名、製品CD同じであり、且つ工場名と実績の関係を満たすレコードを
      抽出する。

年月  工場名  製品CD  実績  数量
2201  A    WK-001   あ   10
2201  A    WK-001   い   20
2201  A    WK-001   う   30
2201  A    WK-001       40


以下の結果を求めたいです。

年月  工場名  製品CD  実績  数量  ・・・
2201  A    WK-001   あ   10
2201  A    WK-001       40 
・ツリー全体表示

【11615】コンボボックスにフォームから新規入力
質問  オオガキ E-MAIL  - 10/4/20(火) 9:57 -

引用なし
パスワード
   色々検索して実行してみたのですが全くの初心者なのでどうもうまくいきません

どなたかご教授いただけませんでしょうか


製品番号が表示されるコンボボックスがあるのですが
フォームから入力している時にそこに新しく文字をいれて
それを次からコンボボックスに反映されるようにしたいのです

新しい単語を入力は出来ても反映されなかったり
リスト外入力のイベントを設定しても何もおこらないのです


どうぞよろしくお願いいたします
・ツリー全体表示

【11614】Re:ACCESS VBA バックアップについて
発言  247b  - 10/4/20(火) 8:59 -

引用なし
パスワード
   おはようございます。

MDBファイルのコピーで良ければVBAでなく、手でコピー(普通のファイルコピー)の方が手軽だと思います。
VBAでファイルコピーしたい場合は、コピーしたいMDBファイルにではなく、エクセルなど他のファイルで
FileCopyステートメントを使用すればコピーできます。

データのみコピーの場合は、追加クエリを使って、別のデータベース(MDBファイル)を指定してやれば、データがコピーされます。プログラムの手順としては以下のような感じでしょうか。

コピー先DBのデータを削除(テーブル数分繰り返す)
追加クエリを呼び出し(テーブル数分繰り返す)
・ツリー全体表示

【11613】Re:ACCESS VBA バックアップについて
質問  daisy  - 10/4/20(火) 7:19 -

引用なし
パスワード
   返信ありがとうございます。
どちらでもいいのですが、(初心者なのでよくわかっていないのですが)
教えていただけないでしょうか。
・ツリー全体表示

【11612】Re:ACCESS VBA バックアップについて
発言  247b  - 10/4/20(火) 6:06 -

引用なし
パスワード
   おはようございます。

状況が今ひとつわからないのですが、MDBファイルをコピーしてそれをバックアップするということでよいのでしょうか?
それとも、テーブルもしくはデータを別のMDBファイルにコピーすることを考えてますか?
・ツリー全体表示

【11611】テーブルのリレーションシップについて
質問  まい  - 10/4/19(月) 14:50 -

引用なし
パスワード
   リレーションシップの設定でワイルドカード*は使えるのでしょうか?

今、2つのテーブルがあります

テーブル1
品目  品目2  コード
AAA*  123*4   A
AB*A  456*0   A
EEE-* 75878   A

など、*を含んだデータが12万件ほどあります

テ−ブル2
品目3 区分  数量 
BBB7  2    1
AAA8  2    1
AB6A  5    2
AB7A  5    2
EEE-8 2    2
EEE-1 1    1

など、テ-ブル1の*の部分が数字やアルファベットになったものがあり、
それを、結合させたいと思ってます

結果
品目3 区分   数量  品目
BBB7  2    1     
AAA8  2    1    AAA*
AB6A  5    2    AB*A
AB7A  5    2    AB*A
EEE-8 2    2    EEE-*
EEE-1 1    1    EEE-*

上記のようにしたいのですが、
どのようにしたらよいのか、悪戦苦闘してます
何か、良いアドバイスをお願いします


 
・ツリー全体表示

【11610】ACCESS VBA バックアップについて
質問  daisy  - 10/4/15(木) 18:54 -

引用なし
パスワード
   はじめまして。
ACCESSデータベースをバックアップしたいのです。
バックアップ先は、レンタルサーバー上にしたいのですが、
どのようにプログラムすればいいのかわかりません。

全データをバックアップが難しければ、ひとつの項目だけサーバー上でわかるようにしておきたいです。

どなたか教えていただけないでしょうか。
・ツリー全体表示

【11609】Re:MDBの分離 と レコード操作
発言  247b  - 10/4/15(木) 17:10 -

引用なし
パスワード
   こんにちは。

要件としてはこんな感じでしょうか。
・データ入力は入力.MDB、参照.MDB双方から行われる。
・入力.MDBの入力は30分程度の間、1人のみが作業可能。
・参照.MDBの入力は常時10人程度が作業可能。
・入力.MDBからの入力には排他制御が必要。
・参照.MDBからの入力には排他制御が必要。
・入力MDBと参照MDBで排他制御)の優先(入力作業の優先)はない。
・入力.MDBと参照.MDBはローカルPCに配置する。
・DT.MDBはサーバーに配置する。

なので、いわゆる排他制御が必要ということですね。
であれば、前回挙げておられたURLのプログラムソースが参考になると思います。

DT.MDBがサーバー配置になるなら、確かにリンクテーブルの使用は微妙なラインです。

レコードロックですが、Office2000以降だとできるんですね。
ページロックまでしかできない認識でした。すみません。
以下の資料を見つけました。
tp://msdn.microsoft.com/ja-jp/library/cc376645.aspx
・ツリー全体表示

【11608】Re:MDBの分離 と レコード操作
発言  pon  - 10/4/15(木) 14:27 -

引用なし
パスワード
   247b さん ありがとうございます

>念のため確認1
>アクセス任せの排他制御と、そうでない排他制御の違いを教えてください。
>どうも、この辺にお互いの認識相違があるように思われます。
                   
改めて聞かれると・・・・
>>アクセス任せの排他制御
これだけであいまいな理解であることが明白みたいな・・・です

排他については
Set dbs = OpenDatabase(LC_get_path, Options:=True) '排他で開く
でMDBそのものがロックされ、他の人は開けない
(今回初めて体験しました)
アクセス任せの排他制御 は、それ以外みたいな・・・ (^_^;;;
認識でした

当初は間違ったテストと間違った理解で
APP1_入力.MDBからDT登録時、コード上でDT.MDBを排他で開いて、直ぐ閉じるのであれば、
APP2_参照.MDBから、DT.MDBのTBLをスナップショット系からみることは出来る
みたいな理解でした

今回の 念のため確認1 を頂き、再度、排他について調べてみました

VBA の Recordset オブジェクトで共有データをロックする
tp://msdn.microsoft.com/ja-jp/library/cc376533.aspx
なんてありました


以下抜粋

排他モードは、データのロック方法の中では最も制限レベルが高いもので、ほかのすべての
ユーザーはデータベースを開くことができず、データベース内のデータへアクセスできなくなります。

共有モードでデータベースを開くと、複数ユーザーが同時にアクセスでき、
Jet データベース エンジンによりユーザー間の競合が処理されます。

Recordset オブジェクトでは、次の 4 つのレベルでデータをロックします。

  * 排他モード  データベース全体を他のユーザーが使えないようにし、
  制限レベルが最も高くなります。
  * レコードセット ロック  Recordset オブジェクトのテーブルをロックします。
  * ページ レベル ロック  編集中のデータが保存されている 4096 バイト (4K) の
  ページ全体をロックします。
  * レコード レベル ロック  現在編集中のレコードのみをロックします。

ページ レベル ロックあるいはレコードセット ロックを使用した場合は、現在編集中の
レコードが含まれるページおよびレコードのみがロックされ、制限レベルとしては最も
低いものとなります。この場合、ほかのユーザーはページまたはレコードからデータを
取得できますが、変更はできません。

レコード レベル ロックは ADO および DAO Recordset オブジェクトの既定値です。
また、ページ レベル ロックは ADO Command オブジェクトまたは DAO QueryDef
オブジェクトを使用する SQL DML ステートメント (UPDATE、DELETE、および
INSERT INTO ステートメントなどの大規模な操作) の既定値となっています。

ページ レベルまたはレコード レベルでデータをロックする Recordset オブジェクトを
操作する場合は、ペシミスティック ロックまたはオプティミスティック ロックの
どちらかを選択

ADO Recordset オブジェクトのロック タイプを設定するには、Recordset オブジェクトに
用意されている Open メソッドの LockType 引数にある adLockPessimistic 定数または
adLockOptimistic定数を指定します。 DAO Recordset オブジェクトの場合は、LockEdits
プロパティを設定してロック タイプを変更できますが、ADO Recordset オブジェクトを
開いた後にロック タイプを変更することはできません。

ペシミスティック ロックでは、レコードの編集を開始するとそのレコードまたはレコードが
あるページがロック処理中はページ全体がロックされるため、ロックが解除されるまで他の
ユーザーがそのページのレコードを変更できない

オプティミスティック ロックでは、新規レコードへ移動、または Update メソッドを
使用してレコードへの変更を保存する際に、レコードまたはページがロックレコードの
編集中に正しい更新を確認できないことです。ほかのユーザーが最初にレコードを更新
した場合、レコード編集の更新は行われません。

抜粋 以上


文言的にはだいぶ理解できたつもりですが、コードはまだ??です (^^;) 

>念のため確認2
>参照.MDBからDT.MDBを参照するとき、リンクテーブルは使ってないんですよね?
今回の作業を始める前に一応下調べはしたのですが
リンクテーブルは駄目だとか、あってもよいとかの書き込みがあって
よく理解できなかったので、
取りあえずリンクテーブルはやめ、また、DT.MDBのDTを表示するコントロールも
非連結にしましたが、
結局、フォームを開くとき、
コントロールのレコードソースを設定しているのでリンクテーブル有り同じことに
なっているのではと思っています

>逆に、入力.MDBでDT.MDBを開いた時に排他モードにして、参照.MDBで開く時に共有モードで開く
>(Option引数をつけない)というようにしてはどうでしょうか。
のアドバイスなんですが

>>でなくて
>>複数のAPP.MDBからDT.MDBを編集したい
>>となりました

APP1_入力.MDB
APP2_参照.MDB
DT.MDB

APP2_参照.MDB からも DT.MDB へ入力したいと思っています
動作的には
APP2_参照.MDB から 選択したブックを 編集更新したら 更新日時をDT.MDBに書き込む
で、最終的には、エクセルから DT.MDB に書き込むつもりでいるのですが
今回は
便宜的に、APP2_参照.MDBからブックを開いたときに DT.MDB に書き込みたいと思っています

まとめると
APP1_入力.MDB を 使用するのは 1人で、作業時には作業を始めると30分程度は連続使用
APP2_参照.MDBは、10人ぐらいが使用するのですが、起動しっぱなしでもかまわない
DT.MDB 直接の操作は無いと思っていますが、メンテt時等使用する場合は排他で開く
DT.MDBのメンテ時以外は、APP1_入力.MDB、APP2_参照.MDBどちらも同時使用可能
APP2_参照.MDBでの最新DT表示は、最新DT取得ボタン等で表示
APP1_入力.MDB、APP2_参照.MDBはローカルPCで起動、DT.MDBは、ファイルサーバー上に置く
みたいな感じです

なので
入力.MDBでDT.MDBを開いた時に排他モードは、
APP2_参照.MDBから、DT_TABLEを参照出来なくなるため不適、
共有モードでJet データベース エンジンによるユーザー間の競合処理
が希望の操作ではないかと思えます

上記の方針で再度チャレンジしてみようと思います
取りあえずのご報告でした。
・ツリー全体表示

【11607】Re:MDBの分離 と レコード操作
発言  247b  - 10/4/14(水) 19:26 -

引用なし
パスワード
   こんばんは。おつかれさまです。

念のため確認1
アクセス任せの排他制御と、そうでない排他制御の違いを教えてください。
どうも、この辺にお互いの認識相違があるように思われます。

念のため確認2
参照.MDBからDT.MDBを参照するとき、リンクテーブルは使ってないんですよね?

>現状の動作確認をしてみました
この文以降の説明内容を拝見する限り、設定内容に不整合がないような気がします=プログラムとその処理結果が正しい。
逆に、入力.MDBでDT.MDBを開いた時に排他モードにして、参照.MDBで開く時に共有モードで開く(Option引数をつけない)というようにしてはどうでしょうか。


><ADOを使ったレコード単位の排他ロックについて>
>tp://www5f.biglobe.ne.jp/~f-lap/tips_adolock.htm
拝見しました。
使えるのではないかと思います。
が、実際にはレコード単位ではなく、ページ単位だったはずで、レコードのサイズにもよるのですが、場合によってはロックしたいレコードの前後のレコードもロックされるということが発生すると記憶しています。それで問題なければ使えると思います。
・ツリー全体表示

【11606】Re:MDBの分離 と レコード操作
質問  pon  - 10/4/14(水) 18:37 -

引用なし
パスワード
   247b さん ありがとうございます


別件で遅くなりました

>タイマー、もしくはイベントでリクエリするのでよいと思います。
>リクエリのタイミングや必要性は業務用件に関わってくるため、
>ちらからはなんとも言えませんが。

了解です
ありがとうございます


>上記の方式でDBをオープンするようにしてからもう一度試してみてください。
ありがとうございます

これについては
DT.MDBを開くときは
手動で
「ファイル」→「開く」を選択
MDBファイルを選択
「開く」ボタンの右にある「▼」ボタンをクリックし、「排他モードで開く」を
選択
で開いて、その上でテストしていました

また、上記で開いた状態で
別PCから上記を開くと、開けませんメッセージが出るのを確認しています
ので、排他で開いているのは間違いないと思っています・・・
頂いたアドバイスを試してみてないので申し訳ないのですが
下記の確認をしてから試してみようと思ったのですが
この辺のチェックが一杯々で・・・、一歩づつで無いと手が出ません m(_ _)m
(理解不足が複合的に交錯しているように思えるため・・・)


APP1_入力.MDB
APP2_参照.MDB
DT.MDB
現状の動作確認をしてみました


APP2_参照.MDBのフォームのサブフォームデータシート形式
のレコードソースは
フォームロード時に
  Set dbs = OpenDatabase(LC_get_path, Options:=True) '排他で開く
  Me.CNB01_拠点.RowSource = "SELECT ・・・;"
で設定しています

APP2_参照.MDBのフォームが開いていないときには
APP1_入力.MDBからレコードの追加は出来ましが
APP2_参照.MDBのフォームが開いているとレコードの追加が出来ませんでした
(今回、気が付きました)

APP2_参照.MDB を 開いただけでは、DT.MDBのDT.LDBは作成されていませんでしたが
APP2_参照.MDBのフォーム(サブフォームデータシート形式)を開くと
DT.MDBのDT.LDBが作成されました←フォームを開いたので連結コントロールになってしまったようだ

この状態で
APP1_入力.MDBからDT.MDBにレコード登録するために
Set dbs = OpenDatabase(LC_get_path, Options:=True)
で、排他で開こうとするとエラーとなり
Err.Number
3356
Err.Description
このデータベースは、マシン 'hoge' のユーザー 'Admin' が排他的に開いています。
データベースが使用可能になった時点で、再度実行してください。
と、なる気がします

そこで
APP1_入力.MDBからレコード追加するときに

   'Set dbs = OpenDatabase(LC_get_path, Options:=True)

   Set dbs = OpenDatabase(LC_get_path)
とすると、レコードが追加できるようになりました

これから
Set dbs = OpenDatabase(LC_get_path, Options:=True) は
既に、DT.MDBのDT.LDBが存在するのに排他で開こうとしてエラーになっている
Set dbs = OpenDatabase(LC_get_path) は
排他管理をアクセス任せにしている状態になっている

と勝手な理解に至りました・・・ 合っているか不明ですが・・

他に
MDBを多重起動していて、同一レコード選択時、一方でレコード編集をすると
ほかのユーザーによってロックされているので、保存できませんでした。
に遭遇することがありますが
これもアクセス任せの排他管理ではと勝手に思っています

あいまいな理解ばかりでなんとも情け無いのですが
元々基本的な知識が無いので・・・・・ (~_~;)

当初は、排他制御のほうが楽なような気がしていましたが
上記のような状況では、アクセス任せの管理のほうが
簡単なような気がしてきました

頂いたアドバイス
>上記の方式でDBをオープンするようにしてからもう一度試してみてください。
は、この辺のロジックが正しくないとうまくテストできないような気がしています
どうなんでしょう・・・


<ADOを使ったレコード単位の排他ロックについて>
tp://www5f.biglobe.ne.jp/~f-lap/tips_adolock.htm
なんて見つけたのですが
まだ、理解できていない状態ですが
なんとなく
これがアクセス任せの排他制御のような気がしています

DAOでもいけそうな気がして、理解して試してみたいと思っています
がどうでしょう

わかりにくいと思いますが
本人自体??の状況ですのでご容赦よろしくお願い致します

アドバイス頂けると助かります
よろしくお願い致します
・ツリー全体表示

【11605】Re:MDBの分離 と レコード操作
発言  247b  - 10/4/12(月) 23:07 -

引用なし
パスワード
   こんばんわ。

>>Q3
>>最新状態を表示するシステム上の必要性がある場合は、上記のようなフォームのプロパティで更新をコントロールしたほうが良いと思います。
>
>についてなんですが
>Set RS = DB.OpenRecordset(strSql, dbOpenSnapshot)
>Set RS = DB.OpenRecordset(strSql, dbOpenDynaset)
>どちらも
>forms("メインフォーム").Controls("サブフォーム").requery
>で、更新データを表示することは出来ました
>これを
>タイマー等で動作させる
>という理解でよろしいでしょうか

タイマー、もしくはイベントでリクエリするのでよいと思います。
リクエリのタイミングや必要性は業務用件に関わってくるため、こちらからはなんとも言えませんが。


排他チェックについてですが、
 MDBファイルレベルの排他と
 ページレベルの排他
が考えられます。

的外れだったらすみません。

MDBファイルレベルの排他は、OpenDatabaseメソッドでMDBをオープンする際の引数optionsに
Trueを設定することで行います。この場合、他のユーザーがDBオープンしようとするとエラーとなるそうです。詳しくはOpendatabaseメソッドのヘルプを参照してください。
上記の方式でDBをオープンするようにしてからもう一度試してみてください。

ページレベルの排他は、必ず1行がロックされるわけではないので使用は控えた方が良いようです。
1行単位にロックをかけたい場合は、テーブルにロックのためにカラムを設け、たとえば
0だったらロックされていない、1だったらロックされているという仕様にします。
その上で、各APP.DBがデータにアクセスするとき、対照のデータのロックステータスを確認し、
1だったら待機、0だったら1に更新して、処理終了後0に戻す
などが考えられます。
1、0をユーザーID、NULLに置き換えることも設計上は可能です。プログラムが増えることと、チェックロジックのために処理が若干遅くなる事が考えられます。
・ツリー全体表示

84 / 500 ページ ←次へ | 前へ→
ページ:  ┃  記事番号:
1082653
(SS)C-BOARD v3.8 is Free