• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:レコードセットに新規追加する)

Access2013 VBAでレコードセットに新規追加する方法は?

このQ&Aのポイント
  • Access2013のVBAを使用して、テーブルのレコードセットに新規追加する方法について教えてください。
  • 具体的には、テーブルaにid2が2となるレコードが存在しない場合、生成したレコードセットRecを使用して新しいレコードを追加することができるのか知りたいです。
  • ご教示いただけると幸いです。

質問者が選んだベストアンサー

  • ベストアンサー
  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.2

開示されたレコード定義が列名のみなのでなんとも。 制約はどうしていますか? Null、空文字を受け入れるなら、 レコード追加できますが、値を代入していない列はNullでしょうね。

superwonderful
質問者

お礼

ご回答ありがとうございました。 もう少し勉強しないといけませんね・・・と

superwonderful
質問者

補足

ご回答ありがとうございます。 すみません、説明不足でした。 1. テーブルA ・IDa ・名前A 2. テーブルB ・IDb ・IDa ・名前B とあって、1がメインフォーム、2がサブフォームのレコードソースの場合 2のレコードセットを SQL="Select * from テーブルB where IDa = 2" として Set Rec = db.OpenRecordset(SQL, dbOpenDynaset) をした場合に もし、IDa = 2のレコードが、テーブルBに全然ない場合 Rec.AddNew Rec.Fields("IDb").value = 3 (←ID番号3を事前に取得したとして) Rec.Fields("ida").value = 2 Rec.Fields("名前").value = "名前" Rec.Update とすることができるかという質問でした。 お答えから察すると、取得したRecにレコードが何もない場合でも、AddNewで新規レコードを追加できるということでよろしいでしょうか?

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • m3_maki
  • ベストアンサー率64% (295/459)
回答No.1

