Access (VBA)

Access VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10 Home : Access 2016)
エラー3211テーブルをロックできませんでした。
投稿日時: 20/05/22 14:36:35
投稿者: miyama2305

フォームとレポートが、同じテーブルをレコードソースにした場合
プロパティシートの「レコードロック」を編集済みレコードにしていますが
テーブルをロックできませんでした。と表示されます。
テーブルではなくクエリをレコードソースにしないと
エラーは回避できないのでしょうか?
又、外の方法があれば、ご指導お願いします。
 
「既定のレコードロック」は「ロックしない」
「レコードレベルでロックして開く」にチェックしています。
 
 

投稿日時: 20/05/22 16:51:36
投稿者: miyama2305

申し訳ありません。抽象的でありました。
フォーム、F帳簿作成、現金出納帳の2つのフォームです
F帳簿作成から、[入力ボタン]をクリックしたら
現金出納帳を表示。
現金出納帳(帳票フォーム)の構造は
今までの取引明細を表示
フィールドは
日付/番号/相手科目/摘要/借方/貸方/残高です
帳票形式で昇順に並んで表示しています
フォームフッターに現金取引の仕訳のテキストボックスを表示して
新しい仕訳を入力します。
登録ボタンでテーブル(T仕訳明細)の最終行に表示します
このコードはフォーム現金出納帳に記載しました。
以下です。
Private Sub 登録_Click()
Dim DB As Database, rst As Recordset
Dim strSQL As String
Set DB = CurrentDb
Set rst = DB.OpenRecordset("T仕訳明細", dbOpenDynaset)
rst.AddNew
rst!日付 = Me!日付
rst!番号 = Me!番号
rst!相手科目 = Me!相手科目
rst!摘要 = Me!摘要
rst!借方 = Me!借方
rst!貸方 = Me!貸方
rst.Update
DoCmd.Close
DoCmd.OpenForm "F帳簿作成"
Form_F帳簿作成.入力_Click →ここがエラーです。
end sub
 
F帳簿作成に以下のコードを表示
Public Sub 入力_Click()
Call データ作成
DoCmd.OpenForm "現金出納帳"
End Sub
 
Call データ作成は
新しい仕訳を加えて残高を表示するVBAマクロです
テーブルT現金出納帳明細に最終表示されます
フィールドは以下です。
日付/番号/相手科目/摘要/借方/貸方/残高
現金出納帳フォームに表示されます
レコードソースはT現金出納帳明細です
プロパティシートの「レコードロック」を編集済みレコードにしています。
 
Form_F帳簿作成.入力_Clickでエラー3211テーブルが
ロックされませんでした。と表示されます。
 
Private Sub 登録_Click()のコード
Form_F帳簿作成.入力_Clickを削除して
F帳簿作成の入力ボタンを
クリックしたら、更新されて
現金出納帳には正しく表示されます。
 
別のフォームのボタンをクリック
するForm_F帳簿作成.入力_Click
がエラーの原因のようです。
 
ご指導おねがいします。
 
 
 
 
 

回答
投稿日時: 20/05/23 15:58:28
投稿者: hatena
投稿者のウェブサイトに移動

フォーム現金出納帳の「登録」ボタンで、T仕訳明細にデータ追加後、現金出納帳をいったん閉じて、
F帳簿作成 を開いて、そこの「入力」ボタンのコードを実行して、再び、現金出納帳を開くという処理の目的はなんでしょうか。
 
Call データ作成 のデータ更新を現金出納帳フォームに反映させるのが目的だとしたら、再クエリすればOKです。
 
下記のコードを試してみてください。ご希望の動作になりませんか。
 

Private Sub 登録_Click()
    Me.Refresh 'カレントレコード保存

    Dim DB As Database, rst As Recordset
    Set DB = CurrentDb
    Set rst = DB.OpenRecordset("T仕訳明細", dbOpenDynaset)
    rst.AddNew
    rst!日付 = Me!日付
    rst!番号 = Me!番号
    rst!相手科目 = Me!相手科目
    rst!摘要 = Me!摘要
    rst!借方 = Me!借方
    rst!貸方 = Me!貸方
    rst.Update
    rst.Close

    Call データ作成

    Me.Requery '再クエリ

End Sub

投稿日時: 20/05/23 19:08:18
投稿者: miyama2305

hatena様
ありがとうございます
 
コンパイルエラー
subまたはFunctionが定義されていませんと表示されます
Call データ作成、の部分です
 
データ作成のコードは
F帳簿作成フオームに
Sub データ作成()
で表示しております
申し訳ありません
お願いします
 
 

回答
投稿日時: 20/05/24 10:37:22
投稿者: hatena
投稿者のウェブサイトに移動

miyama2305 さんの引用:
データ作成のコードは
F帳簿作成フオームに
Sub データ作成()
で表示しております

データ作成のコードは、F帳簿作成フォームのモジュールに記述してあるということですね。
 
F帳簿作成フォーム固有の処理ではなく複数のフォームから呼び出されるコードなら、標準モジュールに記述すべきだと思います。
 
 
 
 
 

投稿日時: 20/05/25 15:03:40
投稿者: miyama2305

hatena様
ありがとうございます
データ作成
標準モジュールに記述しました。
 
データ作成のなかに
T仕訳明細を削除するコードがあります
一部表示します。
tblNameはT仕訳明細です。
 
For Each tdf In DB.TableDefs 'テーブル削除
If tdf.Name = tblName Then DoCmd.DeleteObject acTable, tblName: Exit For
Next
      
DoCmd.DeleteObject acTableの部分で
エラーが発生します。
同様ですが
エラー3211テーブルが
ロックされませんでした。と表示されます。
 
お願いします。
 
 

回答
投稿日時: 20/05/25 17:02:32
投稿者: hatena
投稿者のウェブサイトに移動

miyama2305 さんの引用:

データ作成のなかに
T仕訳明細を削除するコードがあります
一部表示します。
tblNameはT仕訳明細です。

 
T仕訳明細 にデータを追加したあと、
Call データ作成

を実行して、その中で T仕訳明細 を削除するという意味か分かりません。
 
何のためにデータ追加したのですか。
また、データベースアプリケーションで運用中にテーブルを削除するという処理はすべきではないです。
データが不用ななったのなら、テーブル削除ではなく、データ削除をすべきです。
 
やろうとしていることにどこか矛盾がありませんか。

投稿日時: 20/05/25 17:35:37
投稿者: miyama2305

hatena様
 
>テーブル削除ではなく、データ削除をすべきです
おっしゃる通りでした。
新しい取引が追加されました。
2週間、1日10時間を費やしました。
物凄く感謝しています。
 
ありがとうございました。