
Access初心者です(Access2016使用)。
テーブル1をレコードソースとしたフォーム1があります。
フォームは開く際に、acFormAddで開き、新規レコードの状態でフォーム1に配置した各コントロールに必要情報を入力していきます。
全ての情報を入力しフォーム1から離れる際に、テーブル1の「入力日時」フィールドに現在の日時を自動入力したいと思っています。
フォーム1に設置したコントロールに入力すると、オートナンバー型に数値(id)が自動で取得されるので、その数値を使用し下記のようにしてみました。
ただこれですと、「rstMy!入力日時 = Now」のところで「カレントレコードがありません。」とエラーになってしまいます。
修正箇所を教えていただけないでしょうか。
よろしくお願いします。
Dim dbsMy As DAO.Database
Dim rstMy As DAO.Recordset
Dim strSQL As String
Set dbsMy = CurrentDb
strSQL = "select * from テーブル1 where id=" & Me.id
Set rstMy = dbsMy.OpenRecordset(strSQL)
With rstMy
.Edit
rstMy!入力日時 = Now
.Update
End With
rstMy.Close
No.2ベストアンサー
- 回答日時:
> 全ての情報を入力しフォーム1から離れる際に
1レコード入力するたびにフォームをクローズしているということですか?
フォーム1 のレコードソース が テーブル1なら、
フォームがらそのまま 「日時」のフィールドに書き込めます。
Private Sub Form_BeforeUpdate(Cancel As Integer)
If Me.NewRecord Then
Me.日時 = Now()
End If
End Sub
No.4
- 回答日時:
ごめん!
勘違いしてた。
おそらく、新規IDのレコードが存在しないからエラーになってるんですよね。
であれば、新規IDのレコードを作成してからフォームから登録させたら?
フォームを開く前に新規IDでレコードを追加してからフォームを開くと。
そうすれば、確実にレコードは存在してるので。
出来そう?
No.3
- 回答日時:
くんこばさん、ごめんなさい。
単純にNo2さんの対応でうまくいくことが分かりました。
いくつものご助言申し訳ありませんでした。
また、機会があればお助けください。
No.1
- 回答日時:
返答が遅くなってごめんなさい。
貼っていただいたリンクは、フォームに設置してあるコントロールが非連結のときは、新たにレコード枠をとって、そこにコントロールに記載された値を入れ込むというものですよね。
わたしも通常はそのように入力フォームを作るのですが、今回「添付ファイル型」のコントロールを配置したため、非連結のコントロールが使えないようです。
そもそも考え方が間違えているのかもしれませんので、良い案がありましたら再度お教え願います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) ExcelからAccessのテーブルに書き込む時に時間がかかる 1 2022/10/14 20:38
- Access(アクセス) アクセスの更新クエリでカレントレコードのみ更新したい 1 2022/06/02 23:32
- Access(アクセス) docmd.gotorecordを起動するには 5 2022/06/17 15:20
- Visual Basic(VBA) Accessフォームで全レコードを指定のExcelのセルへ転送し印刷する方法について 2 2022/09/08 18:23
- Visual Basic(VBA) access count数を変数に格納 2 2022/03/30 19:21
- その他(データベース) Accessフォームからパラメーターで表示したレコードを指定のExcelのセルへ転送する方法について 2 2022/08/22 18:04
- Access(アクセス) Access 登録ボタンからサブフォームの更新 1 2022/07/22 10:23
- Access(アクセス) DoCmd.SearchForRecord が動かない時の解決方法 3 2022/07/22 15:31
- Access(アクセス) チェックボックスにチェックが入った後の挙動 1 2022/08/21 12:39
- Access(アクセス) accessについて(超初心者です) 1 2023/02/11 11:18
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
レコードを保存するコード ア...
-
アクセスでフォームビューがみ...
-
レコード削除時に(サブ)フォー...
-
Accessでチェックボックスで抽...
-
新規レコード行を非表示にしたい
-
ACCESSフォームのリストボック...
-
Accessでのデータ消滅に...
-
Accessでフォーム上に 直前の...
-
access2010 カウントアップマクロ
-
Access2016 入力専用フォームと...
-
Access サブフォームにフィルタ...
-
Accessで一件の新規レコードの...
-
アクセスのフォームで立ち上げ...
-
AccessVBA RecordSourceのリセ...
-
Accessでレコードの保存をせず...
-
アクセス:フォーム入力で、最...
-
アクセス データの競合を非表...
-
accessのフォームを空にしたい
-
access 自作の移動ボタンのエラ...
-
ACCESSでフォームを使って、テ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
レコードを保存するコード ア...
-
新規レコード行を非表示にしたい
-
レコード削除時に(サブ)フォー...
-
アクセスでフォームビューがみ...
-
アクセスの自動保存解除はでき...
-
フィルタ後のフォームの件数の...
-
アクセス:フォーム入力で、最...
-
ACCESS起動時に所定フォームを...
-
Access サブフォームにフィルタ...
-
ACCESSでフォームを使って、テ...
-
Accessでフォーム上に 直前の...
-
Accessで上の行を自動でコピー...
-
Access2010、値を入力したら自...
-
Access:フォームプロパティ「...
-
Access 更新キャンセルするには?
-
レコードをダブルクリックする...
-
AccessVBA RecordSourceのリセ...
-
Accessでのデータ消滅に...
-
アクセスでの警告について教え...
-
Accessでレコードの保存をせず...
おすすめ情報
もう少し細かい経緯をお話させていただきます。
通常はわたしもNo1様の回答のようにAddNew/Updateを使用して、非連結フォームからテーブルにデータを追加しています。ただ今回登録フォームで「添付ファイル型」を使用しており、非連結のコントロールが使えずに困っています。
苦肉の策として連結したフォーム/コントロールを用いて、直接テーブルに値を入れこもうとしています。
ただ、入力作業中にフォームを離れると中途なレコードが残るので、全項目入力を終えたら、便宜上「登録ボタン」を押し、日時を記録させ、フォームを離れる際に「日時」が入力済であればフォームを閉じる、「日時」が未入力ならば、中途の入力情報を削除するといった方法を考えています。
この方法が理にかなっているかどうかもそもそも疑問がありますので、もし良い方法や参考になるサイトがあれば、ご助言いただけると幸いです。
よろしくお願いします。
くんこばさん、ありがとうございます。ひとつずつ確認させてください。
①登録フォームを開く際に、
Me.AllowAdditions = True
DoCmd.GoToRecord acActiveDataObject, , acNewRec
で、新しいレコードを追加し、追加したレコードに移動させているつもりですが、正しいでしょうか?
②①の作業後、フォームの連結コントロールに値を入力すると、VBA等でなにも操作しなくても、テーブルには値が入力されるとの認識は正しいでしょうか?
③登録ボタンをクリックして、「日時」を該当レコードに入力するには、AddNewとEditどちらを使えばよいでしょうか?
AddNewを使うと、上記直接入力したレコードではなく、あらたなレコードができ、そこに日時だけが入力されています。Editを使うと「カレントレコードがありません」となりますが、どこがダメでしょうか?