
見積システムを作成していまして、ロックの処理をVBAにて作成しました。
リストを開くとき、「見積」テーブルにある「レコードロック」というレコードがTrueになります。
そのため別の使用者が開いた際、ロックがかかり開けないという仕組みになっています。
<リストの開いた時のコード>
Private Sub Form_Open(Cancel As Integer)
On Error Resume Next
If Me.レコードロック = True Then
MsgBox "別の使用者がいるため開くことができません。", vbOKOnly + vbExclamation, "レコードロック"
Cancel = True
Else
閉じる_ボタン.Enabled = True
キャンセル.Enabled = False
更新_ボタン.Enabled = False
一覧に反映.Enabled = False
End If
End Sub
リストを開けない時、メッセージボックスにて"別の使用者がいるため開くことができません。"と表示されるのですが
これを"○○が使用しているため開くことができません。"と変更したいです。
「○○」はリストを開いた時点で自動で取得するように作成すべく、
「見積」テーブルにある「レコードロック者」というレコードに記入するため追加クエリを作成しました。
<追加クエリのSQLビュー>
UPDATE Q_見積 SET Q_見積.[レコードロック者] = a()
WHERE (((Q_見積.見積番号)=[forms]![リスト]![見積番号]));
内容としましてはリストにある見積番号とテーブルにある見積番号が同じの場合、「見積」のテーブルの該当する見積番号のレコードロック者にコンピューター名を入れる処理です。
「○○」をコンピューター名にするため「a」という変数を作成し開いた時のコードを変更しました。
<リストの開いた時のコード 変更後>
Private Sub Form_Open(Cancel As Integer)
On Error Resume Next
Public a As String
If Me.レコードロック = True Then
MsgBox "別の使用者がいるため開くことができません。", vbOKOnly + vbExclamation, "レコードロック"
Cancel = True
Else
a = Environ(“ComputerName”)
DoCmd.SetWarnings False
DoCmd.OpenQuery "追加クエリ"
DoCmd.SetWarnings True
閉じる_ボタン.Enabled = True
キャンセル.Enabled = False
更新_ボタン.Enabled = False
一覧に反映.Enabled = False
End If
End Sub
しかし、リストを開くことはできますがレコードロック者に名前が追加されることはなかったです。
追加クエリを確認すると「式に未確定関数'a'があります。」と表示されました。
どのように変更すればよいでしょうか?
ご教授の方、お願い致します。
<備考>
・Microsoft access2021
・windows11 home、64ビット
A 回答 (1件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
状況が良く分かっていないので『怪答』かもしれません。
フィールドを一個追加して(名前を仮にWhoとします)フォームにも配置。
で、
>Private Sub Form_Open(Cancel As Integer)
>On Error Resume Next '※現段階でResume NextしてるとDebugで混乱するかと
の時に
If nz(Me!Who,"")="" then
me!Who=environ("computername") 'この時Accessでレコードロックされるはず
else
msgbox me!Who & "が使用中なのでバイバイ",vbokonly
Cancel=true
end if
end sub
※フォームをCloseする時には
me!who=""
で戻す
ではいかが?
余談ですが
>DoCmd.SetWarnings False
>DoCmd.OpenQuery "追加クエリ"
>DoCmd.SetWarnings True
アクションクエリ(更新・追加・削除)の実行確認が出るのを止めるために
Setwarningsしてますが
Currentdb.execute(Sql文)なら確認のメッセージが出ません。
Dim sSql as string
sSql="UPDATE Q_見積 SET Q_見積.[レコードロック者] ='" & environ("computername") & "'"
ssql=ssql & "WHERE (((Q_見積.見積番号)=" & [forms]![リスト]![見積番号] & "));"
currentdb.execute ssql,dbfailonerror
みたいな感じです。
ご参考まで。
ご回答ありがとうございます。
me!Who=environ("computername")
この処理で追加したフィールド、「who」にコンピューター名が登録されるのと思われるのですが、レコードをコピーし実際に起動したところエラーは起きませんでしたがコンピューター名が追加されることもなかったです。
恐らくですが、見積番号とテーブルにある見積番号が同じの場合フォームを開くため追加で条件式が必要です。
WHEREにて追加するでしょうか?
余談についてVBAの提示ありがとうございます。
同様のレコードが大量にあるため、検討させていただきます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
docmd.gotorecordを起動するには
-
Access 指定したレコードへ移動
-
ACCESSフォーム入力後の確定
-
禁止文字をエクセルかアクセス...
-
動画編集アプリvllo抽出エラー
-
X-Ripperというフリーウェアに...
-
サブフォームを利用したクエリ...
-
Access サブフォームでの選択行...
-
未審査請求包袋抽出表作成とは...
-
Accessで、サブフォームのある...
-
access クエリ yes/no型のクエ...
-
Accessでのフォーム表示がうま...
-
access 2019で、メインフオーム...
-
コンボボックス全ての値を取得...
-
.flex-direction プロパティは...
-
ACCESSのクエリー抽出条件にIIF...
-
Accessのコンボボックスでリス...
-
ACCESSクエリ抽出条件について
-
ACCESSでVBAから選択クエリの抽...
-
「パラメータが少なすぎます。3...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ACCESS 複数のフォームから同一...
-
Accessでレコードの複製
-
ACCESSフォーム入力後の確定
-
AccessのRefresh・Requery・Rep...
-
accessでオートナンバーを使わ...
-
MS.Access でサブフォーム付の...
-
Accessフォームで詳細内の任意...
-
Accessの「Form_AfterUpd...
-
docmd.gotorecordを起動するには
-
access の 最終レコードの判定...
-
アクセスで複数レコードを1レ...
-
MSAccess ロック状態かどうかを...
-
アクセスのコンボボックスの内...
-
アクセエスのレコードの更新をV...
-
Accessで経過日付に応じて色を...
-
新しいレコードへの移動時にト...
-
ファイルメーカーで重複してイ...
-
Accessのレコード数をテキスト...
-
AccessVBA フィルタとカレント...
-
Access 指定したレコードへ移動
おすすめ情報