Access値を指定してレコード追加方法は?

このQ&Aのポイント
  • Accessのレコード追加時に、特定のフィールドに値を追加する方法が分からずに困っています。
  • 販売管理DBからのリンクテーブルに特定の得意先を抜出したデータに消費税を追加するための処理方法を教えてください。
  • VBAを使ってレコードの追加を試みていますが、エラーが発生し追加できません。レコードセットの定義や追加処理の方法を教えてください。
回答を見る
  • ベストアンサー

Access 値を指定してレコード追加

Accessのレコード追加時に、特定のフィールドに値を追加する方法が分からずに、困っております。 ご存じの方がいらっしゃいましたら、ご教授頂けましたら幸いです。 参考にしたサイト http://www.happy2-island.com/access/gogo03/capter00208.shtml バージョン Access2010 OS Windows7 Professional フォーム名:tmp税抜コンボ(テーブル名:tmp伝票No) サブフォーム:tmp税抜サブ(テーブル名:tmp税抜) 添付画像、tmp税抜コンビフォーム ◎目的 販売管理DB(SQLServer2008)からのリンクテーブルに、特定の得意先を抜出したデータに一部消費税が入っていないため消費税を入力し別のシステムへデータを渡す事が目的です。 ◎処理 可変値:納品日、伝票No、得意先CD、摘要、前のレコードからコピー 固定値:税区、商品名、数量は定数 消費税;手入力(InputBox) 上記のデータを新規で追加したいと考えており、下記のサイトを参考にしましたが、「オブジェクト変数または With ブロック変数が設定されていません」とのエラーが発生し追加出来ません。 【VBA】 Private Sub CmdB_copy_Click() 'レコードをコピーして、不要データ削除 '最後のレコードへ移動 DoCmd.GoToRecord , , acLast 'インプットボックスへ消費税額入力 Dim Tax As Long Tax = InputBox("消費税額を入力してください。") '現在のレコードから、伝票No、日付、得意先CDを取得 '変数定義 Dim rcDate As Date Dim rcDN_No As Long Dim rcTK_CD As Long '代入 rcDate = Me.納品日付 rcDN_No = Me.伝票NO rcTK_CD = Me.得意先CD Debug.Print rcDate Debug.Print rcDN_No Debug.Print rcTK_CD Debug.Print Tax 'レコードセットの定義 Dim oRS As DAO.Recordset With oRS .AddNew ←デバッグ画面では、ここでエラー表示 .Fields("納品日付").Value = rcDate .Fields("伝票No").Value = rcDN_No .Fields("得意先CD").Value = rcTK_CD .Fields("商品名").Value = "消費税" .Fields("数量").Value = 1 .Fields("単価") = Tax .Fields("税抜金額").Value = Tax oRS.Update End With Me.Requery MsgBox ("追加しました。") End Sub インティミディエイトウィンドを確認すると、納品日付、伝票No、得意先CD、消費税の値はちゃんと取得出来ているようですが、レコードセットの考え方、Withセクションの使い方、レコードの追加処理を全く理解できていないため、ご教授頂けたら幸いです。 もし、不足データがありましたら、お教え頂けたら出来る限りご提示いたします。  

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

  • ベストアンサー
  • mike32
  • ベストアンサー率60% (3/5)
回答No.1

AddNewする前の時点で、どのDBのどのテーブルに対して行うかをセットしていないためだと思います。 例えば、現在のDBの「T_追跡」テーブルをRSにセットする場合はこんな感じです。 Dim DB As DAO.Database Dim RS As DAO.Recordset Set DB = CurrentDb Set RS = DB.OpenRecordset("T_追跡") 参考URL: http://www.geocities.jp/cbc_vbnet/DAO/database.html この一番下のサンプルが参考になります。

sujinosuke00
質問者

お礼

完璧に実装出来ました。 レコードセット内容が全く理解出来ていなかったので、参考URLを元に勉強します。 ありがとうございました。

