Accessデータの競合について

このQ&Aのポイント
  • Access2010でデータの競合が起きる問題について質問です。
  • 特定の操作時にのみデータの競合が表示されるため、何か指定が抜けているのか確認したいです。
  • 具体的な操作としては、テーブルの更新後にフォームをクローズしようとするとデータの競合が表示されます。レコードの追加時には問題ありません。
回答を見る
  • ベストアンサー

Accessで”データの競合"となる

Access2010を使用しています。 テーブル更新後にフォームをクローズしようとすると”データの競合"とメーセージが表示されます。 レコードを追加する時はならないのですが、レコードを変更しようとするとメーセージが表示されます。 具体的には下記のようにコーディングしています。 何か指定もれがあるのでしょうか? With Application.CurrentDb Set oRS = .OpenRecordset("顧客マスター", dbOpenDynaset) oRS.FindFirst "顧客コード = " & Me.顧客コード If oRS.NoMatch = False Then oRS.Edit Else oRS.AddNew End If oRS("顧客コード").Value = Me.顧客コード.Value     (その他の項目を代入)    oRS.Update oRS.Close Set oRS = Nothing End With DoCmd.Close acForm, Me.Name

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

  • ベストアンサー
回答No.1

顧客マスターをレコードソースとしているフォーム上から Set oRS = .OpenRecordset("顧客マスター", dbOpenDynaset) で新規のレコードセットを開いているのではありませんか? フォームとoRSとで二つの接続。 レコードセットでの変更を行わずにフォーム上で新規・更新を行い フォームを閉じるだけでも反映されるはずです。 念をいれて、docmd.RunCommand acCmdSaveRecord でも可。 ご参考まで。

crabcancer
質問者

お礼

ありがとうございます。 フォームのレコードソースのことは全く頭にありませんでした。 おかげさまで先に進めました。 また、よろしくお願いします。