Db と Rec は正しく宣言されているものとして。 少なくとも、id2 は値をセットしてあげないと。 Rec.AddNew Rec.Fields("id2").value = 2 Rec.Fields("名前").value = "名前" Rec.Update

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 空欄を含む項目のレコードセット

    Access 2003 DAO.Recordsetにてデータを取得しようと思うのですが テーブル項目に空欄がある場合はどのように書けばよろしいのでしょうか? Dim DB As DAO.Database Dim RS As DAO.Recordset Set DB = CurrentDb Set RS = daoDB.OpenRecordset("Aテーブル", dbOpenDynaset) RS.AddNew daoRS!ああ ああ = xx RS!Update ・・・ とするとエラーになります。 項目名"ああ ああ"はどのように書けばいいのでしょうか? よろしくおねがいします。

  • DAOでレコード数を取得したい(ACESSVBA)

    レコードの行数は複数あるのに --------------------------------------------------------- Sub あ() Dim db As DAO.Database Dim rs As DAO.Recordset Set db = CurrentDb Set rs = db.OpenRecordset("T_test", dbOpenDynaset) MsgBox rs.RecordCount Set rs = Nothing Set db = Nothing End Sub --------------------------------------------------------- これでレコード数を取得しようとすると1がかえるのですが なぜレコードの行数を取得できないのでしょうか?

  • accessからsqlserverにアップサイジングしましたが,テーブ

    accessからsqlserverにアップサイジングしましたが,テーブルにデータを入力出来なくなってしまいました。 Dim rs As DAO.Recordset Dim db As DAO.Database Set db = CurrentDb() Set rs = db.OpenRecordset("確認用", dbOpenDynaset) rs.AddNew rs!品番 = Me.品番 rs.Update 上記のようにDAOを介してテーブルにデータを入れていました。 アップサイジングする前は、問題なかったのですが、どういったことが原因になりますでしょうか?

  • レコード件数が返らない理由がわからない

    テーブル1にはレコードが5件入ってるのですが Private Sub レコード件数() Dim strSQL As String Dim rs As DAO.Recordset strSQL = "SELECT * FROM テーブル1;" Set rs = CurrentDb.OpenRecordset(strSQL, dbOpenDynaset) Debug.Print rs.RecordCount End Sub これをすると1が返るのですがなぜでしょうか? レコードの数が返ると思ってるのですが違うのでしょうか?

  • VBAによるレコードの追加について。

    同じテーブル構造をもつ2つのテーブルあり、Aという名前のテーブルにBという名前のテーブルの1レコードを1度に追加するには、ACCESS2003のVBAでは、どのように記述すればよいのでしょうか?イメージは、下記のとおりです。 Set TBL = DB.OpenRecordset("A", DB_OPEN_TABLE) Set TBL2 = DB.OpenRecordset("B", DB_OPEN_TABLE) Do Until TBL2.EOF TBL.AddNew TBL = TBL2 ‘← ココの記述が分かりません。 TBL2.MoveNext TBL.Update Loop

  • レコードカウントでレコード追加する

    いつも助けられています。 また宜しくお願いします。 xp sp2 access2003  使用です。 今回二つのテーブルにレコード追加をしたく、クリックすると追加できるように見よう見まねで書いたのですが、テーブルに既に主キーがあれば追加しないようにrecordcountで分岐したいのですが、 フィルタで0件のはずがrecordcountは1になってしまいます。また、1件以上あるはずでも1になります。 テーブルAAA: 主nom、加nom、名前、数量  (主と加が主キーです。) テーブルBBB: ID、主nom、加nom、事由、日 (IDがオートナンバで主キーです。) フォームには 主nom1~主nom10、加nom1~加nom10、名前、数量、事由、日 の非連結テキストボックスがあります。 ご助言お願いします。 Private Sub 新規登録_Click() Dim rs1 As DAO.Recordset Dim rs2 As DAO.Recordset Dim db As DAO.Database Dim i As Integer i = 1 Set db = CurrentDb Set rs1 = db.OpenRecordset("AAA", dbOpenDynaset) Set rs2 = db.OpenRecordset("BBB", dbOpenDynaset) Do While Me.Controls("加nom" & i) <> "" rs1.Filter = "[主nom]=" & Me.主nom & "and [加nom]=" & Me.Controls("加nom" & i) If rs1.RecordCount = 0 Then                           ←ココがうまくいかない rs1.AddNew rs1!主nom = Me.主nom rs1!加nom = Me.Controls("加nom" & i) rs1!名前 = Me.名前 rs1!数量 = Me.Controls("数量" & i) rs1.Update End If rs2.AddNew rs2!主nom = Me.主nom rs2!加nom = Me.Controls("加nom" & i) rs2!事由 = Me.事由 rs2!日 = Me.日 rs2.Update End If i = i + 1 Loop rs1.Close rs2.Close End Sub

  • アクセスVBA 変数での抽出条件の書きかた

    顧客データテーブルからの抽出です。 変数を使った書き方がわかりません。 よろしくお願いします。 テーブルのレコードには [氏名]:鈴木 [telnum]:0123456789 が存在します。 Private Sub テキスト0_BeforeUpdate(Cancel As Integer) Dim db As DAO.Database Dim rs As DAO.Recordset Set db = CurrentDb Set rs = db.OpenRecordset("顧客マスタ", dbOpenDynaset) Dim str As String str = "0123456789" rs.Filter = "[telnum] = ' " & str & " ' " Set rs = rs.OpenRecordset MsgBox (rs!氏名) ’←エラーメッセージ”カレントレコードがありません。”が出ます End Sub

  • Access レコードを分割してフォームで表示

    Access 2007です。 下記のような日記テーブルがあり、 その「行動」フィールドの中身を「●」の記号で レコードに分割して、 フォームに表示したいと思っています。 日記テーブル ID 年月日   天気  行動 1 2014/1/10  晴  ●読書。●新聞を読む。●散歩。 2 2014/1/11  曇  ●電車に乗る。●新年会。●庭の手入れ。●カラオケ。 3 2014/1/12  曇  ●昼寝。 4 2014/1/13  雨  ●買い物。●読書。 ・・・・ 結果フォーム(データシートビュー)で表示 年月日    行動 2014/1/10  読書。 2014/1/10  新聞を読む。 2014/1/10  散歩。 2014/1/11  電車に乗る。 2014/1/11  新年会。 2014/1/11  庭の手入れ。 2014/1/11  カラオケ。 2014/1/12  昼寝。 2014/1/13  買い物。 2014/1/13  読書。 もとの日記テーブルのデータは変更しません。 下記のように、VBAのコードの中で、 レコードセットを使えば、上記のようなレコードの分割ができると思うのですが、 うまくいきません。 rs2というレコードセットをどうやって作成すればいいのかわかりません。 (Set rs2 = DB.OpenRecordset ・・・ のような行が必要ではないか、と思うのですが、 そのやり方がわかりません。) やり方を教えていただけたら幸いです。 Dim DB As DAO.Database Set DB = CurrentDb() Dim rs1 As DAO.Recordset Dim rs2 As DAO.Recordset Set rs1 = DB.OpenRecordset("日記テーブル", dbOpenForwardOnly) Dim A As Variant Do Until rs1.EOF A = Split(rs1!行動, "●") For i = 1 to UBound(A) rs2.AddNew rs2!年月日 = rs1!年月日 rs2!行動 = rs1!A(i) rs2.Update Next i rs1.MoveNext Loop DoCmd.OpenForm "結果フォーム" Set Forms!結果フォーム.Recordset = rs2

  • テーブルのレコードが0件時にmsg表示(アクセス)

    とてつもない初歩的な質問で すみません! フォーム1をメニュー画面として、 フォーム1にある「ボタン」を押すと テーブルにレコードが追加され、処理が走る・・・という仕様を作っています。 ですが、 このテーブルにレコードが追加されなかった=0件 の場合の回避策を どうしたら良いのかが わかりません。 ちなみに、 Private Sub ボタン_Click() On Error GoTo errmsg DoCmd.SetWarnings False Dim DB As DAO.Database Dim rs1 As DAO.Recordset Dim rs2 As DAO.Recordset Dim i As Long Set DB = CurrentDb Set rs1 = DB.OpenRecordset("テーブル1") Set rs2 = DB.OpenRecordset("テーブル2", dbOpenDynaset) rs1.MoveFirst Do Until rs1.EOF If rs1!フィールドA1 = rs1!フィールドA2 Then rs2.AddNew rs2!ID = rs1!ID rs2!フィールドA = rs1!フィールドA1 rs2!B = rs1!フィールドB rs2!C = rs1!フィールドC rs2.Update End If If rs1!フィールドA1 < rs1!フィールドA2 Then For i = rs1!フィールドA1 To rs1!フィールドA2 Step 1 rs2.AddNew rs2!ID = rs1!ID rs2!フィールドA = i rs2!フィールドB = rs1!フィールドB rs2!フィールドC = rs1!フィールドC rs2.Update Next i End If rs1.MoveNext Loop rs1.Close: Set rs1 = Nothing rs2.Close: Set rs2 = Nothing DB.Close: Set DB = Nothing Call 次処理 errmsg: MsgBox "元データが未投入です。" End Sub としたのですが、 これでは データが投入され、処理が成功=完了した場合にも エラーメッセージが出てしまいました。 ご教示いただけますと幸いです。 お手数をおかけしますが、よろしくお願い致します。

  • SQLSERVERからデータを取得する方法

    SQLSERVERに商品テーブルを作り ACCESSにローカルテーブル(下記の例では入力テーブル)を 作りました。 ACCESS VBAで ACCESSのローカルテーブルを1件ずつ読み SQLSERVERの商品テーブルを検索したいのですが 下記の例 どちらが処理スピードが速いのですか? なお下記以外にも処理スピードが速い方法が あったら教えてください。 ●例1 Dim db As DATABASE Dim rs As Recordset   dim rt as Recordset Set db = CurrentDb Set rt = db.OpenRecordset("入力テーブル", dbOpenDynaset) sql = "SELECT 商品名 FROM 商品テーブル " sql = sql & "where 商品ID = '" & rt![商品ID] & "'" Set rs = db.OpenRecordset(sql) If rs.RecordCount = 0 Then MsgBox "NG" Else MsgBox rs![商品名] End If ●例2 Dim db As DATABASE Dim rs As Recordset   dim rt as Recordset Set db = CurrentDb Set rt = db.OpenRecordset("入力テーブル", dbOpenDynaset) Set rs = db.OpenRecordset("商品テーブル", dbOpenDynaset) rs.FindFirst "商品CD = '" & rt![商品CD] & "'" If rs.NoMatch Then MsgBox "NG" Else MsgBox rs![商品名] End If よろしくお願いします。

このQ&Aのポイント
  • 今度務めることになった会社で、制服と合羽を用意してくれます。自身のヌード寸法でウエストは88なので制服のズボンは88でお願いします。
  • ホームセンターで合羽を見てきたら適応ウエスト:L78~88。LL86~96。と記載されてました。適応ウエストというのはヌード寸法なのか、ズボンの上からの寸法なのか分かりません。
  • LLというサイズは適応身長が175~185となっていますが、自分の身長は168です。合羽は近所の店で試着できませんでした。困っています。
回答を見る