関連するQ&A

  • Access クエリ内のクエリ

    クエリの中で、他のテーブルと一致するデータを抽出したいのですが、結果が0件の結果しかかえって来ません。 何処が間違っているのかお教え頂けたら幸いです。 何がしたいかと言うと、「dbo_VIEW_CIJ用売上伝票」の下記項目の中の「T_得意先」の中の抽出フラグのTrueデータを抽出し新しい「T_税抜」テーブルを作成したいのですが、結果は0件しかかえって来ません。 ちなみに、得意先CDのIN句を抜くとちゃんとデータは抽出されます。 《テーブル》 【dbo_VIEW_CIJ用売上伝票】(SQL Serverリンクテーブル) ・納品日付 ・伝票NO ・得意先CD ・税抜金額 ・消費税区分 ・商品名 ・摘要 ・数量 ・単位名 ・単価 ・金額 {T_得意先】 得意先CD 抽出フラグ(YES・NO型) 《抽出条件》 納品日 : >=#(開始日変数)# And #(終了日変数)# 消費税区分 : 1 得意先CD : IN(SELECT [T_得意先]![得意先CD] FROM [T_得意先] WHERE[T_得意先]![抽出フラグ]='True') 《SQL》 SELECT dbo_VIEW_CIJ用売上伝票.納品日付, "" AS 部門コード, dbo_VIEW_CIJ用売上伝票.伝票NO, dbo_VIEW_CIJ用売上伝票.得意先CD, "" AS F, dbo_VIEW_CIJ用売上伝票.税抜金額, dbo_VIEW_CIJ用売上伝票.消費税区分, "" AS 商品CD, dbo_VIEW_CIJ用売上伝票.商品名, dbo_VIEW_CIJ用売上伝票.摘要, "" AS ケース数, "" AS 入数, dbo_VIEW_CIJ用売上伝票.数量, dbo_VIEW_CIJ用売上伝票.単位名, dbo_VIEW_CIJ用売上伝票.単価, [dbo_VIEW_CIJ用売上伝票]![消費税区分]*[dbo_VIEW_CIJ用売上伝票]![税抜金額] AS tmp小計, [dbo_VIEW_CIJ用売上伝票]![数量]*[dbo_VIEW_CIJ用売上伝票]![単価] AS tmp単価計 INTO Tmp税抜 FROM dbo_VIEW_CIJ用売上伝票 WHERE (((dbo_VIEW_CIJ用売上伝票.納品日付)>=#10/21/2013# And (dbo_VIEW_CIJ用売上伝票.納品日付)<=#11/20/2013#) AND ((dbo_VIEW_CIJ用売上伝票.得意先CD) In (select [T_得意先]![得意先CD] from [T_得意先] Where [T_得意先]![抽出フラグ] = True)) AND ((dbo_VIEW_CIJ用売上伝票.消費税区分)=1)) ORDER BY dbo_VIEW_CIJ用売上伝票.納品日付; ※上記SQL文は、SQLビューを記載してますが、デザインビューで作成し、得意先CDのIN句の部分は、得意先CDにビルドを使って入力しました。 参考にしたURL http://office.microsoft.com/ja-jp/access-help/HA010206111.aspx ・サブクエリをクエリ フィールドの抽出条件として使用する Access2010 Windows7

  • ACCESS

    皆さんのお力添えを頂けますでしょうか? Microsoft ACCESSにおけるレコードの入力について 現在access2010を使い以下のプログラムを作成しています。 (1)テーブル : T_注文明細 (フィールド名)ー(データ型) ・注文ID ー オートナンバー ・商品No ー テキスト ・数量 ー 数値 (2)テーブル : T_注文数 数量として1~10までの数値が入れてあります。 (フィールド名)ー (データ型) ・数量 ー 数値 (3)テーブル: T_商品 (フィールド名)ー (データ型) ・商品Noーテキスト ・商品名ーテキスト ・金額ー通貨 (4)フォーム : F_商品一覧 商品リストが画像付き(商品1種類につき1画像)で示されており、画像をクリックすると 別のフォーム:F_商品○○(添付写真のようなフォームが商品毎に作成されている)へと進みます。 (5)フォーム : F_商品○○ コントロールボックスと、注文ボタンを配置しており それぞれボタンにコードを埋め込んでいます。 ・コントロールボックスについて 値集合ソース : T_注文数 値集合タイプ : テーブル/クエリ 上記(2)のT_注文数をソースに数量:1~10を選択します ・注文ボタンについて 以下の内容でコードを書いています。 Private Sub btn1_Click() Dim oRs As DAO.Recordset 'テーブル読み込み(レコードセット作成) Set oRs = CurrentDb.OpenRecordset("T_注文明細", dbOpenDynaset) 'レコードが見つかった場合 If oRs.NoMatch = False Then 'レコードの内容を書き換えます oRs.Edit oRs("数量").Value = Me.cmbsuuryou5.Value oRs("商品No").Value = "商品No○○" oRs.Update End If 'レコードセットの終了処理 oRs.Close Set oRs = Nothing MsgBox "注文しました。", vbOKOnly + vbInformation, "注文" End Sub 以上を踏まえ、現在下記の点で困っております 問題1: 数量を選択して、注文ボタンを押すとT_注文明細のフィールドに 内容が反映されますが、常に先頭のレコードが上書きされてしまいます。 希望は最新のレコードとしてテーブルに挿入され、既存のレコードを上書きすることなくレコード数を増やしたいのですが、うまくいき ません。 問題2: F_注文にて複数種類の商品をそれぞれ複数個注文した際に T _注文明細に複数のレコードが挿入(注文 ID,商品 No,数量)が挿入されてほしいのですが、 現状では問題 1と同様に、常に先頭のレコードの商品Noと数量だけが上書きされていまい、注文履歴が積み上がりません。 解決せずに困っております。 どなたか、ご教授頂けますでしょうか? よろしくお願いいたします。

  • レコードセットに新規追加する

    Access2013 VBAで ■テーブルa ・id ・名前 ・id2 とあり このテーブルのレコードセットを以下のように作ります。 dim Rec = dao.Recordset Set Db = CurrentDB set Rec = Db.OpenRecordset("Select * from [テーブルa] where id2 = " & 2, dbOpenDynaset) この時、このテーブルにid2=2のレコードが何もない場合、この生成したRecで、 Rec.AddNew Rec.Fields("名前").value = "名前" Rec.Update と出来ますでしょうか? よろしくお願いします。

  • ACCESS ADOのMovePreviousについて

    毎度お世話になっております。 ACCESS2003を使用しています。 ACCESS ADOにて、レコードセットがeofになった後、 MovePreviousをし、MoveNextをし、 さらにもう一度MovePreviousをすると、 最終レコードの一つ前に戻ってしまいます。 テーブル1 フィールド1 フィールド2    1     あ    2     い    3     う    4     え    5     お コード Sub test()   Dim cn As New ADODB.Connection   Dim rs As New ADODB.Recordset   Set cn = CurrentProject.Connection   rs.Open "select * from テーブル1 order by フィールド1", cn, adOpenDynamic, adLockReadOnly   Do Until rs.EOF    rs.MoveNext   Loop   rs.MovePrevious   Debug.Print rs.Fields("フィールド1").Value   rs.MoveNext   rs.MovePrevious   Debug.Print rs.Fields("フィールド1").Value   rs.Close: Set rs = Nothing   cn.Close: Set cn = Nothing End Sub 一度目のdebug.printは5に、 二度目のdebug.printは4になります。 このような仕組みなのでしょうか。 ご教授お願いいたします。

  • Access 非連結からレコード追加について

    標記の件。 不明な点がありご教授頂きたくお願い致します。 今まで普通に使えていたのですが急にエラー「実行時エラー2147467259・(80004005)エラーを特定できません」が出るようになりました。 Windowsのヘルプを参照しましたが、全然ヘルプどころか謎が深まるばかりという状況です。 2つあるチェックボックスの2つ目でエラーになります。 下記コードで全体の改善点含め原因等ありましたらご教授をお願い致します。クエリに変更はありませんでした。 Private Sub btn_登録_Click() Dim con As ADODB.Connection Dim rst As ADODB.Recordset Set con = CurrentProject.Connection Set rst = New ADODB.Recordset If IsNull(txt_工数ロットCD = "" Or _ txt_部品CD = "" Or _ txt_図面番号 = "" Or _ txt_数量 = "" Or _ txt_品名 = "" Or _ cmb_社員名 = "" Or _ txt_作業日 = "" Or _ cmb_工程 = "" Or _ txt_工数 = "") Then MsgBox " 未入力項目があります", vbCritical, "確認" Exit Sub End If If txt_工数ロットCD = "" Or _ txt_部品CD = "" Or _ txt_図面番号 = "" Or _ txt_数量 = "" Or _ txt_品名 = "" Or _ cmb_社員名 = "" Or _ txt_作業日 = "" Or _ cmb_工程 = "" Or _ txt_工数 = "" Then MsgBox "未入力項目が有ります", vbCritical, "確認" Exit Sub End If rst.Open "Q_工程進捗確認", con, adOpenForwardOnly, adLockPessimistic On Error GoTo err_handler 'エラーなら con.BeginTrans ' With rst .AddNew .Fields("工数ロットCD") = Me!txt_工数ロットCD .Fields("部品CD") = Me!txt_部品CD .Fields("数量") = Me!txt_数量 .Fields("社員名") = Me!cmb_社員名 .Fields("作業日") = Me!txt_作業日 .Fields("工程") = Me!cmb_工程 .Fields("工数") = Me!txt_工数 If IsNull(Me.chk_自工程完了) Then .Update Else .Fields("自工程完了") = Me.chk_自工程完了 .Update '更新 End If If IsNull(Me.chk_製作完了) Then .Update '更新 Else .Fields("製作完了") = Me.chk_製作完了.Value ←ここでエラー .Update End If End With con.CommitTrans '確定 Set rst = Nothing Set con = Nothing Call btn_クリア_Click Exit Sub err_handler: con.RollbackTrans Call dbcut_off MsgBox Error$ Debug.Print Error$ End Sub

  • ACCESS2021に変えたら値が代入されない

    開いてくださりありがとうございます。 MS-ACCESS2003で開発した業務システムがあります。 今回、ACCESS2021(Microsoft365)に変更したところ、不可解な動作が生じていて非常に困っています。 以下に抜粋したコードを記載します。 -- Me!税抜合計 = Me!小計 Me!消費税 = Me!消費税計 Me!伝票合計 = Me!総額 -- 伝票入力フォームから伝票明細を入力し、その合計が表示されるテキストボックスの値を作業用のテキストボックスに代入しています。 ブレイクポイントで停止させて確認すると、右側の項目には間違いなく値が入っている(マウスポインターを合わせると例えば1000と表示される)のですが、左側の項目は0のままです。 この状況は伝票明細が5行以上の時に発生します。 (4行以下の伝票では発生しません) しかもACCESS2003では問題なく動作していました。 値が代入されないのは長く開発していて初めての現象です。 ぜひアドバイスをお願いします。

  • DAOでフィールドの値を変更する

    MDBファイルにDAOでアクセスし、フィールド(今回の場合Fields(4))の値をTextBox内の値に変更する方法がわかりません。 Dim WS As DAO.Workspace Dim DB As DAO.Database Dim RS As DAO.Recordset 'レコードを特定する処理 RS.Fields(4).Value = TextBox.Text RS.Update どのように直せばいいのでしょうか??

  • 消費税について

    消費税について 通常、いろいろなものに消費税がかかります。 電車賃やTAX代などの交通費は、実際込みで支払いしておりますが 経理処理の上では、税抜きとするときにはどうしたらいいでしょうか? 例 TAX代980円 この時、税抜きの時は980×1.05の933円で計上することになるのでしょうか?

  • 2回目に画面のレコードセットの値が読めない

    メインフォームとサブフォームの画面゛て レコードソースは、ワークテーブルを参照し メインフォームの保存ボタンの処理で、 Private Sub 保存ボタン_Click()  Set mySubFm = Me![テーブル子].Form  Set myParFm = Forms(Me.name) '<== 親フォーム  Set Rec1 = myParFm.RecordsetClone  Set Rec2 = mySubFm.RecordsetClone  Lng受注ID = Rec1.Fields("受注ID").Value  Dim Rtn As Integer  ・レコードセットのデータを、本テーブルに更新する処理  ・自動採番した番号を、レコードセットのIDのフィールドにセット   Rec1.Edit   Rec1.Fields("ID").value = newID   Rec1.Update  ・Me.Requery '<== メインフォームの画面を更新  ・mySubFm.Requery '<==サブフォームの画面を更新  Set Rec1 = Nothing   Set Rec2 = nothing End Sub この処理を一度行い、更に、画面のサブレコードの値を変更して、保存ボタンを再度押すと、 Lng受注ID = Rec1.Fields("受注ID").Value の行で、 「オブジェクトが正しくないか、現在設定されていません」というエラーになります。 この原因はどうしたら解決出来ますでしょうか? よろしくお願いします。

  • ACCESS DSUM関数の使い方について

    よろしくお願いいたします。 環境:winXP/Access2003(Office2003) 受注データが2つのファイルに分かれています。 (1)ヘッダーテーブル:ORDER_H (2)明細テーブル:ORDER_D クエリにて2つのテーブルを結合し、同一クエリ内のフィールドで、受注NO(ORDER_NO)毎の”消費税(TAX)"と”明細小計(syo_kingaku)"の累計を計算したい状況です。 現在クエリのフィールドに、 式1:DSum([TAX],"ORDER_D","[ORDER_NO]="&"[ORDER_NO]")とセットし実行しましたら、 計算結果は、[TAX]×レコード数になってしまいます。 恐れ入りますがご教授をお願いいたします。