Private Sub コマンド30_Click()
Dim myDB As DAO.Database
Dim myRS As DAO.Recordset
Set myDB = CurrentDb
Set myRS = myDB.OpenRecordset("MT_test", dbOpenTable)
With myRS
.AddNew
!社員ID = txt社員ID.Value
!氏名 = txt氏名.Value
!生年月日 = txt生年月日.Value
!勤続年数 = txt勤続年数.Value
.Update
End With
MsgBox "登録しました。"
myRS.Close: Set myRS = Nothing
myDB.Close: Set myDB = Nothing
End Sub
このようなコードで、入力フォームを作成しました。
同様のフォームが、残り7個あります。
全てのフームで
Dim myDB As DAO.Database
Dim myRS As DAO.Recordset
Set myDB = CurrentDb
Set myRS = myDB.OpenRecordset("MT_test", dbOpenTable)
処理
MsgBox "登録しました。"
myRS.Close: Set myRS = Nothing
myDB.Close: Set myDB = Nothing
End Sub
以前、購入した書籍に、ADOなのですが、下記のコードがありました。
接続プロシージャと、切断プロシージャを下記のように記載して、
Callで呼び出すというものです。
Private adoCn As Object
Private adoRs As Object
Private strSQL As String
Sub DBconnect(flg As Boolean) 'DB接続プロシージャ
Dim DBpath As String
DBpath = ThisWorkbook.Path 'DBが同じ階層にある場合
Set adoCn = CreateObject("ADODB.Connection")
If flg = True Then Set adoRs = CreateObject("ADODB.Recordset")
adoCn.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & _
"Data Source=" & DBpath & "\UQ成約処理.accdb;" 'Accessファイルを開く
End Sub
Sub DBcut_off(flg As Boolean) 'DB切断プロシージャ
If flg = True Then adoRs.Close 'レコードセットのクローズ
adoCn.Close 'コネクションのクローズ
Set adoRs = Nothing 'オブジェクトの破棄
Set adoCn = Nothing
End Sub
DAOきっとこのような書き方もできるのではないかと思いました。
NETで検索していると、クラスモジュールに、記載している例をみつけました。
https://t-yumi.jp/gengo/access/20170430020608876.html
ACCESS、クラスモジュールで検索していると、恐らくhatena様が記載したYahoo知恵袋の回答を見ました。
https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1267696062
ここに記載しているブログはすべて拝見しました。
そして、下記の部分を、標準モジュール、またはクラスモジュールで書き直したいと思いました。
Dim myDB As DAO.Database
Dim myRS As DAO.Recordset
Set myDB = CurrentDb
Set myRS = myDB.OpenRecordset("MT_test", dbOpenTable)
myRS.Close: Set myRS = Nothing
myDB.Close: Set myDB = Nothing
この部分だけでも変更しよと思い下記のコードを記載しました。
Sub DBcut_off(flg As Boolean) 'DB切断プロシージャ
If flg = True Then myRS.Close 'レコードセットのクローズ
adoCn.Close 'コネクションのクローズ
Set myRS = Nothing 'オブジェクトの破棄
Set myDB = Nothing
End Sub
コンパイルエラー、引数は省略できません
NETで調べてもDAOは、HITしないようです。
お手数ですが、どのように記載するのか、ご教示をお願いします。
この入力フォームが連結フォームで連結したテーブルを更新するのが目的なら、そもそもADOもDAOも必要ありません。
というかVBAコード自体必要ありません。
VBAでテーブル更新しているということは、非連結フォームで設計しているのでしょうか。
だとしたら、非連結にしている目的はなんでしょう。
検索しても見つからないのは、Accessにおいてそのようなことする必然性がほぼないからです。
回答ありがとうございます。
非連結で入力フォームを作成したのは、作動が重くならないとNETで見つけたからです。
連結でも、非連結でも、作動は、関係ないのでしょうか?
環境としては、ネットワークドライブで、ACCESSを8人で共有して利用しています。
経験上、8人ぐらいなら、連結でもそんなに重くならないと思います。
新規データの入力フォームなら、「データ入力用」プロパティを「はい」にしておけば全レコードを読みに行くこともないので。
たまに、そのような話も見かけますが、実際、非連結でのコードはそんなに簡単ではないし、そんなにメリットはないと思います。
共有時の非連結フォームに関する私の見解は下記の質問にも回答してますので、参考にしてください。
デフォルトの楽観的排他制御 Microsoft Access 掲示板 - zawazawa
回答ありがとうございました。
hatena様の見解を参考にさせていただきます。