関連するQ&A

  • ACCESS(VBA)の検索結果判定について

    ACCESS(VBA)の検索処理にて 以下のVBAを実行すると、かならず「★データあり処理」 に流れてしまいます。 確実に検索結果がヒットしない状態(データ全削除)にしても 同じです。 何故なのでしょうか。。 ====================== Private Sub xx_Click() Dim sSql As String sSql = "SELECT 年月 FROM 材料明細トランザクション " _ & "WHERE 年月 = " & Me.年月.Value & " " _ & "AND 材料顧客コード = " & Me.材料顧客コード.Value & " " _ & "AND 現場コード = " & Me.現場コード.Value Set db = CurrentDb Set oRs = db.OpenRecordset(sSql) If oRs.NoMatch = False Then '★データあり処理 Else 'データなし処理 End If End Sub ====================== ※初心者ですので、わかりやすく回答していただけると助かります。

  • Access レコードの検索と追加

    日報というフォームに日付とリンクしたサブフォームを作成しました。 複数の人がデータを入力するのですが、日報フォームの日付は重複したくありません。 それで日付入力というテキストボックスを作成して、その日付と同じ日付を検索して、なければ新規のレコードを作成するというようにしたいと思っています。 Private Sub txt日付入力_AfterUpdate() Dim rs As DAO.Recordset Set rs = Me.Recordset.Clone rs.FindFirst "日付 = #" & Me!txt日付入力.Value & "#"  If rs.NoMatch Then   rs.AddNew  Else   Me.Bookmark = rs.Bookmark  End If rs.Close: Set rs = Nothing End Sub というようにしたのですが、新規のレコードを作成する部分がどうしても分かりません。 どなたか分かる方、よろしくお願いします。

  • FindFirst複数条件

    access 超初心者です。 フォームに2つのコンボボックス(COM_A,COM_B)があり そのコンボボックスで条件を2つ設定し、テーブル(TBL)から 条件の一致したレコードを検索したいのですが、うまくいきません。 TBLのフィールド AAA ---> COM_Aで指定 BBB ---> COM_Bで指定 Dim db As DAO.Database Dim TBL As DAO.Recordset Set db = CurrentDb Set TBLrs = db.OpenRecordset("TBL", dbOpenDynaset) TBLrs.FindFirst"AAA='"&Me.COM_A&"'"And"BBB='"& Me.COM_B & "'" If TBLrs.NoMatch Then 処理 Else 処理 End If というコードなのですが、実行すると『型が一致しません』となってしまいます。 TBLrs.FindFirst"AAA='"&Me.COM_A&"'" If TBLrs.NoMatch Then ~ とか TBLrs.FindFirst"BBB='"&Me.COM_B&"'" If TBLrs.NoMatch Then  ~ のように条件を1つにすると各々問題なく動作します。 単純にAndでひっつけるだけではダメなのでしょうか? いろいろ調べましたが、完全に行き詰ってしまいました。 ヒントでもいただければありがたいです。 よろしくお願いします。

  • ExcelからAccessデータを検索するマクロ

    Excel、Accessとも初心者です。 下記を参考にさせて頂いております。 http://okwave.jp/qa/q441987.html これを、(1)~(3)に対応させたいのですが どのように書き換えればよろしいのでしょうか? (1)A1→ A列の最後まで (2)対応するレコードフィールド2   → 規定した複数のレコードフィールド     (例えば、フィールド3とフィールド5とフィールド8) (3)Excel, Accessともに2007です。 (4)検索の経過は表示させない  (少しでも早く処理したい。ひとつひとつ検索結果を表示すると遅くなると聞ききました) ・・・・・・・・・・・・・・・・・・・・・・・・・ Sub Macro1() Dim db As DAO.Database Dim rs As DAO.Recordset Set db = OpenDatabase("c:\abc.mdb") Set rs = db.OpenRecordset("tbl_a", dbOpenDynaset) rs.FindFirst "[フィールド1]='" & Range("A1").Value & "'" If rs.NoMatch Then   Range("B1").Value = "" Else   Range("B1").Value = rs![フィールド2] End If rs.Close Set rs = Nothing Set db = Nothing End Sub ・・・・・・・・・・・・・・・・・・・・・・・・・ よろしくご教授お願いします。

  • 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と数量だけが上書きされていまい、注文履歴が積み上がりません。 解決せずに困っております。 どなたか、ご教授頂けますでしょうか? よろしくお願いいたします。

  • Access97 VBAにてレコードの検索

    お世話になります。 フォームでのレコード追加の際、 重複入力を避けるためにレコード検索を追加したいのですが、うまくいきません。 ただいまのソースは、 Set db = DBEngine.Workspaces(0).Databases(0) Set myrs = db.OpenRecordset("社員マスター", DB_OPEN_DYNASET) myrs.FindFirst "社員_cd =" & " '" & Me.社員_cd & "' " If myrs.NoMatch = False Then IMsg = "すでに登録されています!!!" IRet = MsgBox(IMsg, 16, "エラー") myrs.Close db.Close Exit Sub End If 以上はうまく機能するのですが、 社員マスターのキーを"部門_cd"と"社員_cd"にする場合、 単純に社員_cdのみのチェックではダメで、部門_cdのチェックも同時に必要になるかと思いますが、うまくコーディングできず。 myrs.FindFirstの一文を適切に書いてやらなければいけないと思いますが、わかりません……。 教えていただけますでしょうか? ※質問文のみでは情報が不足している場合、ご指摘いただければ補足にて追加させていただきます

  • Access2007 サブフォームのレコードを一括印刷する方法

    お世話になっております。 サブフォームは帳票型になっており、下記で表示されている全レコードのチェックが入ります。 これと平行して、各レコードを印刷したいのですが、カーソルがあるレコードのみがレコードの数だけ印刷されてしまいます。 これを各レコードごとに印刷したいと思います。 Dim dbs As Database Dim rst As Recordset Dim strSQL As String Set dbs = CurrentDb Set rst = Me.RecordsetClone With rst If .RecordCount > 0 Then .MoveFirst Do Until .EOF .Edit !チェック = True DoCmd.OpenReport "印刷", acNormal, , "コード=" & Me.コード .Update .MoveNext Loop End If .Close End With ご教授いただければ幸いです。よろしくお願いいたします。

  • いつも参考にさせて頂いてます。

    いつも参考にさせて頂いてます。 Access2003で検索フォームを作成しています。 find系メソッドで検索を行い、フォームに表示させるのですが 該当データが複数あった場合の処理について質問させてください。 現在、該当データが複数あった場合、ループの中でfindnextを使用し msgboxにて次の該当データを表示させるかどうかという条件分岐をしています。 ただ、この方法だとmsgboxが画面の真ん中に出てしまうので 表示されたフォームが見ずらく、使い勝手が悪いのです・・・。 そこで自分で作成したmsgboxのようなフォームを作ったのですが どのようにしてそのフォームからの戻り値を受け取るのかと 処理の流れがわかりません。 わかる方いましたら教えてください。 宜しくお願いします。 Private Sub 検索_Click() Dim db As Database Dim rs As Recordset Dim str As String Dim msg As String Set db = CurrentDb Set rs = db.OpenRecordset("取引テーブル", dbOpenDynaset) str = "取引番号='" & Me.検索 & "'" rs.FindFirst str If rs.NoMatch = False Then Me.torihikiNo.Value = rs.Fields("取引番号") Me.torihikiDay.Value = rs.Fields("取引日") Me.kokyakuName.Value = rs.Fields("顧客名") Do Until rs.EOF rs.FindNext str If rs.NoMatch = False Then msg = MsgBox("該当データが複数存在します。次を表示しますか?" _ '←ここを変更したいのです。 , vbYesNo _ , "確認") Select Case msg Case vbYes Me.torihikiNo.Value = rs.Fields("取引番号") Me.torihikiDay.Value = rs.Fields("取引日") Me.kokyakuName.Value = rs.Fields("顧客名") Case vbNo Exit Do End Select Else MsgBox "該当データはこれ以上ありません。" Exit Do End If Loop Else Me.torihikiNo.Value = vbNullString Me.torihikiDay.Value = vbNullString Me.kokyakuName.Value = vbNullString MsgBox "該当するデータはありません。" End If rs.Close Set rs = Nothing db.Close Set db = Nothing End Sub

  • DAO findfirst ついて教えてください。

    下記のように記述し実行しているのですが、  実行時エラー'3077'  式の構文エラー:演算子がありません というエラー(下記===>)がでます。別なTBLではちゃんとfindfirst を使い結果がでているのですが、このイベントだけうまくいきません。 ちなみに、findfirst行をコメントにするとTBL1行目を読み込んでくれます。 Private Sub in_lot_no_AfterUpdate() Dim dbDAO As DAO.Database Dim rsDAO As DAO.Recordset Dim wkJOUKEN As String Set dbDAO = OpenDatabase("\\Network-SV\factory.mdb") Set rsDAO = dbDAO.OpenRecordset("JI_NYUKAJI", dbOpenDynaset) wkJOUKEN = "LOTNO=" & Me!in_Lot_No  '非連結入力TXT-BOX ===>rsDAO.FindFirst wkJOUKEN If rsDAO.NoMatch Then MsgBox ("入荷情報が存在しません。") Else Me!in_nyuukaday = rsDAO![NYUKADAY] Me!in_shubetu = rsDAO![KATASIKI] End If rsDAO.Close: Set rsDAO = Nothing dbDAO.Close: Set dbDAO = Nothing End Sub 初心者ですがよろしくお願いいたします。

  • ACCESS どこがおかしいのか?

    ACCESSで。クエリからフォームを作成し、検索フォームを作成しようとしています。 AND条件とOR条件を作り検索(抽出)を行いたいのですが、何が間違っているのか、 検索をかけるとすべて「登録がありません」になってしまいます。 どこが間違っているのか、もしくは代替案を教えていただけますでしょうか。 以下は記述した、VBAコードです。 Private Sub 検索ボタン_Click() Dim db As DAO.Database Dim rs As DAO.Recordset Dim stFil As String Set db = CurrentDb() Set rs = db.OpenRecordset("Q_Autoweb", dbOpenDynaset) 'オプションボタンで条件を選択 If 検索条件 = 1 Then rs.Filter = "[タイトル]='" & タイトル検索 & "' and [本文]='" & テキスト15 & "'" Else rs.Filter = "[タイトル]='" & タイトル検索 & "' or [本文]='" & テキスト15 & "'" End If Set rs = rs.OpenRecordset Set Me.Recordset = rs If rs.EOF = True Then MsgBox "登録がありません" Else Me.ID = rs!ID Me.案件名 = rs!案件名 Me.タイトル = rs!タイトル Me.本文 = rs!本文 End If rs.Close Set rs = Nothing db.Close Set db = Nothing End Sub よろしくお願いします。

専門家に質問してみよう